331 lines
9.3 KiB
Diff
331 lines
9.3 KiB
Diff
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 <linux/types.h>
|
|
+
|
|
+#include <soc/qcom/camera2.h>
|
|
+#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 <linux/types.h>
|
|
+#include <soc/qcom/camera2.h>
|
|
+#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 <linux/types.h>
|
|
+#include <linux/mutex.h>
|
|
+#include <linux/workqueue.h>
|
|
+#include <linux/miscdevice.h>
|
|
+
|
|
+#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 */
|