mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
cam: support volt compatible for hm2sp03&hm2sd03
-On xpeng,rear main camera s5khm2 will have two type(SP03&SD03), we need set correct DVDD voltage for each sensor per module pin_20 value. -Use gpio_48 to read module pin_20 -1 means hm2SP03,DVDD is 1.1v. 0 means hm2SD03,DVDD is 1.05v. Change-Id: I119d9c17795867c84b21ff0e8afa6b69f0579778 Signed-off-by: wangshuo18 <[email protected]> Reviewed-on: https://gerrit.mot.com/1960645 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Shuo Wang <[email protected]> Reviewed-by: Ji Zhao <[email protected]> Reviewed-by: Bolei Shang <[email protected]> Reviewed-by: Zhuoran Xu <[email protected]> Reviewed-by: Zhenxin Xi <[email protected]> Submit-Approved: Jira Key
This commit is contained in:
parent
861c995355
commit
121a965a52
1 changed files with 62 additions and 0 deletions
|
|
@ -1230,6 +1230,11 @@ static int cam_soc_util_get_dt_regulator_info
|
|||
{
|
||||
int rc = 0, count = 0, i = 0;
|
||||
struct device_node *of_node = NULL;
|
||||
#ifdef CONFIG_CAMERA_VOLTAGE_COMPATIBLE
|
||||
int idpin_gpio = 0, idpin_value = 0;
|
||||
unsigned int second_vol_range[2];
|
||||
const char *rgltr_name = "";
|
||||
#endif
|
||||
|
||||
if (!soc_info || !soc_info->dev) {
|
||||
CAM_ERR(CAM_UTIL, "Invalid parameters");
|
||||
|
|
@ -1294,6 +1299,63 @@ static int cam_soc_util_get_dt_regulator_info
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CAMERA_VOLTAGE_COMPATIBLE
|
||||
idpin_gpio = of_get_named_gpio(of_node, "volt-compat-gpio",0);
|
||||
if (idpin_gpio < 0) {
|
||||
CAM_ERR(CAM_UTIL, "Not volt-compat-gpio found ,gpio=%d",idpin_gpio);
|
||||
} else {
|
||||
if(gpio_is_valid(idpin_gpio)) {
|
||||
if(!gpio_request(idpin_gpio,"volt-compat-gpio")) {
|
||||
gpio_direction_input(idpin_gpio);
|
||||
CAM_DBG(CAM_UTIL, "volt-compat-gpio:%d =%d ", idpin_gpio, gpio_get_value(idpin_gpio));
|
||||
|
||||
rc = of_property_read_u32_array(of_node, "volt-compat-range", second_vol_range, 2);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_UTIL, "No volt-compat-range found, rc=%d", rc);
|
||||
gpio_free(idpin_gpio);
|
||||
idpin_gpio = 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rc = of_property_read_string(of_node,"volt-compat-rgltr-name",&rgltr_name);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_UTIL, "No volt-compat-rgltr-name found, rc=%d", rc);
|
||||
gpio_free(idpin_gpio);
|
||||
idpin_gpio = 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rc = of_property_read_u32(of_node,"volt-compat-gpio-value",&idpin_value);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_UTIL, "No volt-compat-gpio-value found, rc=%d", rc);
|
||||
gpio_free(idpin_gpio);
|
||||
idpin_gpio = 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if(soc_info->index == 0 && idpin_gpio > 0) {
|
||||
for (i = 0; i < soc_info->num_rgltr; i++) {
|
||||
if((strcmp(soc_info->rgltr_name[i], rgltr_name)== 0)) {
|
||||
int val = 1;
|
||||
val = gpio_get_value(idpin_gpio);
|
||||
if(val == idpin_value) {
|
||||
soc_info->rgltr_min_volt [i]= second_vol_range[0];
|
||||
soc_info->rgltr_max_volt[i]= second_vol_range[1];
|
||||
}
|
||||
CAM_ERR(CAM_UTIL, "cam:%d, %s, voltage range: min:%d max:%d",
|
||||
soc_info->index,soc_info->rgltr_name[i], soc_info->rgltr_min_volt [i],soc_info->rgltr_max_volt[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
CAM_ERR(CAM_UTIL, "volt-compat-gpio request failed");
|
||||
}
|
||||
}else{
|
||||
CAM_ERR(CAM_UTIL, "volt-compat-gpio is not vaild");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue