Merge "msm: camera: Correct check for rdi res_id" into dev/msm-4.14-camx
diff --git a/Documentation/devicetree/bindings/media/video/msm-cam-cci.txt b/Documentation/devicetree/bindings/media/video/msm-cam-cci.txt
index 5e31fb1..59651a3 100644
--- a/Documentation/devicetree/bindings/media/video/msm-cam-cci.txt
+++ b/Documentation/devicetree/bindings/media/video/msm-cam-cci.txt
@@ -323,6 +323,11 @@
Value type: <phandle>
Definition: should contain regulator from which IO voltage is supplied
+- cam_bob-supply
+ Usage: optional
+ Value type: <phandle>
+ Definition: should contain regulator from which BoB voltage is supplied
+
- regulator-names
Usage: required
Value type: <string>
@@ -387,6 +392,11 @@
Value type: <u32>
Definition: should contain regulator from which AF voltage is supplied
+- pwm-switch
+ Usage: optional
+ Value type: <boolean>
+ Definition: This property is required for regulator to switch into PWM mode.
+
- gpios
Usage: required
Value type: <phandle>
@@ -764,14 +774,18 @@
actuator-src = <&actuator0>;
ois-src = <&ois0>;
eeprom-src = <&eeprom0>;
- cam_vdig-supply = <&pm845_s3>;
- cam_vio-supply = <&pm845_lvs1>;
- cam_vana-supply = <&pmi8998_bob>;
- regulator-names = "cam_vdig", "cam_vio", "cam_vana";
+ cam_vdig-supply = <&pm8009_l2>;
+ cam_vio-supply = <&pm8009l_l1>;
+ cam_vana-supply = <&pm8009l_l5>;
+ cam_bob-supply = <&pm8150l_bob>;
+ cam_clk-supply = <&tital_top_gdsc>;
+ regulator-names = "cam_vio", "cam_vana", "cam_vdig",
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 3312000 1352000>;
- rgltr-max-voltage = <0 3312000 1352000>;
- rgltr-load-current = <0 80000 105000>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2800000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2800000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk0_active
diff --git a/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-cdp.dtsi b/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-cdp.dtsi
index 8c43df1..2fcd47b 100644
--- a/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-cdp.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-cdp.dtsi
@@ -152,8 +152,8 @@
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
"cam_clk", "cam_vaf";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2850000 1200000 0 2856000>;
- rgltr-max-voltage = <0 2850000 1200000 0 2856000>;
+ rgltr-min-voltage = <0 2856000 1200000 0 2856000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 2856000>;
rgltr-load-current = <0 80000 1200000 0 0>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
@@ -190,8 +190,8 @@
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
"cam_clk", "cam_vaf";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2850000 1200000 0 2856000>;
- rgltr-max-voltage = <0 2850000 1200000 0 2856000>;
+ rgltr-min-voltage = <0 2856000 1200000 0 2856000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 2856000>;
rgltr-load-current = <0 80000 1200000 0 0>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
@@ -229,15 +229,17 @@
ois-src = <&ois_rear>;
eeprom-src = <&eeprom_rear>;
cam_vio-supply = <&pm8150l_l1>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vana-supply = <&pm8009_l5>;
cam_vdig-supply = <&pm8009_l2>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2800000 1200000 0>;
- rgltr-max-voltage = <0 2800000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2800000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2800000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk0_active
@@ -271,16 +273,18 @@
actuator-src = <&actuator_rear_aux>;
led-flash-src = <&led_flash_rear_aux>;
eeprom-src = <&eeprom_rear_aux>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vdig-supply = <&pm8009_l2>;
cam_vio-supply = <&pm8150l_l1>;
cam_vana-supply = <&pm8009_l6>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2856000 1200000 0>;
- rgltr-max-voltage = <0 2856000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2856000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk1_active
@@ -314,15 +318,17 @@
eeprom-src = <&eeprom_front>;
actuator-src = <&actuator_front>;
cam_vio-supply = <&pm8150l_l1>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vana-supply = <&pm8009_l6>;
cam_vdig-supply = <&pm8009_l2>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2856000 1200000 0>;
- rgltr-max-voltage = <0 2856000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2856000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk2_active
@@ -355,15 +361,17 @@
sensor-position-yaw = <0>;
led-flash-src = <&led_flash_iris>;
cam_vio-supply = <&pm8150l_l1>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vana-supply = <&pm8009_l5>;
cam_vdig-supply = <&pm8009_l2>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2800000 1200000 0>;
- rgltr-max-voltage = <0 2800000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2800000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2800000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk3_active
diff --git a/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-mtp.dtsi b/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-mtp.dtsi
index 8c43df1..2fcd47b 100644
--- a/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-mtp.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-mtp.dtsi
@@ -152,8 +152,8 @@
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
"cam_clk", "cam_vaf";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2850000 1200000 0 2856000>;
- rgltr-max-voltage = <0 2850000 1200000 0 2856000>;
+ rgltr-min-voltage = <0 2856000 1200000 0 2856000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 2856000>;
rgltr-load-current = <0 80000 1200000 0 0>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
@@ -190,8 +190,8 @@
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
"cam_clk", "cam_vaf";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2850000 1200000 0 2856000>;
- rgltr-max-voltage = <0 2850000 1200000 0 2856000>;
+ rgltr-min-voltage = <0 2856000 1200000 0 2856000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 2856000>;
rgltr-load-current = <0 80000 1200000 0 0>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
@@ -229,15 +229,17 @@
ois-src = <&ois_rear>;
eeprom-src = <&eeprom_rear>;
cam_vio-supply = <&pm8150l_l1>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vana-supply = <&pm8009_l5>;
cam_vdig-supply = <&pm8009_l2>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2800000 1200000 0>;
- rgltr-max-voltage = <0 2800000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2800000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2800000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk0_active
@@ -271,16 +273,18 @@
actuator-src = <&actuator_rear_aux>;
led-flash-src = <&led_flash_rear_aux>;
eeprom-src = <&eeprom_rear_aux>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vdig-supply = <&pm8009_l2>;
cam_vio-supply = <&pm8150l_l1>;
cam_vana-supply = <&pm8009_l6>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2856000 1200000 0>;
- rgltr-max-voltage = <0 2856000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2856000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk1_active
@@ -314,15 +318,17 @@
eeprom-src = <&eeprom_front>;
actuator-src = <&actuator_front>;
cam_vio-supply = <&pm8150l_l1>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vana-supply = <&pm8009_l6>;
cam_vdig-supply = <&pm8009_l2>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2856000 1200000 0>;
- rgltr-max-voltage = <0 2856000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2856000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk2_active
@@ -355,15 +361,17 @@
sensor-position-yaw = <0>;
led-flash-src = <&led_flash_iris>;
cam_vio-supply = <&pm8150l_l1>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vana-supply = <&pm8009_l5>;
cam_vdig-supply = <&pm8009_l2>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2800000 1200000 0>;
- rgltr-max-voltage = <0 2800000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2800000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2800000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk3_active
diff --git a/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-qrd.dtsi b/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-qrd.dtsi
index 1a13e57..a6dc553 100644
--- a/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-qrd.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8150-camera-sensor-qrd.dtsi
@@ -236,15 +236,17 @@
ois-src = <&ois_rear>;
eeprom-src = <&eeprom_rear>;
cam_vio-supply = <&pm8150l_l1>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vana-supply = <&pm8009_l5>;
cam_vdig-supply = <&pm8009_l2>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2800000 1200000 0>;
- rgltr-max-voltage = <0 2800000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2800000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2800000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk0_active
@@ -279,16 +281,18 @@
actuator-src = <&actuator_rear_aux>;
led-flash-src = <&led_flash_rear_aux>;
eeprom-src = <&eeprom_rear_aux>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vdig-supply = <&pm8009_l2>;
cam_vio-supply = <&pm8150l_l1>;
cam_vana-supply = <&pm8009_l6>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2856000 1200000 0>;
- rgltr-max-voltage = <0 2856000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2856000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk1_active
@@ -323,15 +327,17 @@
eeprom-src = <&eeprom_front>;
actuator-src = <&actuator_front>;
cam_vio-supply = <&pm8150l_l1>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vana-supply = <&pm8009_l6>;
cam_vdig-supply = <&pm8009_l2>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2856000 1200000 0>;
- rgltr-max-voltage = <0 2856000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2856000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2856000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk2_active
@@ -365,15 +371,17 @@
sensor-position-yaw = <0>;
led-flash-src = <&led_flash_iris>;
cam_vio-supply = <&pm8150l_l1>;
+ cam_bob-supply = <&pm8150l_bob>;
cam_vana-supply = <&pm8009_l5>;
cam_vdig-supply = <&pm8009_l2>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
- "cam_clk";
+ "cam_clk", "cam_bob";
rgltr-cntrl-support;
- rgltr-min-voltage = <0 2800000 1200000 0>;
- rgltr-max-voltage = <0 2800000 1200000 0>;
- rgltr-load-current = <0 80000 1200000 0>;
+ pwm-switch;
+ rgltr-min-voltage = <0 2800000 1200000 0 3008000>;
+ rgltr-max-voltage = <0 2800000 1200000 0 4000000>;
+ rgltr-load-current = <0 80000 1200000 0 2000000>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk3_active
diff --git a/arch/arm64/boot/dts/qcom/sm8150-camera.dtsi b/arch/arm64/boot/dts/qcom/sm8150-camera.dtsi
index 039944b..b4f6791 100644
--- a/arch/arm64/boot/dts/qcom/sm8150-camera.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8150-camera.dtsi
@@ -999,6 +999,9 @@
cam_ipe0: qcom,ipe0 {
cell-index = <0>;
compatible = "qcom,cam-ipe";
+ reg = <0xac87000 0x3000>;
+ reg-names = "ipe0_top";
+ reg-cam-base = <0x87000>;
regulator-names = "ipe0-vdd";
ipe0-vdd-supply = <&ipe_0_gdsc>;
clock-names =
@@ -1028,6 +1031,9 @@
cam_ipe1: qcom,ipe1 {
cell-index = <1>;
compatible = "qcom,cam-ipe";
+ reg = <0xac91000 0x3000>;
+ reg-names = "ipe1_top";
+ reg-cam-base = <0x91000>;
regulator-names = "ipe1-vdd";
ipe1-vdd-supply = <&ipe_1_gdsc>;
clock-names =
@@ -1057,6 +1063,9 @@
cam_bps: qcom,bps {
cell-index = <0>;
compatible = "qcom,cam-bps";
+ reg = <0xac6f000 0x3000>;
+ reg-names = "bps_top";
+ reg-cam-base = <0x6f000>;
regulator-names = "bps-vdd";
bps-vdd-supply = <&bps_gdsc>;
clock-names =
diff --git a/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c b/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c
index d222983..cadd627 100644
--- a/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c
+++ b/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c
@@ -940,9 +940,13 @@ static int cam_ife_mgr_acquire_cid_res(
hw_intf->hw_idx);
if (in_port->usage_type && acquired_cnt == 1 &&
- ((csid_path == CAM_IFE_PIX_PATH_RES_IPP) ||
- (csid_path == CAM_IFE_PIX_PATH_RES_PPP)))
- /* Continue to acquire Right */
+ csid_path == CAM_IFE_PIX_PATH_RES_IPP)
+ /*
+ * Continue to acquire Right for IPP.
+ * Dual IFE for RDI and PPP is not currently
+ * supported.
+ */
+
continue;
if (acquired_cnt)
@@ -990,8 +994,7 @@ static int cam_ife_mgr_acquire_cid_res(
/*
* Acquire Right if not already acquired.
- * Dual IFE for RDI is not currently supported.
- * Only one IFE should be used for 2PD data.
+ * Dual IFE for RDI and PPP is not currently supported.
*/
if (cid_res_temp->is_dual_vfe && csid_path
== CAM_IFE_PIX_PATH_RES_IPP && acquired_cnt == 1) {
@@ -1077,7 +1080,7 @@ static int cam_ife_hw_mgr_acquire_res_ife_csid_pxl(
csid_res->res_id = path_res_id;
- if (in_port->usage_type)
+ if (in_port->usage_type && is_ipp)
csid_res->is_dual_vfe = 1;
else {
csid_res->is_dual_vfe = 0;
diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_core.c b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_core.c
index 6fe051a..223aba4 100644
--- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_core.c
+++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_core.c
@@ -17,7 +17,6 @@
#include "cam_soc_util.h"
#include "cam_trace.h"
-
static void cam_sensor_update_req_mgr(
struct cam_sensor_ctrl_t *s_ctrl,
struct cam_packet *csl_packet)
@@ -962,6 +961,16 @@ int cam_sensor_power_up(struct cam_sensor_ctrl_t *s_ctrl)
return -EINVAL;
}
+ if (s_ctrl->bob_pwm_switch) {
+ rc = cam_sensor_bob_pwm_mode_switch(soc_info,
+ s_ctrl->bob_reg_index, true);
+ if (rc) {
+ CAM_WARN(CAM_SENSOR,
+ "BoB PWM setup failed rc: %d", rc);
+ rc = 0;
+ }
+ }
+
rc = cam_sensor_core_power_up(power_info, soc_info);
if (rc < 0) {
CAM_ERR(CAM_SENSOR, "power up the core is failed:%d", rc);
@@ -999,6 +1008,16 @@ int cam_sensor_power_down(struct cam_sensor_ctrl_t *s_ctrl)
return rc;
}
+ if (s_ctrl->bob_pwm_switch) {
+ rc = cam_sensor_bob_pwm_mode_switch(soc_info,
+ s_ctrl->bob_reg_index, false);
+ if (rc) {
+ CAM_WARN(CAM_SENSOR,
+ "BoB PWM setup failed rc: %d", rc);
+ rc = 0;
+ }
+ }
+
camera_io_release(&(s_ctrl->io_master_info));
return rc;
diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_dev.h b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_dev.h
index 21cbbe9..8339d9b 100644
--- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_dev.h
+++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_dev.h
@@ -92,6 +92,8 @@ struct intf_params {
* @device_name: Sensor device structure
* @streamon_count: Count to hold the number of times stream on called
* @streamoff_count: Count to hold the number of times stream off called
+ * @bob_reg_index: Hold to BoB regulator index
+ * @bob_pwm_switch: Boolean flag to switch into PWM mode for BoB regulator
*/
struct cam_sensor_ctrl_t {
struct platform_device *pdev;
@@ -114,6 +116,8 @@ struct cam_sensor_ctrl_t {
char device_name[20];
uint32_t streamon_count;
uint32_t streamoff_count;
+ int bob_reg_index;
+ bool bob_pwm_switch;
};
#endif /* _CAM_SENSOR_DEV_H_ */
diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_soc.c b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_soc.c
index 5e0fa02..6d7d07c 100644
--- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_soc.c
+++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_soc.c
@@ -104,6 +104,7 @@ int32_t cam_sensor_get_sub_module_index(struct device_node *of_node,
static int32_t cam_sensor_driver_get_dt_data(struct cam_sensor_ctrl_t *s_ctrl)
{
int32_t rc = 0;
+ int i = 0;
struct cam_sensor_board_info *sensordata = NULL;
struct device_node *of_node = s_ctrl->of_node;
struct cam_hw_soc_info *soc_info = &s_ctrl->soc_info;
@@ -136,6 +137,33 @@ static int32_t cam_sensor_driver_get_dt_data(struct cam_sensor_ctrl_t *s_ctrl)
goto FREE_SENSOR_DATA;
}
+ /* Store the index of BoB regulator if it is available */
+ for (i = 0; i < soc_info->num_rgltr; i++) {
+ if (!strcmp(soc_info->rgltr_name[i],
+ "cam_bob")) {
+ CAM_DBG(CAM_SENSOR,
+ "i: %d cam_bob", i);
+ s_ctrl->bob_reg_index = i;
+ soc_info->rgltr[i] = devm_regulator_get(soc_info->dev,
+ soc_info->rgltr_name[i]);
+ if (IS_ERR_OR_NULL(soc_info->rgltr[i])) {
+ CAM_WARN(CAM_SENSOR,
+ "Regulator: %s get failed",
+ soc_info->rgltr_name[i]);
+ soc_info->rgltr[i] = NULL;
+ } else {
+ if (!of_property_read_bool(of_node,
+ "pwm-switch")) {
+ CAM_DBG(CAM_SENSOR,
+ "No BoB PWM switch param defined");
+ s_ctrl->bob_pwm_switch = false;
+ } else {
+ s_ctrl->bob_pwm_switch = true;
+ }
+ }
+ }
+ }
+
/* Read subdev info */
rc = cam_sensor_get_sub_module_index(of_node, sensordata);
if (rc < 0) {
diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.c b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.c
index 6398256..e9ca7d4 100644
--- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.c
+++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.c
@@ -1219,6 +1219,24 @@ int msm_camera_pinctrl_init(
return 0;
}
+int cam_sensor_bob_pwm_mode_switch(struct cam_hw_soc_info *soc_info,
+ int bob_reg_idx, bool flag)
+{
+ int rc = 0;
+ uint32_t op_current =
+ (flag == true) ? soc_info->rgltr_op_mode[bob_reg_idx] : 0;
+
+ if (soc_info->rgltr[bob_reg_idx] != NULL) {
+ rc = regulator_set_load(soc_info->rgltr[bob_reg_idx],
+ op_current);
+ if (rc)
+ CAM_WARN(CAM_SENSOR,
+ "BoB PWM SetLoad failed rc: %d", rc);
+ }
+
+ return rc;
+}
+
int msm_cam_sensor_handle_reg_gpio(int seq_type,
struct msm_camera_gpio_num_info *gpio_num_info, int val)
{
diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.h b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.h
index c9ccc5c..6c0287e 100644
--- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.h
+++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.h
@@ -58,4 +58,7 @@ int msm_camera_fill_vreg_params(struct cam_hw_soc_info *soc_info,
int32_t cam_sensor_update_power_settings(void *cmd_buf,
int cmd_length, struct cam_sensor_power_ctrl_t *power_info);
+
+int cam_sensor_bob_pwm_mode_switch(struct cam_hw_soc_info *soc_info,
+ int bob_reg_idx, bool flag);
#endif /* _CAM_SENSOR_UTIL_H_ */