OSDN Git Service

msm: ais: sensor: Fix the state check for i2c ops
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / drivers / media / platform / msm / ais / sensor / msm_sensor.h
1 /* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved.
2  *
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 and
5  * only version 2 as published by the Free Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  */
12
13 #ifndef MSM_SENSOR_H
14 #define MSM_SENSOR_H
15
16 #include <linux/debugfs.h>
17 #include <linux/delay.h>
18 #include <linux/i2c.h>
19 #include <linux/miscdevice.h>
20 #include <linux/module.h>
21 #include <linux/platform_device.h>
22 #include <linux/slab.h>
23 #include <linux/clk.h>
24 #include <linux/types.h>
25 #include <linux/uaccess.h>
26 #include <linux/of.h>
27 #include <linux/of_device.h>
28 #include <linux/of_gpio.h>
29 #include <linux/gpio.h>
30 #include <soc/qcom/ais.h>
31 #include <media/ais/msm_ais_sensor.h>
32 #include <media/v4l2-subdev.h>
33 #include <media/v4l2-ioctl.h>
34 #include "msm_camera_i2c.h"
35 #include "msm_camera_dt_util.h"
36 #include "msm_sd.h"
37 #include "msm_sensor_init.h"
38
39 #define DEFINE_MSM_MUTEX(mutexname) \
40         static struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)
41
42 enum msm_sensor_sensor_slave_info_type {
43         MSM_SENSOR_SLAVEADDR_DATA,
44         MSM_SENSOR_IDREGADDR_DATA,
45         MSM_SENSOR_SENSOR_ID_DATA,
46         MSM_SENSOR_SENIDMASK_DATA,
47         MSM_SENSOR_NUM_ID_INFO_DATA,
48 };
49
50 struct msm_sensor_ctrl_t;
51
52 enum msm_sensor_state_t {
53         MSM_SENSOR_POWER_DOWN,
54         MSM_SENSOR_POWER_UP,
55         MSM_SENSOR_CCI_DOWN,
56         MSM_SENSOR_CCI_UP,
57 };
58
59 struct msm_sensor_fn_t {
60         int (*sensor_config)(struct msm_sensor_ctrl_t *, void __user *);
61 #ifdef CONFIG_COMPAT
62         int (*sensor_config32)(struct msm_sensor_ctrl_t *, void __user *);
63 #endif
64         int (*sensor_power_down)(struct msm_sensor_ctrl_t *);
65         int (*sensor_power_up)(struct msm_sensor_ctrl_t *);
66         int (*sensor_match_id)(struct msm_sensor_ctrl_t *);
67 };
68
69 struct msm_sensor_ctrl_t {
70         struct platform_device *pdev;
71         struct mutex *msm_sensor_mutex;
72
73         enum msm_camera_device_type_t sensor_device_type;
74         struct msm_camera_sensor_board_info *sensordata;
75         struct msm_sensor_power_setting_array power_setting_array;
76         struct msm_sensor_packed_cfg_t *cfg_override;
77         struct msm_sd_subdev msm_sd;
78         enum cci_i2c_master_t cci_i2c_master;
79
80         struct msm_camera_i2c_client *sensor_i2c_client;
81         struct v4l2_subdev_info *sensor_v4l2_subdev_info;
82         uint8_t sensor_v4l2_subdev_info_size;
83         struct v4l2_subdev_ops *sensor_v4l2_subdev_ops;
84         struct msm_sensor_fn_t *func_tbl;
85         struct msm_camera_i2c_reg_setting stop_setting;
86         void *misc_regulator;
87         enum msm_sensor_state_t sensor_state;
88         uint8_t is_probe_succeed;
89         uint32_t id;
90         struct device_node *of_node;
91         enum msm_camera_stream_type_t camera_stream_type;
92         uint32_t set_mclk_23880000;
93         uint8_t is_csid_tg_mode;
94         uint32_t is_secure;
95         /* Interrupt GPIOs */
96         struct gpio gpio_array[1];
97         /* device status and Flags */
98         int irq;
99         struct msm_sensor_init_t s_init;
100         /* worker to handle interrupts */
101         struct delayed_work irq_delayed_work;
102 };
103
104 int msm_sensor_send_event(struct msm_sensor_ctrl_t *s_ctrl,
105         uint32_t event_type, struct msm_sensor_event_data *event_data);
106
107 int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp);
108
109 int msm_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl);
110
111 int msm_sensor_power_down(struct msm_sensor_ctrl_t *s_ctrl);
112
113 int msm_sensor_check_id(struct msm_sensor_ctrl_t *s_ctrl);
114
115 int msm_sensor_match_id(struct msm_sensor_ctrl_t *s_ctrl);
116
117 int msm_sensor_update_cfg(struct msm_sensor_ctrl_t *s_ctrl);
118
119 int msm_sensor_free_sensor_data(struct msm_sensor_ctrl_t *s_ctrl);
120
121 int32_t msm_sensor_init_default_params(struct msm_sensor_ctrl_t *s_ctrl);
122
123 int32_t msm_sensor_get_dt_gpio_req_tbl(struct device_node *of_node,
124         struct msm_camera_gpio_conf *gconf, uint16_t *gpio_array,
125         uint16_t gpio_array_size);
126
127 int32_t msm_sensor_get_dt_gpio_set_tbl(struct device_node *of_node,
128         struct msm_camera_gpio_conf *gconf, uint16_t *gpio_array,
129         uint16_t gpio_array_size);
130
131 int32_t msm_sensor_init_gpio_pin_tbl(struct device_node *of_node,
132         struct msm_camera_gpio_conf *gconf, uint16_t *gpio_array,
133         uint16_t gpio_array_size);
134 #ifdef CONFIG_COMPAT
135 long msm_sensor_subdev_fops_ioctl(struct file *file,
136         unsigned int cmd,
137         unsigned long arg);
138 #endif
139 #endif