Home | History | Annotate | Download | only in media
      1 #ifndef _UAPI_MEDIA_MSM_CAM_SENSOR_H
      2 #define _UAPI_MEDIA_MSM_CAM_SENSOR_H
      3 
      4 #ifdef MSM_CAMERA_BIONIC
      5 #include <sys/types.h>
      6 #endif
      7 #include <linux/types.h>
      8 #include <linux/v4l2-mediabus.h>
      9 #include <linux/i2c.h>
     10 
     11 #define I2C_SEQ_REG_SETTING_MAX   5
     12 #define I2C_SEQ_REG_DATA_MAX      20
     13 #define MAX_CID                   16
     14 
     15 #define MSM_SENSOR_MCLK_8HZ   8000000
     16 #define MSM_SENSOR_MCLK_16HZ  16000000
     17 #define MSM_SENSOR_MCLK_24HZ  24000000
     18 
     19 #define GPIO_OUT_LOW          (0 << 1)
     20 #define GPIO_OUT_HIGH         (1 << 1)
     21 
     22 #define CSI_EMBED_DATA        0x12
     23 #define CSI_RESERVED_DATA_0   0x13
     24 #define CSI_YUV422_8          0x1E
     25 #define CSI_RAW8              0x2A
     26 #define CSI_RAW10             0x2B
     27 #define CSI_RAW12             0x2C
     28 
     29 #define CSI_DECODE_6BIT         0
     30 #define CSI_DECODE_8BIT         1
     31 #define CSI_DECODE_10BIT        2
     32 #define CSI_DECODE_DPCM_10_8_10 5
     33 
     34 #define MAX_SENSOR_NAME 32
     35 
     36 #define MAX_ACT_MOD_NAME_SIZE 32
     37 #define MAX_ACT_NAME_SIZE 32
     38 #define NUM_ACTUATOR_DIR 2
     39 #define MAX_ACTUATOR_SCENARIO 8
     40 #define MAX_ACTUATOR_REGION 5
     41 #define MAX_ACTUATOR_INIT_SET 12
     42 #define MAX_ACTUATOR_REG_TBL_SIZE 8
     43 
     44 #define MOVE_NEAR 0
     45 #define MOVE_FAR  1
     46 
     47 #define MAX_EEPROM_NAME 32
     48 
     49 enum msm_camera_i2c_reg_addr_type {
     50 	MSM_CAMERA_I2C_BYTE_ADDR = 1,
     51 	MSM_CAMERA_I2C_WORD_ADDR,
     52 };
     53 
     54 enum msm_camera_i2c_data_type {
     55 	MSM_CAMERA_I2C_BYTE_DATA = 1,
     56 	MSM_CAMERA_I2C_WORD_DATA,
     57 	MSM_CAMERA_I2C_SET_BYTE_MASK,
     58 	MSM_CAMERA_I2C_UNSET_BYTE_MASK,
     59 	MSM_CAMERA_I2C_SET_WORD_MASK,
     60 	MSM_CAMERA_I2C_UNSET_WORD_MASK,
     61 	MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA,
     62 };
     63 
     64 enum msm_sensor_power_seq_type_t {
     65 	SENSOR_CLK,
     66 	SENSOR_GPIO,
     67 	SENSOR_VREG,
     68 	SENSOR_I2C_MUX,
     69 };
     70 
     71 enum msm_sensor_clk_type_t {
     72 	SENSOR_CAM_MCLK,
     73 	SENSOR_CAM_CLK,
     74 	SENSOR_CAM_CLK_MAX,
     75 };
     76 
     77 enum msm_sensor_power_seq_gpio_t {
     78 	SENSOR_GPIO_RESET,
     79 	SENSOR_GPIO_STANDBY,
     80 	SENSOR_GPIO_MAX,
     81 };
     82 
     83 enum msm_camera_vreg_name_t {
     84 	CAM_VDIG,
     85 	CAM_VIO,
     86 	CAM_VANA,
     87 	CAM_VAF,
     88 	CAM_VREG_MAX,
     89 };
     90 
     91 enum msm_sensor_resolution_t {
     92 	MSM_SENSOR_RES_FULL,
     93 	MSM_SENSOR_RES_QTR,
     94 	MSM_SENSOR_RES_2,
     95 	MSM_SENSOR_RES_3,
     96 	MSM_SENSOR_RES_4,
     97 	MSM_SENSOR_RES_5,
     98 	MSM_SENSOR_RES_6,
     99 	MSM_SENSOR_RES_7,
    100 	MSM_SENSOR_INVALID_RES,
    101 };
    102 
    103 enum sensor_sub_module_t {
    104 	SUB_MODULE_SENSOR,
    105 	SUB_MODULE_CHROMATIX,
    106 	SUB_MODULE_ACTUATOR,
    107 	SUB_MODULE_EEPROM,
    108 	SUB_MODULE_LED_FLASH,
    109 	SUB_MODULE_STROBE_FLASH,
    110 	SUB_MODULE_CSID,
    111 	SUB_MODULE_CSID_3D,
    112 	SUB_MODULE_CSIPHY,
    113 	SUB_MODULE_CSIPHY_3D,
    114 	SUB_MODULE_MAX,
    115 };
    116 
    117 enum csid_cfg_type_t {
    118 	CSID_INIT,
    119 	CSID_CFG,
    120 	CSID_RELEASE,
    121 };
    122 
    123 enum csiphy_cfg_type_t {
    124 	CSIPHY_INIT,
    125 	CSIPHY_CFG,
    126 	CSIPHY_RELEASE,
    127 };
    128 
    129 enum camera_vreg_type {
    130 	REG_LDO,
    131 	REG_VS,
    132 	REG_GPIO,
    133 };
    134 
    135 struct msm_sensor_power_setting {
    136 	enum msm_sensor_power_seq_type_t seq_type;
    137 	uint16_t seq_val;
    138 	long config_val;
    139 	uint16_t delay;
    140 	void *data[10];
    141 };
    142 
    143 struct msm_sensor_power_setting_array {
    144 	struct msm_sensor_power_setting *power_setting;
    145 	uint16_t size;
    146 };
    147 
    148 struct msm_sensor_id_info_t {
    149 	uint16_t sensor_id_reg_addr;
    150 	uint16_t sensor_id;
    151 };
    152 
    153 struct msm_camera_sensor_slave_info {
    154 	uint16_t slave_addr;
    155 	enum msm_camera_i2c_reg_addr_type addr_type;
    156 	struct msm_sensor_id_info_t sensor_id_info;
    157 	struct msm_sensor_power_setting_array power_setting_array;
    158 };
    159 
    160 struct msm_camera_i2c_reg_array {
    161 	uint16_t reg_addr;
    162 	uint16_t reg_data;
    163 };
    164 
    165 struct msm_camera_i2c_reg_setting {
    166 	struct msm_camera_i2c_reg_array *reg_setting;
    167 	uint16_t size;
    168 	enum msm_camera_i2c_reg_addr_type addr_type;
    169 	enum msm_camera_i2c_data_type data_type;
    170 	uint16_t delay;
    171 };
    172 
    173 struct msm_camera_i2c_seq_reg_array {
    174 	uint16_t reg_addr;
    175 	uint8_t reg_data[I2C_SEQ_REG_DATA_MAX];
    176 	uint16_t reg_data_size;
    177 };
    178 
    179 struct msm_camera_i2c_seq_reg_setting {
    180 	struct msm_camera_i2c_seq_reg_array *reg_setting;
    181 	uint16_t size;
    182 	enum msm_camera_i2c_reg_addr_type addr_type;
    183 	uint16_t delay;
    184 };
    185 
    186 struct msm_camera_csid_vc_cfg {
    187 	uint8_t cid;
    188 	uint8_t dt;
    189 	uint8_t decode_format;
    190 };
    191 
    192 struct msm_camera_csid_lut_params {
    193 	uint8_t num_cid;
    194 	struct msm_camera_csid_vc_cfg *vc_cfg[MAX_CID];
    195 };
    196 
    197 struct msm_camera_csid_params {
    198 	uint8_t lane_cnt;
    199 	uint16_t lane_assign;
    200 	uint8_t phy_sel;
    201 	struct msm_camera_csid_lut_params lut_params;
    202 };
    203 
    204 struct msm_camera_csiphy_params {
    205 	uint8_t lane_cnt;
    206 	uint8_t settle_cnt;
    207 	uint16_t lane_mask;
    208 	uint8_t combo_mode;
    209 };
    210 
    211 struct msm_camera_csi2_params {
    212 	struct msm_camera_csid_params csid_params;
    213 	struct msm_camera_csiphy_params csiphy_params;
    214 };
    215 
    216 struct msm_camera_csi_lane_params {
    217 	uint16_t csi_lane_assign;
    218 	uint16_t csi_lane_mask;
    219 };
    220 
    221 struct csi_lane_params_t {
    222 	uint16_t csi_lane_assign;
    223 	uint8_t csi_lane_mask;
    224 	uint8_t csi_if;
    225 	uint8_t csid_core[2];
    226 	uint8_t csi_phy_sel;
    227 };
    228 
    229 struct msm_sensor_info_t {
    230 	char sensor_name[MAX_SENSOR_NAME];
    231 	int32_t    session_id;
    232 	int32_t     subdev_id[SUB_MODULE_MAX];
    233 };
    234 
    235 struct camera_vreg_t {
    236 	const char *reg_name;
    237 	enum camera_vreg_type type;
    238 	int min_voltage;
    239 	int max_voltage;
    240 	int op_mode;
    241 	uint32_t delay;
    242 };
    243 
    244 enum camb_position_t {
    245 	BACK_CAMERA_B,
    246 	FRONT_CAMERA_B,
    247 };
    248 
    249 enum camerab_mode_t {
    250 	CAMERA_MODE_2D_B = (1<<0),
    251 	CAMERA_MODE_3D_B = (1<<1)
    252 };
    253 
    254 struct msm_sensor_init_params {
    255 	/* mask of modes supported: 2D, 3D */
    256 	int                 modes_supported;
    257 	/* sensor position: front, back */
    258 	enum camb_position_t position;
    259 	/* sensor mount angle */
    260 	uint32_t            sensor_mount_angle;
    261 };
    262 
    263 struct sensorb_cfg_data {
    264 	int cfgtype;
    265 	union {
    266 		struct msm_sensor_info_t      sensor_info;
    267 		struct msm_sensor_init_params sensor_init_params;
    268 		void                         *setting;
    269 		int8_t effect;
    270 		uint8_t wb_val;
    271 		int8_t exp_compensation;
    272 		int8_t fps;
    273 	} cfg;
    274 };
    275 
    276 struct csid_cfg_data {
    277 	enum csid_cfg_type_t cfgtype;
    278 	union {
    279 		uint32_t csid_version;
    280 		struct msm_camera_csid_params *csid_params;
    281 	} cfg;
    282 };
    283 
    284 struct csiphy_cfg_data {
    285 	enum csiphy_cfg_type_t cfgtype;
    286 	union {
    287 		struct msm_camera_csiphy_params *csiphy_params;
    288 		struct msm_camera_csi_lane_params *csi_lane_params;
    289 	} cfg;
    290 };
    291 
    292 enum eeprom_cfg_type_t {
    293 	CFG_EEPROM_GET_INFO,
    294 	CFG_EEPROM_GET_DATA,
    295 	CFG_EEPROM_READ_DATA,
    296 	CFG_EEPROM_WRITE_DATA,
    297 };
    298 struct eeprom_get_t {
    299 	uint16_t num_bytes;
    300 };
    301 
    302 struct eeprom_read_t {
    303 	uint8_t *dbuffer;
    304 	uint16_t num_bytes;
    305 };
    306 
    307 struct eeprom_write_t {
    308 	uint8_t *dbuffer;
    309 	uint16_t num_bytes;
    310 };
    311 
    312 struct msm_eeprom_cfg_data {
    313 	enum eeprom_cfg_type_t cfgtype;
    314 	uint8_t is_supported;
    315 	union {
    316 		char eeprom_name[MAX_SENSOR_NAME];
    317 		struct eeprom_get_t get_data;
    318 		struct eeprom_read_t read_data;
    319 		struct eeprom_write_t write_data;
    320 	} cfg;
    321 };
    322 
    323 enum msm_sensor_cfg_type_t {
    324 	CFG_SET_SLAVE_INFO,
    325 	CFG_WRITE_I2C_ARRAY,
    326 	CFG_WRITE_I2C_SEQ_ARRAY,
    327 	CFG_POWER_UP,
    328 	CFG_POWER_DOWN,
    329 	CFG_SET_STOP_STREAM_SETTING,
    330 	CFG_GET_SENSOR_INFO,
    331 	CFG_GET_SENSOR_INIT_PARAMS,
    332 	CFG_SET_INIT_SETTING,
    333 	CFG_SET_RESOLUTION,
    334 	CFG_SET_STOP_STREAM,
    335 	CFG_SET_START_STREAM,
    336 	CFG_SET_EFFECT,
    337 	CFG_SET_WB,
    338 	CFG_SET_FPS,
    339 	CFG_SET_EXPOSURE_COMPENSATION,
    340 };
    341 
    342 enum msm_actuator_cfg_type_t {
    343 	CFG_GET_ACTUATOR_INFO,
    344 	CFG_SET_ACTUATOR_INFO,
    345 	CFG_SET_DEFAULT_FOCUS,
    346 	CFG_MOVE_FOCUS,
    347 	CFG_ACTUATOR_POWERDOWN,
    348 };
    349 
    350 enum actuator_type {
    351 	ACTUATOR_VCM,
    352 	ACTUATOR_PIEZO,
    353 };
    354 
    355 enum msm_actuator_data_type {
    356 	MSM_ACTUATOR_BYTE_DATA = 1,
    357 	MSM_ACTUATOR_WORD_DATA,
    358 };
    359 
    360 enum msm_actuator_addr_type {
    361 	MSM_ACTUATOR_BYTE_ADDR = 1,
    362 	MSM_ACTUATOR_WORD_ADDR,
    363 };
    364 
    365 struct reg_settings_t {
    366 	uint16_t reg_addr;
    367 	uint16_t reg_data;
    368 };
    369 
    370 struct region_params_t {
    371 	/* [0] = ForwardDirection Macro boundary
    372 	   [1] = ReverseDirection Inf boundary
    373 	 */
    374 	uint16_t step_bound[2];
    375 	uint16_t code_per_step;
    376 };
    377 
    378 struct damping_params_t {
    379 	uint32_t damping_step;
    380 	uint32_t damping_delay;
    381 	uint32_t hw_params;
    382 };
    383 
    384 struct msm_actuator_move_params_t {
    385 	int8_t dir;
    386 	int8_t sign_dir;
    387 	int16_t dest_step_pos;
    388 	int32_t num_steps;
    389 	struct damping_params_t *ringing_params;
    390 };
    391 
    392 struct msm_actuator_tuning_params_t {
    393 	int16_t initial_code;
    394 	uint16_t pwd_step;
    395 	uint16_t region_size;
    396 	uint32_t total_steps;
    397 	struct region_params_t *region_params;
    398 };
    399 
    400 struct msm_actuator_params_t {
    401 	enum actuator_type act_type;
    402 	uint8_t reg_tbl_size;
    403 	uint16_t data_size;
    404 	uint16_t init_setting_size;
    405 	uint32_t i2c_addr;
    406 	enum msm_actuator_addr_type i2c_addr_type;
    407 	enum msm_actuator_data_type i2c_data_type;
    408 	struct msm_actuator_reg_params_t *reg_tbl_params;
    409 	struct reg_settings_t *init_settings;
    410 };
    411 
    412 struct msm_actuator_set_info_t {
    413 	struct msm_actuator_params_t actuator_params;
    414 	struct msm_actuator_tuning_params_t af_tuning_params;
    415 };
    416 
    417 struct msm_actuator_get_info_t {
    418 	uint32_t focal_length_num;
    419 	uint32_t focal_length_den;
    420 	uint32_t f_number_num;
    421 	uint32_t f_number_den;
    422 	uint32_t f_pix_num;
    423 	uint32_t f_pix_den;
    424 	uint32_t total_f_dist_num;
    425 	uint32_t total_f_dist_den;
    426 	uint32_t hor_view_angle_num;
    427 	uint32_t hor_view_angle_den;
    428 	uint32_t ver_view_angle_num;
    429 	uint32_t ver_view_angle_den;
    430 };
    431 
    432 enum af_camera_name {
    433 	ACTUATOR_MAIN_CAM_0,
    434 	ACTUATOR_MAIN_CAM_1,
    435 	ACTUATOR_MAIN_CAM_2,
    436 	ACTUATOR_MAIN_CAM_3,
    437 	ACTUATOR_MAIN_CAM_4,
    438 	ACTUATOR_MAIN_CAM_5,
    439 	ACTUATOR_WEB_CAM_0,
    440 	ACTUATOR_WEB_CAM_1,
    441 	ACTUATOR_WEB_CAM_2,
    442 };
    443 
    444 #define CAMERA_EFFECT_OFF		0
    445 #define CAMERA_EFFECT_MONO		1
    446 #define CAMERA_EFFECT_NEGATIVE		2
    447 #define CAMERA_EFFECT_SOLARIZE		3
    448 #define CAMERA_EFFECT_SEPIA		4
    449 #define CAMERA_EFFECT_POSTERIZE		5
    450 #define CAMERA_EFFECT_WHITEBOARD	6
    451 #define CAMERA_EFFECT_BLACKBOARD	7
    452 #define CAMERA_EFFECT_AQUA		8
    453 #define CAMERA_EFFECT_EMBOSS		9
    454 #define CAMERA_EFFECT_SKETCH		10
    455 #define CAMERA_EFFECT_NEON		11
    456 #define CAMERA_EFFECT_MAX		12
    457 
    458 #define  YUV_CAMERA_WB_AUTO               0	/* This list must match aeecamera.h */
    459 #define  YUV_CAMERA_WB_CUSTOM             1
    460 #define  YUV_CAMERA_WB_INCANDESCENT       2
    461 #define  YUV_CAMERA_WB_FLUORESCENT        3
    462 #define  YUV_CAMERA_WB_WARM_FLUORESCENT   4
    463 #define  YUV_CAMERA_WB_DAYLIGHT           5
    464 #define  YUV_CAMERA_WB_CLOUDY_DAYLIGHT    6
    465 #define  YUV_CAMERA_WB_TWILIGHT           7
    466 #define  YUV_CAMERA_WB_SHADE              8
    467 
    468 #define CAMERA_EXPOSURE_COMPENSATION_LV0			12
    469 #define CAMERA_EXPOSURE_COMPENSATION_LV1			6
    470 #define CAMERA_EXPOSURE_COMPENSATION_LV2			0
    471 #define CAMERA_EXPOSURE_COMPENSATION_LV3			-6
    472 #define CAMERA_EXPOSURE_COMPENSATION_LV4			-12
    473 
    474 #define CAMERA_FPS_FIX_30			30
    475 #define CAMERA_FPS_FIX_25			25
    476 #define CAMERA_FPS_FIX_24			24
    477 #define CAMERA_FPS_FIX_20			20
    478 #define CAMERA_FPS_FIX_15			15
    479 #define CAMERA_FPS_AUTO_30			0
    480 
    481 struct msm_actuator_cfg_data {
    482 	int cfgtype;
    483 	uint8_t is_af_supported;
    484 	union {
    485 		struct msm_actuator_move_params_t move;
    486 		struct msm_actuator_set_info_t set_info;
    487 		struct msm_actuator_get_info_t get_info;
    488 		enum af_camera_name cam_name;
    489 	} cfg;
    490 };
    491 
    492 enum msm_actuator_write_type {
    493 	MSM_ACTUATOR_WRITE_HW_DAMP,
    494 	MSM_ACTUATOR_WRITE_DAC,
    495 };
    496 
    497 struct msm_actuator_reg_params_t {
    498 	enum msm_actuator_write_type reg_write_type;
    499 	uint32_t hw_mask;
    500 	uint16_t reg_addr;
    501 	uint16_t hw_shift;
    502 	uint16_t data_shift;
    503 };
    504 
    505 enum msm_camera_led_config_t {
    506 	MSM_CAMERA_LED_OFF,
    507 	MSM_CAMERA_LED_LOW,
    508 	MSM_CAMERA_LED_HIGH,
    509 	MSM_CAMERA_LED_INIT,
    510 	MSM_CAMERA_LED_RELEASE,
    511 };
    512 
    513 struct msm_camera_led_cfg_t {
    514 	enum msm_camera_led_config_t cfgtype;
    515 };
    516 
    517 #define VIDIOC_MSM_SENSOR_CFG \
    518 	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data)
    519 
    520 #define VIDIOC_MSM_SENSOR_RELEASE \
    521 	_IO('V', BASE_VIDIOC_PRIVATE + 2)
    522 
    523 #define VIDIOC_MSM_SENSOR_GET_SUBDEV_ID \
    524 	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, uint32_t)
    525 
    526 #define VIDIOC_MSM_CSIPHY_IO_CFG \
    527 	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csid_cfg_data)
    528 
    529 #define VIDIOC_MSM_CSID_IO_CFG \
    530 	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csiphy_cfg_data)
    531 
    532 #define VIDIOC_MSM_ACTUATOR_CFG \
    533 	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data)
    534 
    535 #define VIDIOC_MSM_FLASH_LED_DATA_CFG \
    536 	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_led_cfg_t)
    537 
    538 #define VIDIOC_MSM_EEPROM_CFG \
    539 	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data)
    540 
    541 #define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */
    542 
    543 #define MSM_V4L2_PIX_FMT_RESERVED_0 v4l2_fourcc('R', 'E', 'S', '0')
    544 
    545 #endif /* __LINUX_MSM_CAM_SENSOR_H */
    546