blob: 5139d22a4a86c47a54c66353f1a9823a715b4271 [file] [log] [blame]
Pratap Nirujogi6e759912018-01-17 17:51:17 +05301/* Copyright (c) 2011-2016, 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
14#ifndef __CAMERA2_H__
15#define __CAMERA2_H__
16
17#include <media/msm_cam_sensor.h>
18#include <linux/interrupt.h>
19#include <linux/of_platform.h>
20#include <linux/of_device.h>
21#include <linux/of.h>
22
23#define MAX_SPECIAL_SUPPORT_SIZE 10
24
25enum msm_camera_device_type_t {
26 MSM_CAMERA_I2C_DEVICE,
27 MSM_CAMERA_PLATFORM_DEVICE,
28 MSM_CAMERA_SPI_DEVICE,
29};
30
31enum msm_bus_perf_setting {
32 S_INIT,
33 S_PREVIEW,
34 S_VIDEO,
35 S_CAPTURE,
36 S_ZSL,
37 S_STEREO_VIDEO,
38 S_STEREO_CAPTURE,
39 S_DEFAULT,
40 S_LIVESHOT,
41 S_DUAL,
42 S_EXIT
43};
44
45struct msm_camera_slave_info {
46 uint16_t sensor_slave_addr;
47 uint16_t sensor_id_reg_addr;
48 uint16_t sensor_id;
49 uint16_t sensor_id_mask;
Vijay kumar Tumati13e62de2018-05-29 10:25:01 +053050 struct msm_camera_i2c_reg_setting *setting;
Pratap Nirujogi6e759912018-01-17 17:51:17 +053051};
52
53struct msm_cam_clk_info {
54 const char *clk_name;
55 long clk_rate;
56 uint32_t delay;
57};
58
59struct msm_pinctrl_info {
60 struct pinctrl *pinctrl;
61 struct pinctrl_state *gpio_state_active;
62 struct pinctrl_state *gpio_state_suspend;
63 bool use_pinctrl;
64};
65
66struct msm_cam_clk_setting {
67 struct msm_cam_clk_info *clk_info;
68 uint16_t num_clk_info;
69 uint8_t enable;
70};
71
72struct v4l2_subdev_info {
73 uint32_t code;
74 enum v4l2_colorspace colorspace;
75 uint16_t fmt;
76 uint16_t order;
77};
78
79struct msm_camera_gpio_num_info {
80 uint16_t gpio_num[SENSOR_GPIO_MAX];
81 uint8_t valid[SENSOR_GPIO_MAX];
82};
83
84struct msm_camera_gpio_conf {
85 void *cam_gpiomux_conf_tbl;
86 uint8_t cam_gpiomux_conf_tbl_size;
87 struct gpio *cam_gpio_common_tbl;
88 uint8_t cam_gpio_common_tbl_size;
89 struct gpio *cam_gpio_req_tbl;
90 uint8_t cam_gpio_req_tbl_size;
91 uint32_t gpio_no_mux;
92 uint32_t *camera_off_table;
93 uint8_t camera_off_table_size;
94 uint32_t *camera_on_table;
95 uint8_t camera_on_table_size;
96 struct msm_camera_gpio_num_info *gpio_num_info;
97};
98
99struct msm_camera_power_ctrl_t {
100 struct device *dev;
101 struct msm_sensor_power_setting *power_setting;
102 uint16_t power_setting_size;
103 struct msm_sensor_power_setting *power_down_setting;
104 uint16_t power_down_setting_size;
105 struct msm_camera_gpio_conf *gpio_conf;
106 struct camera_vreg_t *cam_vreg;
107 int num_vreg;
108 struct msm_camera_i2c_conf *i2c_conf;
109 struct clk **clk_ptr;
110 struct msm_cam_clk_info *clk_info;
111 struct msm_pinctrl_info pinctrl_info;
112 uint8_t cam_pinctrl_status;
113 size_t clk_info_size;
114};
115
116enum msm_camera_actuator_name {
117 MSM_ACTUATOR_MAIN_CAM_0,
118 MSM_ACTUATOR_MAIN_CAM_1,
119 MSM_ACTUATOR_MAIN_CAM_2,
120 MSM_ACTUATOR_MAIN_CAM_3,
121 MSM_ACTUATOR_MAIN_CAM_4,
122 MSM_ACTUATOR_MAIN_CAM_5,
123 MSM_ACTUATOR_WEB_CAM_0,
124 MSM_ACTUATOR_WEB_CAM_1,
125 MSM_ACTUATOR_WEB_CAM_2,
126};
127
128struct msm_actuator_info {
129 struct i2c_board_info const *board_info;
130 enum msm_camera_actuator_name cam_name;
131 int bus_id;
132 int vcm_pwd;
133 int vcm_enable;
134};
135enum msm_camera_i2c_mux_mode {
136 MODE_R,
137 MODE_L,
138 MODE_DUAL
139};
140
141struct msm_camera_i2c_conf {
142 uint8_t use_i2c_mux;
143 struct platform_device *mux_dev;
144 enum msm_camera_i2c_mux_mode i2c_mux_mode;
145};
146
147struct msm_camera_sensor_board_info {
148 const char *sensor_name;
149 const char *eeprom_name;
150 const char *actuator_name;
151 const char *ois_name;
152 const char *flash_name;
153 const char *special_support_sensors[MAX_SPECIAL_SUPPORT_SIZE];
154 int32_t special_support_size;
155 struct msm_camera_slave_info *slave_info;
156 struct msm_camera_csi_lane_params *csi_lane_params;
157 struct msm_camera_sensor_strobe_flash_data *strobe_flash_data;
158 struct msm_actuator_info *actuator_info;
159 struct msm_sensor_info_t *sensor_info;
160 const char *misc_regulator;
161 struct msm_camera_power_ctrl_t power_info;
162 struct msm_camera_sensor_slave_info *cam_slave_info;
163};
164
165enum msm_camera_i2c_cmd_type {
166 MSM_CAMERA_I2C_CMD_WRITE,
167 MSM_CAMERA_I2C_CMD_POLL,
168};
169
170struct msm_camera_i2c_reg_conf {
171 uint16_t reg_addr;
172 uint16_t reg_data;
173 enum msm_camera_i2c_data_type dt;
174 enum msm_camera_i2c_cmd_type cmd_type;
175 int16_t mask;
176};
177
178struct msm_camera_i2c_conf_array {
179 struct msm_camera_i2c_reg_conf *conf;
180 uint16_t size;
181 uint16_t delay;
182 enum msm_camera_i2c_data_type data_type;
183};
184
185struct eeprom_map_t {
186 uint32_t valid_size;
187 uint32_t addr;
188 uint32_t addr_t;
189 uint32_t data;
190 uint32_t data_t;
191 uint32_t delay;
192};
193
194struct eeprom_slave_add_t {
195 uint32_t addr;
196};
197
198struct msm_eeprom_memory_map_t {
199 struct eeprom_map_t page;
200 struct eeprom_map_t pageen;
201 struct eeprom_map_t poll;
202 struct eeprom_map_t mem;
203 struct eeprom_slave_add_t saddr;
204};
205
206struct msm_eeprom_memory_block_t {
207 struct msm_eeprom_memory_map_t *map;
208 uint32_t num_map; /* number of map blocks */
209 uint8_t *mapdata;
210 uint32_t num_data; /* size of total mapdata */
211};
212
213struct msm_eeprom_cmm_t {
214 uint32_t cmm_support;
215 uint32_t cmm_compression;
216 uint32_t cmm_offset;
217 uint32_t cmm_size;
218};
219
220struct msm_eeprom_board_info {
221 const char *eeprom_name;
222 uint16_t i2c_slaveaddr;
223 struct msm_camera_power_ctrl_t power_info;
224 struct msm_eeprom_cmm_t cmm_data;
225 enum i2c_freq_mode_t i2c_freq_mode;
226};
227
228#endif