[PATCH 0/5] Fix PMI8950 WLED ovp values and more

STALE207d

Revision v1 of 2 in this series.

12 messages, 3 authors, 2026-01-08 · open the first message on its own page

[PATCH 0/5] Fix PMI8950 WLED ovp values and more

From: Barnabás Czémán <hidden>
Date: 2026-01-07 13:31:14

This patch series fixes supported ovp values related to pmi8950 wled
and corrects wled related properties in xiaomi-daisy, xiaomi-land and
in xiaomi-vince.

Signed-off-by: Barnabás Czémán <redacted>
---
Barnabás Czémán (5):
      dt-bindings: backlight: qcom-wled: Document ovp values for PMI8950
      backlight: qcom-wled: Support ovp values for PMI8950
      arm64: dts: qcom: msm8953-xiaomi-vince: correct wled ovp value
      arm64: dts: qcom: msm8937-xiaomi-land: correct wled ovp value
      arm64: dts: qcom: msm8953-xiaomi-daisy: fix backlight

 .../bindings/leds/backlight/qcom-wled.yaml         | 20 +++++++++--
 arch/arm64/boot/dts/qcom/msm8937-xiaomi-land.dts   |  2 +-
 arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts  |  2 +-
 arch/arm64/boot/dts/qcom/msm8953-xiaomi-vince.dts  |  2 +-
 drivers/video/backlight/qcom-wled.c                | 41 ++++++++++++++++++++--
 5 files changed, 60 insertions(+), 7 deletions(-)
---
base-commit: f96074c6d01d8a5e9e2fccd0bba5f2ed654c1f2d
change-id: 20260107-pmi8950-wled-b014578f67a6

Best regards,
-- 
Barnabás Czémán [off-list ref]

[PATCH 3/5] arm64: dts: qcom: msm8953-xiaomi-vince: correct wled ovp value

From: Barnabás Czémán <hidden>
Date: 2026-01-07 13:31:19

Correct wled ovp value from 29600 to 29500.

Fixes: aa17e707e04a ("arm64: dts: qcom: msm8953: Add device tree for Xiaomi Redmi 5 Plus")
Signed-off-by: Barnabás Czémán <redacted>
---
 arch/arm64/boot/dts/qcom/msm8953-xiaomi-vince.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/qcom/msm8953-xiaomi-vince.dts b/arch/arm64/boot/dts/qcom/msm8953-xiaomi-vince.dts
