From: Rudraksha Gupta <[email protected]>

Add camera flash support for the Samsung Galaxy Express (expressatt).

The flash IC uses a one-wire pulse-count protocol on GPIO 3, powered
by a GPIO-controlled fixed regulator on PMIC MPP 4. The regulator is
modeled as a regulator-fixed node and supplied to the flash IC via
vin-supply.

Downstream references:
Link: 
https://github.com/LineageOS/android_kernel_samsung_d2/blob/stable/cm-12.0-YNG4N/drivers/leds/Makefile#L51
Link: 
https://github.com/LineageOS/android_kernel_samsung_d2/blob/stable/cm-12.0-YNG4N/arch/arm/mach-msm/board-apexq-camera.c#L591

Reviewed-by: David Heidelberg <[email protected]>
Signed-off-by: Rudraksha Gupta <[email protected]>
---
 .../dts/qcom/qcom-msm8960-samsung-expressatt.dts   | 43 ++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/arch/arm/boot/dts/qcom/qcom-msm8960-samsung-expressatt.dts 
b/arch/arm/boot/dts/qcom/qcom-msm8960-samsung-expressatt.dts
index c4b98af6955d..ad5169a60937 100644
--- a/arch/arm/boot/dts/qcom/qcom-msm8960-samsung-expressatt.dts
+++ b/arch/arm/boot/dts/qcom/qcom-msm8960-samsung-expressatt.dts
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
 #include <dt-bindings/reset/qcom,gcc-msm8960.h>
 
 #include "qcom-msm8960.dtsi"
@@ -61,6 +62,32 @@ touchkey_enable: touchkey-enable {
                regulator-boot-on;
        };
 
+       flash_gpio_reg: regulator-flash {
+               compatible = "regulator-fixed";
+               regulator-name = "flash_led_en";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&pm8921_mpps 4 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               pinctrl-0 = <&flash_led_unlock>;
+               pinctrl-names = "default";
+       };
+
+       camera_flash: led-controller {
+               compatible = "richtek,rt8515";
+               enf-gpios = <&tlmm 3 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&flash_gpio_reg>;
+               richtek,rfs-ohms = <16000>;
+               pinctrl-0 = <&cam_flash_en>;
+               pinctrl-names = "default";
+
+               led {
+                       function = LED_FUNCTION_FLASH;
+                       color = <LED_COLOR_ID_WHITE>;
+                       flash-max-timeout-us = <250000>;
+               };
+       };
+
        i2c-gpio-touchkey {
                compatible = "i2c-gpio";
                #address-cells = <1>;
@@ -247,6 +274,13 @@ touchkey_irq_pin: touchkey-irq-state {
                drive-strength = <2>;
                bias-disable;
        };
+
+       cam_flash_en: cam-flash-en-state {
+               pins = "gpio3";
+               function = "gpio";
+               drive-strength = <16>;
+               bias-pull-down;
+       };
 };
 
 &pm8921 {
@@ -572,3 +606,12 @@ magnetometer@2e {
                /* TODO: Figure out Mount Matrix */
        };
 };
+
+&pm8921_mpps {
+       flash_led_unlock: flash-led-unlock-state {
+               pins = "mpp4";
+               function = "digital";
+               output-low;
+               power-source = <PM8921_GPIO_S4>;
+       };
+};

-- 
2.53.0



Reply via email to