From: Rudraksha Gupta <guptarud@gmail.com>
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
Assisted-by: Claude:claude-opus-4.6
Reviewed-by: David Heidelberg <david@ixit.cz>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Rudraksha Gupta <guptarud@gmail.com>
---
.../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..35514fd53e3d 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;
};
+ vreg_flash: regulator-flash {
+ compatible = "regulator-fixed";
+ regulator-name = "VREG_FLASH_3P3";
+ 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";
+ };
+
+ led-controller {
+ compatible = "richtek,rt8515";
+ enf-gpios = <&tlmm 3 GPIO_ACTIVE_HIGH>;
+ vin-supply = <&vreg_flash>;
+ 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>;
@@ -172,6 +199,13 @@ touchscreen@4a {
};
&tlmm {
+ cam_flash_en: cam-flash-en-state {
+ pins = "gpio3";
+ function = "gpio";
+ drive-strength = <16>;
+ bias-pull-down;
+ };
+
spi1_default: spi1-default-state {
mosi-pins {
pins = "gpio6";
@@ -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
On Tue, Mar 31, 2026 at 10:08:09AM -0700, Rudraksha Gupta via B4 Relay wrote:
> From: Rudraksha Gupta <guptarud@gmail.com>
>
> 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
>
> Assisted-by: Claude:claude-opus-4.6
> Reviewed-by: David Heidelberg <david@ixit.cz>
> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
> Signed-off-by: Rudraksha Gupta <guptarud@gmail.com>
> ---
> .../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..35514fd53e3d 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;
> };
>
> + vreg_flash: regulator-flash {
> + compatible = "regulator-fixed";
> + regulator-name = "VREG_FLASH_3P3";
> + 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";
> + };
> +
> + led-controller {
It looks like the nodes are not sorted. Could you please make sure that
they are sorted alphanumerically (if there is no node address)?
> + compatible = "richtek,rt8515";
> + enf-gpios = <&tlmm 3 GPIO_ACTIVE_HIGH>;
> + vin-supply = <&vreg_flash>;
> + 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>;
> @@ -172,6 +199,13 @@ touchscreen@4a {
> };
>
> &tlmm {
> + cam_flash_en: cam-flash-en-state {
> + pins = "gpio3";
> + function = "gpio";
> + drive-strength = <16>;
> + bias-pull-down;
> + };
> +
> spi1_default: spi1-default-state {
> mosi-pins {
> pins = "gpio6";
> @@ -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
>
>
--
With best wishes
Dmitry
Hello Dmitry,
>> + vreg_flash: regulator-flash {
>> + compatible = "regulator-fixed";
>> + regulator-name = "VREG_FLASH_3P3";
>> + 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";
>> + };
>> +
>> + led-controller {
> It looks like the nodes are not sorted. Could you please make sure that
> they are sorted alphanumerically (if there is no node address)?
Thanks for your feedback! Could I request this comment/change be noted
in
https://lore.kernel.org/all/20260331-expressatt_fuel_guage-v1-1-23d1d8526b69@gmail.com/
instead? As this seems to be the only comment remaining, it will be
easier for me to reorganize the DTS in the fuel gauge patch series
rather than this one, as the fuel gauge patch series depends on this
one. It also won't spam others in the mailing list who don't care about
the reorganization of the DTS.
Thanks,
Rudraksha
© 2016 - 2026 Red Hat, Inc.