index d46325e79917..c2a290bf493c 100644
--- a/arch/arm64/boot/dts/qcom/msm8953-xiaomi-vince.dts
+++ b/arch/arm64/boot/dts/qcom/msm8953-xiaomi-vince.dts
@@ -169,7 +169,7 @@ &pm8953_resin {
 
 &pmi8950_wled {
 	qcom,current-limit-microamp = <20000>;
-	qcom,ovp-millivolt = <29600>;
+	qcom,ovp-millivolt = <29500>;
 	qcom,num-strings = <2>;
 	qcom,external-pfet;
 	qcom,cabc;
-- 
2.52.0

[PATCH 5/5] arm64: dts: qcom: msm8953-xiaomi-daisy: fix backlight

From: Barnabás Czémán <hidden>
Date: 2026-01-07 13:31:30

Set qcom,num-strings to 3 instead of 2 for avoid stripes.

Fixes: 38d779c26395 ("arm64: dts: qcom: msm8953: Add device tree for Xiaomi Mi A2 Lite")
Signed-off-by: Barnabás Czémán <redacted>
---
 arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts b/arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts
index ddd7af616794..59f873a06e4d 100644
--- a/arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts
+++ b/arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts
@@ -157,7 +157,7 @@ &pm8953_resin {
 
 &pmi8950_wled {
 	qcom,current-limit-microamp = <20000>;
-	qcom,num-strings = <2>;
+	qcom,num-strings = <3>;
 
 	status = "okay";
 };
-- 
2.52.0

[PATCH 2/5] backlight: qcom-wled: Support ovp values for PMI8950

From: Barnabás Czémán <hidden>
Date: 2026-01-07 13:31:30

WLED4 found in PMI8950 supports different ovp values.

Fixes: 10258bf4534bf ("backlight: qcom-wled: Add PMI8950 compatible")
Signed-off-by: Barnabás Czémán <redacted>
---
 drivers/video/backlight/qcom-wled.c | 41 +++++++++++++++++++++++++++++++++++--
 1 file changed, 39 insertions(+), 2 deletions(-)
diff --git a/drivers/video/backlight/qcom-wled.c b/drivers/video/backlight/qcom-wled.c
index a63bb42c8f8b..91335aeb65a3 100644
--- a/drivers/video/backlight/qcom-wled.c
+++ b/drivers/video/backlight/qcom-wled.c
@@ -1244,6 +1244,15 @@ static const struct wled_var_cfg wled4_ovp_cfg = {
 	.size = ARRAY_SIZE(wled4_ovp_values),
 };
 
+static const u32 pmi8950_wled4_ovp_values[] = {
+	31000, 29500, 19400, 17800,
+};
+
+static const struct wled_var_cfg pmi8950_wled4_ovp_cfg = {
+	.values = pmi8950_wled4_ovp_values,
+	.size = ARRAY_SIZE(pmi8950_wled4_ovp_values),
+};
+
 static inline u32 wled5_ovp_values_fn(u32 idx)
 {
 	/*
@@ -1357,6 +1366,29 @@ static int wled_configure(struct wled *wled)
 		},
 	};
 
+	const struct wled_u32_opts pmi8950_wled4_opts[] = {
+		{
+			.name = "qcom,current-boost-limit",
+			.val_ptr = &cfg->boost_i_limit,
+			.cfg = &wled4_boost_i_limit_cfg,
+		},
+		{
+			.name = "qcom,current-limit-microamp",
+			.val_ptr = &cfg->string_i_limit,
+			.cfg = &wled4_string_i_limit_cfg,
+		},
+		{
+			.name = "qcom,ovp-millivolt",
+			.val_ptr = &cfg->ovp,
+			.cfg = &pmi8950_wled4_ovp_cfg,
+		},
+		{
+			.name = "qcom,switching-freq",
+			.val_ptr = &cfg->switch_freq,
+			.cfg = &wled3_switch_freq_cfg,
+		},
+	};
+
 	const struct wled_u32_opts wled5_opts[] = {
 		{
 			.name = "qcom,current-boost-limit",
@@ -1423,8 +1455,13 @@ static int wled_configure(struct wled *wled)
 		break;
 
 	case 4:
-		u32_opts = wled4_opts;
-		size = ARRAY_SIZE(wled4_opts);
+		if (of_device_is_compatible(dev->of_node, "qcom,pmi8950-wled")) {
+			u32_opts = pmi8950_wled4_opts;
+			size = ARRAY_SIZE(pmi8950_wled4_opts);
+		} else {
+			u32_opts = wled4_opts;
+			size = ARRAY_SIZE(wled4_opts);
+		}
 		*cfg = wled4_config_defaults;
 		wled->wled_set_brightness = wled4_set_brightness;
 		wled->wled_sync_toggle = wled3_sync_toggle;
-- 
2.52.0

[PATCH 1/5] dt-bindings: backlight: qcom-wled: Document ovp values for PMI8950

From: Barnabás Czémán <hidden>
Date: 2026-01-07 13:33:36

Document ovp values supported by wled found in PMI8950.

Signed-off-by: Barnabás Czémán <redacted>
---
 .../bindings/leds/backlight/qcom-wled.yaml           | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
index a8490781011d..306fb6642617 100644
--- a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
+++ b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
@@ -98,8 +98,6 @@ properties:
     description: |
       Over-voltage protection limit. This property is for WLED4 only.
     $ref: /schemas/types.yaml#/definitions/uint32
-    enum: [ 18100, 19600, 29600, 31100 ]
-    default: 29600
 
   qcom,num-strings:
     description: |
@@ -239,6 +237,24 @@ allOf:
           minimum: 0
           maximum: 4095
 
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: qcom,pmi8950-wled
+
+    then:
+      properties:
+        qcom,ovp-millivolt:
+          enum: [ 17800, 19400, 29500, 31000 ]
+          default: 29500
+
+    else:
+      properties:
+        qcom,ovp-millivolt:
+          enum: [ 18100, 19600, 29600, 31100 ]
+          default: 29600
+
 required:
   - compatible
   - reg
-- 
2.52.0

[PATCH 4/5] arm64: dts: qcom: msm8937-xiaomi-land: correct wled ovp value

From: Barnabás Czémán <hidden>
Date: 2026-01-07 13:33:48

Correct wled ovp value from 29600 to 29500.

Fixes: 2144f6d57d8e ("arm64: dts: qcom: Add Xiaomi Redmi 3S")
Signed-off-by: Barnabás Czémán <redacted>
---
 arch/arm64/boot/dts/qcom/msm8937-xiaomi-land.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/qcom/msm8937-xiaomi-land.dts b/arch/arm64/boot/dts/qcom/msm8937-xiaomi-land.dts
index 91837ff940f1..4f301e7c6517 100644
--- a/arch/arm64/boot/dts/qcom/msm8937-xiaomi-land.dts
+++ b/arch/arm64/boot/dts/qcom/msm8937-xiaomi-land.dts
@@ -178,7 +178,7 @@ &pmi8950_wled {
 	qcom,num-strings = <2>;
 	qcom,external-pfet;
 	qcom,current-limit-microamp = <20000>;
-	qcom,ovp-millivolt = <29600>;
+	qcom,ovp-millivolt = <29500>;
 
 	status = "okay";
 };
-- 
2.52.0

Re: [PATCH 1/5] dt-bindings: backlight: qcom-wled: Document ovp values for PMI8950

From: Konrad Dybcio <hidden>
Date: 2026-01-07 14:03:46

On 1/7/26 2:31 PM, Barnabás Czémán wrote:
quoted hunk
Document ovp values supported by wled found in PMI8950.

Signed-off-by: Barnabás Czémán <redacted>
---
 .../bindings/leds/backlight/qcom-wled.yaml           | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
index a8490781011d..306fb6642617 100644
--- a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
+++ b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
@@ -98,8 +98,6 @@ properties:
     description: |
       Over-voltage protection limit. This property is for WLED4 only.
     $ref: /schemas/types.yaml#/definitions/uint32
-    enum: [ 18100, 19600, 29600, 31100 ]
-    default: 29600
 
   qcom,num-strings:
     description: |
@@ -239,6 +237,24 @@ allOf:
           minimum: 0
           maximum: 4095
 
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: qcom,pmi8950-wled
+
+    then:
+      properties:
+        qcom,ovp-millivolt:
+          enum: [ 17800, 19400, 29500, 31000 ]
+          default: 29500
+
+    else:
+      properties:
+        qcom,ovp-millivolt:
+          enum: [ 18100, 19600, 29600, 31100 ]
+          default: 29600
Out of the supported ones:

{ .compatible = "qcom,pmi8950-wled", .data = (void *)4 },
{ .compatible = "qcom,pmi8994-wled", .data = (void *)4 },
{ .compatible = "qcom,pmi8998-wled", .data = (void *)4 },
{ .compatible = "qcom,pm660l-wled", .data = (void *)4 },

I can confirm both allowed and default values for PMI8950/98/PM660L

I could not find any data for PMI8994 (or PMI8996, the essentially
PMI8994-revbump), but it's very probable that 8950 is an oddball,
so:

Reviewed-by: Konrad Dybcio <redacted>

Konrad

Re: [PATCH 2/5] backlight: qcom-wled: Support ovp values for PMI8950

From: Konrad Dybcio <hidden>
Date: 2026-01-07 14:05:41

On 1/7/26 2:31 PM, Barnabás Czémán wrote:
WLED4 found in PMI8950 supports different ovp values.

Fixes: 10258bf4534bf ("backlight: qcom-wled: Add PMI8950 compatible")
Signed-off-by: Barnabás Czémán <redacted>
---
[...]
 	case 4:
-		u32_opts = wled4_opts;
-		size = ARRAY_SIZE(wled4_opts);
+		if (of_device_is_compatible(dev->of_node, "qcom,pmi8950-wled")) {
+			u32_opts = pmi8950_wled4_opts;
+			size = ARRAY_SIZE(pmi8950_wled4_opts);
+		} else {
+			u32_opts = wled4_opts;
+			size = ARRAY_SIZE(wled4_opts);
+		}
I really don't like how this driver went about abstracting parsing
all of that, but that's not your fault

Reviewed-by: Konrad Dybcio <redacted>

Konrad

Re: [PATCH 3/5] arm64: dts: qcom: msm8953-xiaomi-vince: correct wled ovp value

From: Konrad Dybcio <hidden>
Date: 2026-01-07 14:08:10

On 1/7/26 2:31 PM, Barnabás Czémán wrote:
Correct wled ovp value from 29600 to 29500.
This tells us what the fix is, but not why the fix needs to be made.
We can infer the former from the patch contents, but it's really
important that the next reader, perhaps in 5 years, can find out the
reason it was made.

How about:

"""
PMI8950 doesn't actually support setting an OVP threshold value of
29.6 V. The closest allowed value is 29.5 V. Set that instead.
"""

With this or similar commit message:

Reviewed-by: Konrad Dybcio <redacted>

Konrad

Re: [PATCH 1/5] dt-bindings: backlight: qcom-wled: Document ovp values for PMI8950

From: Krzysztof Kozlowski <krzk@kernel.org>
Date: 2026-01-07 14:12:02

On 07/01/2026 14:31, Barnabás Czémán wrote:
quoted hunk
Document ovp values supported by wled found in PMI8950.

Signed-off-by: Barnabás Czémán <redacted>
---
 .../bindings/leds/backlight/qcom-wled.yaml           | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
index a8490781011d..306fb6642617 100644
--- a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
+++ b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
@@ -98,8 +98,6 @@ properties:
     description: |
       Over-voltage protection limit. This property is for WLED4 only.
     $ref: /schemas/types.yaml#/definitions/uint32
-    enum: [ 18100, 19600, 29600, 31100 ]
minimum and maximum should stay here. Or alternatively enum with all the
values, but I think first options is enough.

Best regards,
Krzysztof

Re: [PATCH 5/5] arm64: dts: qcom: msm8953-xiaomi-daisy: fix backlight

From: Konrad Dybcio <hidden>
Date: 2026-01-07 14:13:14

On 1/7/26 2:31 PM, Barnabás Czémán wrote:
Set qcom,num-strings to 3 instead of 2 for avoid stripes.
"""
The backlight on this device is connected via 3 strings. Currently,
the DT claims only two are present, which results in visible stripes
on the display (since every third backlight string remains unconfigured).

Fix the number of strings to avoid that
"""

Konrad
quoted hunk
Fixes: 38d779c26395 ("arm64: dts: qcom: msm8953: Add device tree for Xiaomi Mi A2 Lite")
Signed-off-by: Barnabás Czémán <redacted>
---
 arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts b/arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts
index ddd7af616794..59f873a06e4d 100644
--- a/arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts
+++ b/arch/arm64/boot/dts/qcom/msm8953-xiaomi-daisy.dts
@@ -157,7 +157,7 @@ &pm8953_resin {
 
 &pmi8950_wled {
 	qcom,current-limit-microamp = <20000>;
-	qcom,num-strings = <2>;
+	qcom,num-strings = <3>;
 
 	status = "okay";
 };

Re: [PATCH 1/5] dt-bindings: backlight: qcom-wled: Document ovp values for PMI8950

From: <hidden>
Date: 2026-01-08 02:45:16

On 2026-01-07 15:03, Konrad Dybcio wrote:
On 1/7/26 2:31 PM, Barnabás Czémán wrote:
quoted
Document ovp values supported by wled found in PMI8950.

Signed-off-by: Barnabás Czémán <redacted>
---
 .../bindings/leds/backlight/qcom-wled.yaml           | 20 
++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
diff --git 
a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml 
b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
index a8490781011d..306fb6642617 100644
--- a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
+++ b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml
@@ -98,8 +98,6 @@ properties:
     description: |
       Over-voltage protection limit. This property is for WLED4 only.
     $ref: /schemas/types.yaml#/definitions/uint32
-    enum: [ 18100, 19600, 29600, 31100 ]
-    default: 29600

   qcom,num-strings:
     description: |
@@ -239,6 +237,24 @@ allOf:
           minimum: 0
           maximum: 4095

+  - if:
+      properties:
+        compatible:
+          contains:
+            const: qcom,pmi8950-wled
+
+    then:
+      properties:
+        qcom,ovp-millivolt:
+          enum: [ 17800, 19400, 29500, 31000 ]
+          default: 29500
+
+    else:
+      properties:
+        qcom,ovp-millivolt:
+          enum: [ 18100, 19600, 29600, 31100 ]
+          default: 29600
Out of the supported ones:

{ .compatible = "qcom,pmi8950-wled", .data = (void *)4 },
{ .compatible = "qcom,pmi8994-wled", .data = (void *)4 },
{ .compatible = "qcom,pmi8998-wled", .data = (void *)4 },
{ .compatible = "qcom,pm660l-wled", .data = (void *)4 },

I can confirm both allowed and default values for PMI8950/98/PM660L

I could not find any data for PMI8994 (or PMI8996, the essentially
PMI8994-revbump), but it's very probable that 8950 is an oddball,
This commits add support for pmi8998 and documentation is telling which 
PMIC supports which values:
https://git.codelinaro.org/clo/la/kernel/msm-4.4/-/commit/7a1b6d0276828f270180db40935bb034a3470865
TLDR:
- qcom,ovp-mv		: Over voltage protection threshold in mV. Default is
			  29500. Supported values are:
			  - 31000, 29500, 19400, 17800 for pmi8994/8952/8996. (As far as i 
know 8952=8950)
			  - 31100, 29600, 19600, 18100 for pmicobalt/pm2falcon 
(pmi8998/pm660l)
so:

Reviewed-by: Konrad Dybcio <redacted>

Konrad
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help