diff --git a/drivers/input/misc/vl53L0/inc/stmvl53l0-cci.h b/drivers/input/misc/vl53L0/inc/stmvl53l0-cci.h new file mode 100644 index 0000000..d8c3b77 --- /dev/null +++ b/drivers/input/misc/vl53L0/inc/stmvl53l0-cci.h @@ -0,0 +1,65 @@ +/* + * stmvl53l0-cci.h - Linux kernel modules for STM VL53L0 FlightSense TOF sensor + * + * Copyright (C) 2015 STMicroelectronics Imaging Division + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* + * Defines + */ +#ifndef STMVL53L0_CCI_H +#define STMVL53L0_CCI_H +#include + +#include +#include "msm_camera_i2c.h" +#include "msm_camera_dt_util.h" +#include "msm_camera_io_util.h" +#include "msm_cci.h" + +#define MSM_TOF_MAX_VREGS (10) + +struct msm_tof_vreg { + struct camera_vreg_t *cam_vreg; + void *data[MSM_TOF_MAX_VREGS]; + int num_vreg; +}; + +struct cci_data { + struct msm_camera_i2c_client g_client; + struct msm_camera_i2c_client *client; + struct platform_device *pdev; + enum msm_camera_device_type_t device_type; + enum cci_i2c_master_t cci_master; + struct msm_tof_vreg vreg_cfg; + struct msm_sd_subdev msm_sd; + struct v4l2_subdev sdev; + struct v4l2_subdev_ops *subdev_ops; + char subdev_initialized; + uint32_t subdev_id; + uint8_t power_up; + uint32_t lowv; + uint32_t highv; + uint32_t xtalk; + struct msm_camera_gpio_conf gconf; + struct msm_pinctrl_info pinctrl_info; +}; +int stmvl53l0_init_cci(void); +void stmvl53l0_exit_cci(void *); +int stmvl53l0_power_down_cci(void *); +int stmvl53l0_power_up_cci(void *, unsigned int *); + +#endif /* STMVL53L0_CCI_H */ diff --git a/drivers/input/misc/vl53L0/inc/stmvl53l0-i2c.h b/drivers/input/misc/vl53L0/inc/stmvl53l0-i2c.h new file mode 100644 index 0000000..a75a9e5 --- /dev/null +++ b/drivers/input/misc/vl53L0/inc/stmvl53l0-i2c.h @@ -0,0 +1,47 @@ +/* + * stmvl53l0-i2c.h - Linux kernel modules for STM VL53L0 FlightSense TOF sensor + * + * Copyright (C) 2015 STMicroelectronics Imaging Division + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* + * Defines + */ +#ifndef STMVL53L0_I2C_H +#define STMVL53L0_I2C_H +#include +#include +#include "msm_camera_i2c.h" +#include "msm_camera_dt_util.h" +#include "msm_camera_io_util.h" +#include "msm_cci.h" + +struct i2c_data { + struct i2c_client *client; + struct regulator *vana; + uint8_t power_up; + uint32_t lowv; + uint32_t highv; + uint32_t xtalk; + struct msm_camera_gpio_conf gconf; + struct msm_pinctrl_info pinctrl_info; +}; +int stmvl53l0_init_i2c(void); +void stmvl53l0_exit_i2c(void *); +int stmvl53l0_power_up_i2c(void *, unsigned int *); +int stmvl53l0_power_down_i2c(void *); + +#endif /* STMVL53L0_I2C_H */ diff --git a/drivers/input/misc/vl53L0/inc/stmvl53l0.h b/drivers/input/misc/vl53L0/inc/stmvl53l0.h new file mode 100644 index 0000000..4ae84c9 --- /dev/null +++ b/drivers/input/misc/vl53L0/inc/stmvl53l0.h @@ -0,0 +1,201 @@ +/* + * stmvl53l0.h - Linux kernel modules for STM VL53L0 FlightSense TOF sensor + * + * Copyright (C) 2015 STMicroelectronics Imaging Division + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* + * Defines + */ +#ifndef STMVL53L0_H +#define STMVL53L0_H + +#include +#include +#include +#include + +#define STMVL53L0_DRV_NAME "stmvl53l0" +#define STMVL53L0_SLAVE_ADDR (0x52>>1) + +#define DRIVER_VERSION "1.1.18" +#define DRIVER_VERSION_NUM 18 +#define I2C_M_WR 0x00 +/* #define INT_POLLING_DELAY 20 */ + +/* if don't want to have output from vl6180_dbgmsg, comment out #DEBUG macro */ +/*#define DEBUG*/ +/* #define vl6180_dbgmsg(str, args...) pr_debug("%s: " str, __func__, ##args) */ +#define vl53l0_dbgmsg_en(str, args...) \ + pr_debug("%s: " str, __func__, ##args) + +#define vl53l0_dbgmsg(str, args...) \ + pr_debug("%s: " str, __func__, ##args) +/* #define vl6180_errmsg(str, args...) pr_err("%s: " str, __func__, ##args) */ +#define vl53l0_errmsg(str, args...) \ + printk(KERN_ERR "%s: " str, __func__, ##args) + +#define VL53L0_VDD_MIN 2850000 +#define VL53L0_VDD_MAX 2850000 +/*driver working mode*/ +#define OFF_MODE 0 +#define CAM_MODE 1 +#define SAR_MODE 2 +#define SUPER_MODE 3 +#define XTALKCAL_MODE 4 +#define OFFSETCAL_MODE 5 + +/*user actions*/ +#define CAM_ON 0 +#define CAM_OFF 1 +#define SAR_ON 2 +#define SAR_OFF 3 +#define XTALKCAL_ON 4 +#define OFFSETCAL_ON 5 +#define CAL_OFF 6 +#define RESET 7 +/*parameter types*/ +#define OFFSET_PAR 0 +#define XTALKRATE_PAR 1 +#define XTALKENABLE_PAR 2 +#define SIGMAVAL_PRA 3 +#define SIGMACTL_PRA 4 +#define WRAPAROUNDCTL_PRA 5 +#define INTERMEASUREMENTPERIOD_PAR 6 +#define MEASUREMENTTIMINGBUDGET_PAR 7 +#define SGLVAL_PRA 8 +#define SGLCTL_PRA 9 +#define CUTV_PRA 10 +#define DRVV_PRA 11 +#define PLLPRE_PRA 12 +#define PLLFINAL_PRA 13 +#define CCI_BUS 0 +#define I2C_BUS 1 + + +/* + * IOCTL register data structs + */ +struct stmvl53l0_register { + uint32_t is_read; /*1: read 0: #define write*/ + uint32_t reg_index; + uint32_t reg_bytes; + uint32_t reg_data; + int32_t status; +}; + +/* + * IOCTL parameter structs + */ +struct stmvl53l0_parameter { + uint32_t is_read; /*1: Get 0: Set*/ + uint32_t name; + int32_t value; + int32_t status; +}; + +/* + * driver data structs + */ +struct stmvl53l0_data { + /* embed ST VL53L0 Dev data as "dev_data" */ + VL53L0_DevData_t Data; + /* i2c device address user specific field */ + uint8_t I2cDevAddr; + uint8_t comms_type; + uint16_t comms_speed_khz; + + struct cci_data cci_client_object; + struct i2c_data i2c_client_object; + void *client_object; + struct mutex update_lock; + struct delayed_work dwork; /* for PS work handler */ + struct delayed_work initwork; + struct delayed_work resetwork; + struct delayed_work checkwork; + struct input_dev *input_dev_ps; + struct kobject *range_kobj; + + const char *dev_name; + + /* misc device */ + struct miscdevice miscdev; + + int irq; + unsigned int reset; + + /* control flag from HAL */ + unsigned int enable_ps_sensor; + + /* PS parameters */ + unsigned int ps_is_singleshot; + unsigned int ps_is_started; + unsigned int ps_data; /* to store PS data */ + + /* Range Data */ + VL53L0_RangingMeasurementData_t rangeData; + int offset; + int xtalk; + + /* delay time in miniseconds*/ + unsigned int delay_ms; + + struct mutex work_mutex; + /* Debug */ + unsigned int enableDebug; + uint8_t interrupt_received; + int d_mode; + uint8_t w_mode; + /*for SAR mode indicate low range interrupt*/ + uint8_t lowint; + uint8_t bus_type; + uint32_t lowv; + uint32_t highv; + wait_queue_head_t range_data_wait; + uint8_t d_ready; + uint8_t cut_v; + unsigned int xtalkCalDistance; + unsigned int offsetCalDistance; + unsigned int xtalkcalval; + VL53L0_GpioFunctionality gpio_function; + uint8_t c_suspend; + uint8_t c_stopped; + uint32_t refSpadCount; + uint8_t isApertureSpads; + uint8_t VhvSettings; + uint8_t PhaseCal; + uint8_t pll_p; + uint8_t pll_f; +}; + +/* + * funtion pointer structs + */ +struct stmvl53l0_module_fn_t { + int (*init)(void); + void (*deinit)(void *); + int (*power_up)(void *, unsigned int *); + int (*power_down)(void *); +}; + +struct stmvl53l0_data *stmvl53l0_getobject(void); +int stmvl53l0_setup(struct stmvl53l0_data *data, uint8_t type); +int stmvl53l0_checkmoduleid(struct stmvl53l0_data *data, + void *client, uint8_t type); +int stmvl53l0_livechecking(struct stmvl53l0_data *data); +void i2c_setclient(void *client, uint8_t type); + +#endif /* STMVL53L0_H */