Loading Documentation/devicetree/bindings/media/video/msm-eeprom.txt +2 −2 Original line number Diff line number Diff line Loading @@ -32,8 +32,6 @@ Required properties: - cam_vio-supply : should contain regulator to be used for the IO vdd. - qcom,cam-vreg-name : should specify the regulator name to be used for this eeprom. - qcom,cam-vreg-type : should specify the regulator type to be used for this eeprom. - qcom,cam-vreg-min-voltage : should specify minimum voltage level for eeprom in uV. - qcom,cam-vreg-max-voltage : should specify maximum voltage level Loading Loading @@ -61,6 +59,8 @@ Optional properties: - qcom,i2c-freq-mode : property should specify the I2C speed mode. - qcom,gpio-custom1 : should specify the custom non standard gpio1 index. - qcom,gpio-custom2 : should specify the custom non standard gpio2 index. - qcom,cam-vreg-type : should specify the regulator type to be used for this eeprom. 0 for Default VREG and 1 for custom. Optional properties -EEPROM Camera Multimodule - qcom,cmm-data-support - Camera MultiModule data capability flag. Loading drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_dt_util.c +61 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,30 @@ int msm_camera_fill_vreg_params(struct camera_vreg_t *cam_vreg, } break; case CAM_V_CUSTOM1: for (j = 0; j < num_vreg; j++) { if (!strcmp(cam_vreg[j].reg_name, "cam_v_custom1")) { pr_err("%s:%d i %d j %d cam_vcustom1\n", __func__, __LINE__, i, j); power_setting[i].seq_val = j; break; } } break; case CAM_V_CUSTOM2: for (j = 0; j < num_vreg; j++) { if (!strcmp(cam_vreg[j].reg_name, "cam_v_custom2")) { pr_err("%s:%d i %d j %d cam_vcustom2\n", __func__, __LINE__, i, j); power_setting[i].seq_val = j; break; } } break; default: pr_err("%s:%d invalid seq_val %d\n", __func__, __LINE__, power_setting[i].seq_val); Loading Loading @@ -1025,6 +1049,7 @@ int msm_camera_get_dt_vreg_data(struct device_node *of_node, uint32_t count = 0; uint32_t *vreg_array = NULL; struct camera_vreg_t *vreg = NULL; bool custom_vreg_name = false; count = of_property_count_strings(of_node, "qcom,cam-vreg-name"); CDBG("%s qcom,cam-vreg-name count %d\n", __func__, count); Loading @@ -1051,6 +1076,22 @@ int msm_camera_get_dt_vreg_data(struct device_node *of_node, } } custom_vreg_name = of_property_read_bool(of_node, "qcom,cam-custom-vreg-name"); if (custom_vreg_name) { for (i = 0; i < count; i++) { rc = of_property_read_string_index(of_node, "qcom,cam-custom-vreg-name", i, &vreg[i].custom_vreg_name); CDBG("%s sub reg_name[%d] = %s\n", __func__, i, vreg[i].custom_vreg_name); if (rc < 0) { pr_err("%s failed %d\n", __func__, __LINE__); goto ERROR1; } } } vreg_array = kzalloc(sizeof(uint32_t) * count, GFP_KERNEL); if (!vreg_array) { pr_err("%s failed %d\n", __func__, __LINE__); Loading @@ -1058,6 +1099,26 @@ int msm_camera_get_dt_vreg_data(struct device_node *of_node, goto ERROR1; } for (i = 0; i < count; i++) vreg[i].type = VREG_TYPE_DEFAULT; rc = of_property_read_u32_array(of_node, "qcom,cam-vreg-type", vreg_array, count); if (rc != -EINVAL) { if (rc < 0) { pr_err("%s failed %d\n", __func__, __LINE__); goto ERROR2; } else { for (i = 0; i < count; i++) { vreg[i].type = vreg_array[i]; CDBG("%s cam_vreg[%d].type = %d\n", __func__, i, vreg[i].type); } } } else { rc = 0; } rc = of_property_read_u32_array(of_node, "qcom,cam-vreg-min-voltage", vreg_array, count); if (rc < 0) { Loading drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_io_util.c +37 −16 Original line number Diff line number Diff line Loading @@ -138,8 +138,7 @@ int msm_cam_clk_enable(struct device *dev, struct msm_cam_clk_info *clk_info, long clk_rate; if (enable) { for (i = 0; i < num_clk; i++) { CDBG("%s enable %s\n", __func__, clk_info[i].clk_name); CDBG("%s enable %s\n", __func__, clk_info[i].clk_name); clk_ptr[i] = clk_get(dev, clk_info[i].clk_name); if (IS_ERR(clk_ptr[i])) { pr_err("%s get failed\n", clk_info[i].clk_name); Loading Loading @@ -447,7 +446,7 @@ void msm_camera_bus_scale_cfg(uint32_t bus_perf_client, case S_DEFAULT: break; default: pr_debug("%s: INVALID CASE\n", __func__); pr_err("%s: INVALID CASE\n", __func__); } } Loading Loading @@ -477,26 +476,45 @@ int msm_camera_config_single_vreg(struct device *dev, struct camera_vreg_t *cam_vreg, struct regulator **reg_ptr, int config) { int rc = 0; if (config) { const char *vreg_name = NULL; if (!dev || !cam_vreg || !reg_ptr) { pr_err("%s: get failed NULL parameter\n", __func__); goto vreg_get_fail; } CDBG("%s enable %s\n", __func__, cam_vreg->reg_name); *reg_ptr = regulator_get(dev, cam_vreg->reg_name); if (IS_ERR_OR_NULL(*reg_ptr)) { pr_err("%s: %s get failed\n", __func__, cam_vreg->reg_name); if (cam_vreg->type == VREG_TYPE_CUSTOM) { if (cam_vreg->custom_vreg_name == NULL) { pr_err("%s : can't find sub reg name", __func__); goto vreg_get_fail; } vreg_name = cam_vreg->custom_vreg_name; } else { if (cam_vreg->reg_name == NULL) { pr_err("%s : can't find reg name", __func__); goto vreg_get_fail; } vreg_name = cam_vreg->reg_name; } if (config) { CDBG("%s enable %s\n", __func__, vreg_name); *reg_ptr = regulator_get(dev, vreg_name); if (IS_ERR(*reg_ptr)) { pr_err("%s: %s get failed\n", __func__, vreg_name); *reg_ptr = NULL; goto vreg_get_fail; } if (regulator_count_voltages(*reg_ptr) > 0) { CDBG("%s: voltage min=%d, max=%d\n", __func__, cam_vreg->min_voltage, cam_vreg->max_voltage); rc = regulator_set_voltage( *reg_ptr, cam_vreg->min_voltage, cam_vreg->max_voltage); if (rc < 0) { pr_err("%s: %s set voltage failed\n", __func__, cam_vreg->reg_name); __func__, vreg_name); goto vreg_set_voltage_fail; } if (cam_vreg->op_mode >= 0) { Loading @@ -505,20 +523,21 @@ int msm_camera_config_single_vreg(struct device *dev, if (rc < 0) { pr_err( "%s: %s set optimum mode failed\n", __func__, cam_vreg->reg_name); __func__, vreg_name); goto vreg_set_opt_mode_fail; } } } rc = regulator_enable(*reg_ptr); if (rc < 0) { pr_err("%s: %s enable failed\n", __func__, cam_vreg->reg_name); pr_err("%s: %s regulator_enable failed\n", __func__, vreg_name); goto vreg_unconfig; } } else { CDBG("%s disable %s\n", __func__, vreg_name); if (*reg_ptr) { CDBG("%s disable %s\n", __func__, cam_vreg->reg_name); CDBG("%s disable %s\n", __func__, vreg_name); regulator_disable(*reg_ptr); if (regulator_count_voltages(*reg_ptr) > 0) { if (cam_vreg->op_mode >= 0) Loading @@ -528,6 +547,8 @@ int msm_camera_config_single_vreg(struct device *dev, } regulator_put(*reg_ptr); *reg_ptr = NULL; } else { pr_err("%s can't disable %s\n", __func__, vreg_name); } } return 0; Loading include/media/msm_cam_sensor.h +4 −3 Original line number Diff line number Diff line Loading @@ -148,9 +148,8 @@ enum csiphy_cfg_type_t { }; enum camera_vreg_type { REG_LDO, REG_VS, REG_GPIO, VREG_TYPE_DEFAULT, VREG_TYPE_CUSTOM, }; enum sensor_af_t { Loading Loading @@ -212,6 +211,8 @@ struct camera_vreg_t { int max_voltage; int op_mode; uint32_t delay; const char *custom_vreg_name; enum camera_vreg_type type; }; struct sensorb_cfg_data { Loading include/media/msm_camsensor_sdk.h +2 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,8 @@ enum msm_camera_vreg_name_t { CAM_VIO, CAM_VANA, CAM_VAF, CAM_V_CUSTOM1, CAM_V_CUSTOM2, CAM_VREG_MAX, }; Loading Loading
Documentation/devicetree/bindings/media/video/msm-eeprom.txt +2 −2 Original line number Diff line number Diff line Loading @@ -32,8 +32,6 @@ Required properties: - cam_vio-supply : should contain regulator to be used for the IO vdd. - qcom,cam-vreg-name : should specify the regulator name to be used for this eeprom. - qcom,cam-vreg-type : should specify the regulator type to be used for this eeprom. - qcom,cam-vreg-min-voltage : should specify minimum voltage level for eeprom in uV. - qcom,cam-vreg-max-voltage : should specify maximum voltage level Loading Loading @@ -61,6 +59,8 @@ Optional properties: - qcom,i2c-freq-mode : property should specify the I2C speed mode. - qcom,gpio-custom1 : should specify the custom non standard gpio1 index. - qcom,gpio-custom2 : should specify the custom non standard gpio2 index. - qcom,cam-vreg-type : should specify the regulator type to be used for this eeprom. 0 for Default VREG and 1 for custom. Optional properties -EEPROM Camera Multimodule - qcom,cmm-data-support - Camera MultiModule data capability flag. Loading
drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_dt_util.c +61 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,30 @@ int msm_camera_fill_vreg_params(struct camera_vreg_t *cam_vreg, } break; case CAM_V_CUSTOM1: for (j = 0; j < num_vreg; j++) { if (!strcmp(cam_vreg[j].reg_name, "cam_v_custom1")) { pr_err("%s:%d i %d j %d cam_vcustom1\n", __func__, __LINE__, i, j); power_setting[i].seq_val = j; break; } } break; case CAM_V_CUSTOM2: for (j = 0; j < num_vreg; j++) { if (!strcmp(cam_vreg[j].reg_name, "cam_v_custom2")) { pr_err("%s:%d i %d j %d cam_vcustom2\n", __func__, __LINE__, i, j); power_setting[i].seq_val = j; break; } } break; default: pr_err("%s:%d invalid seq_val %d\n", __func__, __LINE__, power_setting[i].seq_val); Loading Loading @@ -1025,6 +1049,7 @@ int msm_camera_get_dt_vreg_data(struct device_node *of_node, uint32_t count = 0; uint32_t *vreg_array = NULL; struct camera_vreg_t *vreg = NULL; bool custom_vreg_name = false; count = of_property_count_strings(of_node, "qcom,cam-vreg-name"); CDBG("%s qcom,cam-vreg-name count %d\n", __func__, count); Loading @@ -1051,6 +1076,22 @@ int msm_camera_get_dt_vreg_data(struct device_node *of_node, } } custom_vreg_name = of_property_read_bool(of_node, "qcom,cam-custom-vreg-name"); if (custom_vreg_name) { for (i = 0; i < count; i++) { rc = of_property_read_string_index(of_node, "qcom,cam-custom-vreg-name", i, &vreg[i].custom_vreg_name); CDBG("%s sub reg_name[%d] = %s\n", __func__, i, vreg[i].custom_vreg_name); if (rc < 0) { pr_err("%s failed %d\n", __func__, __LINE__); goto ERROR1; } } } vreg_array = kzalloc(sizeof(uint32_t) * count, GFP_KERNEL); if (!vreg_array) { pr_err("%s failed %d\n", __func__, __LINE__); Loading @@ -1058,6 +1099,26 @@ int msm_camera_get_dt_vreg_data(struct device_node *of_node, goto ERROR1; } for (i = 0; i < count; i++) vreg[i].type = VREG_TYPE_DEFAULT; rc = of_property_read_u32_array(of_node, "qcom,cam-vreg-type", vreg_array, count); if (rc != -EINVAL) { if (rc < 0) { pr_err("%s failed %d\n", __func__, __LINE__); goto ERROR2; } else { for (i = 0; i < count; i++) { vreg[i].type = vreg_array[i]; CDBG("%s cam_vreg[%d].type = %d\n", __func__, i, vreg[i].type); } } } else { rc = 0; } rc = of_property_read_u32_array(of_node, "qcom,cam-vreg-min-voltage", vreg_array, count); if (rc < 0) { Loading
drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_io_util.c +37 −16 Original line number Diff line number Diff line Loading @@ -138,8 +138,7 @@ int msm_cam_clk_enable(struct device *dev, struct msm_cam_clk_info *clk_info, long clk_rate; if (enable) { for (i = 0; i < num_clk; i++) { CDBG("%s enable %s\n", __func__, clk_info[i].clk_name); CDBG("%s enable %s\n", __func__, clk_info[i].clk_name); clk_ptr[i] = clk_get(dev, clk_info[i].clk_name); if (IS_ERR(clk_ptr[i])) { pr_err("%s get failed\n", clk_info[i].clk_name); Loading Loading @@ -447,7 +446,7 @@ void msm_camera_bus_scale_cfg(uint32_t bus_perf_client, case S_DEFAULT: break; default: pr_debug("%s: INVALID CASE\n", __func__); pr_err("%s: INVALID CASE\n", __func__); } } Loading Loading @@ -477,26 +476,45 @@ int msm_camera_config_single_vreg(struct device *dev, struct camera_vreg_t *cam_vreg, struct regulator **reg_ptr, int config) { int rc = 0; if (config) { const char *vreg_name = NULL; if (!dev || !cam_vreg || !reg_ptr) { pr_err("%s: get failed NULL parameter\n", __func__); goto vreg_get_fail; } CDBG("%s enable %s\n", __func__, cam_vreg->reg_name); *reg_ptr = regulator_get(dev, cam_vreg->reg_name); if (IS_ERR_OR_NULL(*reg_ptr)) { pr_err("%s: %s get failed\n", __func__, cam_vreg->reg_name); if (cam_vreg->type == VREG_TYPE_CUSTOM) { if (cam_vreg->custom_vreg_name == NULL) { pr_err("%s : can't find sub reg name", __func__); goto vreg_get_fail; } vreg_name = cam_vreg->custom_vreg_name; } else { if (cam_vreg->reg_name == NULL) { pr_err("%s : can't find reg name", __func__); goto vreg_get_fail; } vreg_name = cam_vreg->reg_name; } if (config) { CDBG("%s enable %s\n", __func__, vreg_name); *reg_ptr = regulator_get(dev, vreg_name); if (IS_ERR(*reg_ptr)) { pr_err("%s: %s get failed\n", __func__, vreg_name); *reg_ptr = NULL; goto vreg_get_fail; } if (regulator_count_voltages(*reg_ptr) > 0) { CDBG("%s: voltage min=%d, max=%d\n", __func__, cam_vreg->min_voltage, cam_vreg->max_voltage); rc = regulator_set_voltage( *reg_ptr, cam_vreg->min_voltage, cam_vreg->max_voltage); if (rc < 0) { pr_err("%s: %s set voltage failed\n", __func__, cam_vreg->reg_name); __func__, vreg_name); goto vreg_set_voltage_fail; } if (cam_vreg->op_mode >= 0) { Loading @@ -505,20 +523,21 @@ int msm_camera_config_single_vreg(struct device *dev, if (rc < 0) { pr_err( "%s: %s set optimum mode failed\n", __func__, cam_vreg->reg_name); __func__, vreg_name); goto vreg_set_opt_mode_fail; } } } rc = regulator_enable(*reg_ptr); if (rc < 0) { pr_err("%s: %s enable failed\n", __func__, cam_vreg->reg_name); pr_err("%s: %s regulator_enable failed\n", __func__, vreg_name); goto vreg_unconfig; } } else { CDBG("%s disable %s\n", __func__, vreg_name); if (*reg_ptr) { CDBG("%s disable %s\n", __func__, cam_vreg->reg_name); CDBG("%s disable %s\n", __func__, vreg_name); regulator_disable(*reg_ptr); if (regulator_count_voltages(*reg_ptr) > 0) { if (cam_vreg->op_mode >= 0) Loading @@ -528,6 +547,8 @@ int msm_camera_config_single_vreg(struct device *dev, } regulator_put(*reg_ptr); *reg_ptr = NULL; } else { pr_err("%s can't disable %s\n", __func__, vreg_name); } } return 0; Loading
include/media/msm_cam_sensor.h +4 −3 Original line number Diff line number Diff line Loading @@ -148,9 +148,8 @@ enum csiphy_cfg_type_t { }; enum camera_vreg_type { REG_LDO, REG_VS, REG_GPIO, VREG_TYPE_DEFAULT, VREG_TYPE_CUSTOM, }; enum sensor_af_t { Loading Loading @@ -212,6 +211,8 @@ struct camera_vreg_t { int max_voltage; int op_mode; uint32_t delay; const char *custom_vreg_name; enum camera_vreg_type type; }; struct sensorb_cfg_data { Loading
include/media/msm_camsensor_sdk.h +2 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,8 @@ enum msm_camera_vreg_name_t { CAM_VIO, CAM_VANA, CAM_VAF, CAM_V_CUSTOM1, CAM_V_CUSTOM2, CAM_VREG_MAX, }; Loading