Pratap Nirujogi | 6e75991 | 2018-01-17 17:51:17 +0530 | [diff] [blame] | 1 | /* 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 | |
| 25 | enum msm_camera_device_type_t { |
| 26 | MSM_CAMERA_I2C_DEVICE, |
| 27 | MSM_CAMERA_PLATFORM_DEVICE, |
| 28 | MSM_CAMERA_SPI_DEVICE, |
| 29 | }; |
| 30 | |
| 31 | enum 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 | |
| 45 | struct 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 Tumati | 13e62de | 2018-05-29 10:25:01 +0530 | [diff] [blame] | 50 | struct msm_camera_i2c_reg_setting *setting; |
Pratap Nirujogi | 6e75991 | 2018-01-17 17:51:17 +0530 | [diff] [blame] | 51 | }; |
| 52 | |
| 53 | struct msm_cam_clk_info { |
| 54 | const char *clk_name; |
| 55 | long clk_rate; |
| 56 | uint32_t delay; |
| 57 | }; |
| 58 | |
| 59 | struct 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 | |
| 66 | struct msm_cam_clk_setting { |
| 67 | struct msm_cam_clk_info *clk_info; |
| 68 | uint16_t num_clk_info; |
| 69 | uint8_t enable; |
| 70 | }; |
| 71 | |
| 72 | struct v4l2_subdev_info { |
| 73 | uint32_t code; |
| 74 | enum v4l2_colorspace colorspace; |
| 75 | uint16_t fmt; |
| 76 | uint16_t order; |
| 77 | }; |
| 78 | |
| 79 | struct msm_camera_gpio_num_info { |
| 80 | uint16_t gpio_num[SENSOR_GPIO_MAX]; |
| 81 | uint8_t valid[SENSOR_GPIO_MAX]; |
| 82 | }; |
| 83 | |
| 84 | struct 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 | |
| 99 | struct 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 | |
| 116 | enum 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 | |
| 128 | struct 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 | }; |
| 135 | enum msm_camera_i2c_mux_mode { |
| 136 | MODE_R, |
| 137 | MODE_L, |
| 138 | MODE_DUAL |
| 139 | }; |
| 140 | |
| 141 | struct 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 | |
| 147 | struct 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 | |
| 165 | enum msm_camera_i2c_cmd_type { |
| 166 | MSM_CAMERA_I2C_CMD_WRITE, |
| 167 | MSM_CAMERA_I2C_CMD_POLL, |
| 168 | }; |
| 169 | |
| 170 | struct 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 | |
| 178 | struct 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 | |
| 185 | struct 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 | |
| 194 | struct eeprom_slave_add_t { |
| 195 | uint32_t addr; |
| 196 | }; |
| 197 | |
| 198 | struct 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 | |
| 206 | struct 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 | |
| 213 | struct 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 | |
| 220 | struct 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 |