Loading Documentation/devicetree/bindings/media/video/msm-cci.txt +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ Required properties: Optional properties: - qcom,slave-id : should contain i2c slave address, device id address and expected id read value ,expected id read value and device id mask - qcom,sensor-name : should contain unique sensor name to differentiate from other sensor - "s5k3l1yx" Loading drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c +49 −10 Original line number Diff line number Diff line Loading @@ -123,7 +123,10 @@ static int32_t msm_sensor_get_dt_data(struct device_node *of_node, struct msm_camera_sensor_board_info *sensordata = NULL; uint16_t *gpio_array = NULL; uint16_t gpio_array_size = 0; uint32_t id_info[3]; uint32_t id_info[MSM_SENSOR_NUM_ID_INFO_DATA]; uint32_t count; const uint32_t *p; struct msm_camera_slave_info *slave_info; s_ctrl->sensordata = kzalloc(sizeof( struct msm_camera_sensor_board_info), Loading Loading @@ -287,21 +290,38 @@ static int32_t msm_sensor_get_dt_data(struct device_node *of_node, goto FREE_ACTUATOR_INFO; } slave_info = sensordata->slave_info; p = of_get_property(of_node, "qcom,slave-id", &count); if (!p || !count) { pr_err("%s failed %d\n", __func__, __LINE__); goto FREE_SLAVE_INFO; } if (count > MSM_SENSOR_NUM_ID_INFO_DATA) { pr_err("%s failed %d\n", __func__, __LINE__); goto FREE_SLAVE_INFO; } memset(id_info, 0, sizeof(*id_info)*MSM_SENSOR_NUM_ID_INFO_DATA); rc = of_property_read_u32_array(of_node, "qcom,slave-id", id_info, 3); id_info, count); if (rc < 0) { pr_err("%s failed %d\n", __func__, __LINE__); goto FREE_SLAVE_INFO; } sensordata->slave_info->sensor_slave_addr = id_info[0]; sensordata->slave_info->sensor_id_reg_addr = id_info[1]; sensordata->slave_info->sensor_id = id_info[2]; CDBG("%s:%d slave addr 0x%x sensor reg 0x%x id 0x%x\n", slave_info->sensor_slave_addr = id_info[MSM_SENSOR_SLAVEADDR_DATA]; slave_info->sensor_id_reg_addr = id_info[MSM_SENSOR_IDREGADDR_DATA]; slave_info->sensor_id = id_info[MSM_SENSOR_SENSOR_ID_DATA]; slave_info->sensor_id_mask = id_info[MSM_SENSOR_SENIDMASK_DATA]; CDBG("%s:%d slave addr 0x%x sensor reg 0x%x id 0x%x mask 0x%x\n", __func__, __LINE__, sensordata->slave_info->sensor_slave_addr, sensordata->slave_info->sensor_id_reg_addr, sensordata->slave_info->sensor_id); slave_info->sensor_slave_addr, slave_info->sensor_id_reg_addr, slave_info->sensor_id, slave_info->sensor_id_mask); /*Optional property, don't return error if absent */ ret = of_property_read_string(of_node, "qcom,vdd-cx-name", Loading Loading @@ -485,6 +505,25 @@ int msm_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl) return rc; } static uint16_t msm_sensor_id_by_mask(struct msm_sensor_ctrl_t *s_ctrl, uint16_t chipid) { uint16_t sensor_id = chipid; int16_t sensor_id_mask = s_ctrl->sensordata->slave_info->sensor_id_mask; if (!sensor_id_mask) sensor_id_mask = ~sensor_id_mask; sensor_id &= sensor_id_mask; sensor_id_mask &= -sensor_id_mask; sensor_id_mask -= 1; while (sensor_id_mask) { sensor_id_mask >>= 1; sensor_id >>= 1; } return sensor_id; } int msm_sensor_match_id(struct msm_sensor_ctrl_t *s_ctrl) { int rc = 0; Loading Loading @@ -519,7 +558,7 @@ int msm_sensor_match_id(struct msm_sensor_ctrl_t *s_ctrl) CDBG("%s: read id: 0x%x expected id 0x%x:\n", __func__, chipid, slave_info->sensor_id); if (chipid != slave_info->sensor_id) { if (msm_sensor_id_by_mask(s_ctrl, chipid) != slave_info->sensor_id) { pr_err("msm_sensor_match_id chip id doesnot match\n"); return -ENODEV; } Loading drivers/media/platform/msm/camera_v2/sensor/msm_sensor.h +8 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,14 @@ #define DEFINE_MSM_MUTEX(mutexname) \ static struct mutex mutexname = __MUTEX_INITIALIZER(mutexname) enum msm_sensor_sensor_slave_info_type { MSM_SENSOR_SLAVEADDR_DATA, MSM_SENSOR_IDREGADDR_DATA, MSM_SENSOR_SENSOR_ID_DATA, MSM_SENSOR_SENIDMASK_DATA, MSM_SENSOR_NUM_ID_INFO_DATA, }; struct msm_sensor_ctrl_t; enum msm_sensor_state_t { Loading drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c +2 −0 Original line number Diff line number Diff line Loading @@ -713,6 +713,7 @@ int32_t msm_sensor_driver_probe(void *setting, CDBG("sensor_id_reg_addr 0x%x", slave_info->sensor_id_info.sensor_id_reg_addr); CDBG("sensor_id 0x%x", slave_info->sensor_id_info.sensor_id); CDBG("sensor id mask %d", slave_info->sensor_id_info.sensor_id_mask); CDBG("size %d", slave_info->power_setting_array.size); CDBG("size down %d", slave_info->power_setting_array.size_down); Loading Loading @@ -787,6 +788,7 @@ int32_t msm_sensor_driver_probe(void *setting, camera_info->sensor_id_reg_addr = slave_info->sensor_id_info.sensor_id_reg_addr; camera_info->sensor_id = slave_info->sensor_id_info.sensor_id; camera_info->sensor_id_mask = slave_info->sensor_id_info.sensor_id_mask; /* Fill CCI master, slave address and CCI default params */ if (!s_ctrl->sensor_i2c_client) { Loading include/media/camera2.h +1 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ struct msm_camera_slave_info { uint16_t sensor_slave_addr; uint16_t sensor_id_reg_addr; uint16_t sensor_id; uint16_t sensor_id_mask; }; struct msm_cam_clk_info { Loading Loading
Documentation/devicetree/bindings/media/video/msm-cci.txt +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ Required properties: Optional properties: - qcom,slave-id : should contain i2c slave address, device id address and expected id read value ,expected id read value and device id mask - qcom,sensor-name : should contain unique sensor name to differentiate from other sensor - "s5k3l1yx" Loading
drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c +49 −10 Original line number Diff line number Diff line Loading @@ -123,7 +123,10 @@ static int32_t msm_sensor_get_dt_data(struct device_node *of_node, struct msm_camera_sensor_board_info *sensordata = NULL; uint16_t *gpio_array = NULL; uint16_t gpio_array_size = 0; uint32_t id_info[3]; uint32_t id_info[MSM_SENSOR_NUM_ID_INFO_DATA]; uint32_t count; const uint32_t *p; struct msm_camera_slave_info *slave_info; s_ctrl->sensordata = kzalloc(sizeof( struct msm_camera_sensor_board_info), Loading Loading @@ -287,21 +290,38 @@ static int32_t msm_sensor_get_dt_data(struct device_node *of_node, goto FREE_ACTUATOR_INFO; } slave_info = sensordata->slave_info; p = of_get_property(of_node, "qcom,slave-id", &count); if (!p || !count) { pr_err("%s failed %d\n", __func__, __LINE__); goto FREE_SLAVE_INFO; } if (count > MSM_SENSOR_NUM_ID_INFO_DATA) { pr_err("%s failed %d\n", __func__, __LINE__); goto FREE_SLAVE_INFO; } memset(id_info, 0, sizeof(*id_info)*MSM_SENSOR_NUM_ID_INFO_DATA); rc = of_property_read_u32_array(of_node, "qcom,slave-id", id_info, 3); id_info, count); if (rc < 0) { pr_err("%s failed %d\n", __func__, __LINE__); goto FREE_SLAVE_INFO; } sensordata->slave_info->sensor_slave_addr = id_info[0]; sensordata->slave_info->sensor_id_reg_addr = id_info[1]; sensordata->slave_info->sensor_id = id_info[2]; CDBG("%s:%d slave addr 0x%x sensor reg 0x%x id 0x%x\n", slave_info->sensor_slave_addr = id_info[MSM_SENSOR_SLAVEADDR_DATA]; slave_info->sensor_id_reg_addr = id_info[MSM_SENSOR_IDREGADDR_DATA]; slave_info->sensor_id = id_info[MSM_SENSOR_SENSOR_ID_DATA]; slave_info->sensor_id_mask = id_info[MSM_SENSOR_SENIDMASK_DATA]; CDBG("%s:%d slave addr 0x%x sensor reg 0x%x id 0x%x mask 0x%x\n", __func__, __LINE__, sensordata->slave_info->sensor_slave_addr, sensordata->slave_info->sensor_id_reg_addr, sensordata->slave_info->sensor_id); slave_info->sensor_slave_addr, slave_info->sensor_id_reg_addr, slave_info->sensor_id, slave_info->sensor_id_mask); /*Optional property, don't return error if absent */ ret = of_property_read_string(of_node, "qcom,vdd-cx-name", Loading Loading @@ -485,6 +505,25 @@ int msm_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl) return rc; } static uint16_t msm_sensor_id_by_mask(struct msm_sensor_ctrl_t *s_ctrl, uint16_t chipid) { uint16_t sensor_id = chipid; int16_t sensor_id_mask = s_ctrl->sensordata->slave_info->sensor_id_mask; if (!sensor_id_mask) sensor_id_mask = ~sensor_id_mask; sensor_id &= sensor_id_mask; sensor_id_mask &= -sensor_id_mask; sensor_id_mask -= 1; while (sensor_id_mask) { sensor_id_mask >>= 1; sensor_id >>= 1; } return sensor_id; } int msm_sensor_match_id(struct msm_sensor_ctrl_t *s_ctrl) { int rc = 0; Loading Loading @@ -519,7 +558,7 @@ int msm_sensor_match_id(struct msm_sensor_ctrl_t *s_ctrl) CDBG("%s: read id: 0x%x expected id 0x%x:\n", __func__, chipid, slave_info->sensor_id); if (chipid != slave_info->sensor_id) { if (msm_sensor_id_by_mask(s_ctrl, chipid) != slave_info->sensor_id) { pr_err("msm_sensor_match_id chip id doesnot match\n"); return -ENODEV; } Loading
drivers/media/platform/msm/camera_v2/sensor/msm_sensor.h +8 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,14 @@ #define DEFINE_MSM_MUTEX(mutexname) \ static struct mutex mutexname = __MUTEX_INITIALIZER(mutexname) enum msm_sensor_sensor_slave_info_type { MSM_SENSOR_SLAVEADDR_DATA, MSM_SENSOR_IDREGADDR_DATA, MSM_SENSOR_SENSOR_ID_DATA, MSM_SENSOR_SENIDMASK_DATA, MSM_SENSOR_NUM_ID_INFO_DATA, }; struct msm_sensor_ctrl_t; enum msm_sensor_state_t { Loading
drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c +2 −0 Original line number Diff line number Diff line Loading @@ -713,6 +713,7 @@ int32_t msm_sensor_driver_probe(void *setting, CDBG("sensor_id_reg_addr 0x%x", slave_info->sensor_id_info.sensor_id_reg_addr); CDBG("sensor_id 0x%x", slave_info->sensor_id_info.sensor_id); CDBG("sensor id mask %d", slave_info->sensor_id_info.sensor_id_mask); CDBG("size %d", slave_info->power_setting_array.size); CDBG("size down %d", slave_info->power_setting_array.size_down); Loading Loading @@ -787,6 +788,7 @@ int32_t msm_sensor_driver_probe(void *setting, camera_info->sensor_id_reg_addr = slave_info->sensor_id_info.sensor_id_reg_addr; camera_info->sensor_id = slave_info->sensor_id_info.sensor_id; camera_info->sensor_id_mask = slave_info->sensor_id_info.sensor_id_mask; /* Fill CCI master, slave address and CCI default params */ if (!s_ctrl->sensor_i2c_client) { Loading
include/media/camera2.h +1 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ struct msm_camera_slave_info { uint16_t sensor_slave_addr; uint16_t sensor_id_reg_addr; uint16_t sensor_id; uint16_t sensor_id_mask; }; struct msm_cam_clk_info { Loading