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:
wangshuo18 2021-05-26 15:54:32 +08:00 • committed by zhaoji1
commit 121a965a52

View file

@ -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;
}