The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH 0/2] drm/bridge: lt9211: Add drive-strength-microamp DT property
@ 2026-05-12 16:46 Boerge Struempfel
  2026-05-12 16:46 ` [PATCH 1/2] dt-bindings: display/bridge: lt9211: Add drive-strength-microamp property Boerge Struempfel
  2026-05-12 16:46 ` [PATCH 2/2] drm/bridge: lt9211: Add drive-strength-microamp DT property Boerge Struempfel
  0 siblings, 2 replies; 5+ messages in thread
From: Boerge Struempfel @ 2026-05-12 16:46 UTC (permalink / raw)
  To: Marek Vasut, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley
  Cc: dri-devel, devicetree, linux-kernel, Boerge Struempfel

The LT9211 LVDS TX output driver current is currently hardcoded to
0x8 (~25 uA). Some board layouts require a different drive strength
to meet signal integrity requirements.

This series adds support for the standard 'drive-strength-microamp'
DT property, allowing board DTs to select one of sixteen discrete
current levels between 12 uA and 36 uA. The default preserves the
existing behaviour.

Boerge Struempfel (2):
  dt-bindings: display/bridge: lt9211: Add drive-strength-microamp
    property
  drm/bridge: lt9211: Add drive-strength-microamp DT property

 .../display/bridge/lontium,lt9211.yaml        |  7 +++++
 drivers/gpu/drm/bridge/lontium-lt9211.c       | 28 ++++++++++++++++++-
 2 files changed, 34 insertions(+), 1 deletion(-)

-- 
2.54.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] dt-bindings: display/bridge: lt9211: Add drive-strength-microamp property
  2026-05-12 16:46 [PATCH 0/2] drm/bridge: lt9211: Add drive-strength-microamp DT property Boerge Struempfel
@ 2026-05-12 16:46 ` Boerge Struempfel
  2026-05-12 17:05   ` Conor Dooley
  2026-05-12 16:46 ` [PATCH 2/2] drm/bridge: lt9211: Add drive-strength-microamp DT property Boerge Struempfel
  1 sibling, 1 reply; 5+ messages in thread
From: Boerge Struempfel @ 2026-05-12 16:46 UTC (permalink / raw)
  To: Marek Vasut, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley
  Cc: dri-devel, devicetree, linux-kernel, Boerge Struempfel

Add the 'drive-strength-microamp' property to allow board DTs to
configure the LT9211 LVDS TX output driver current. Sixteen discrete
levels are supported, ranging from 12 uA to 36 uA. Defaults to 25 uA.

Signed-off-by: Boerge Struempfel <bstruempfel@data-modul.com>
---
 .../devicetree/bindings/display/bridge/lontium,lt9211.yaml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/display/bridge/lontium,lt9211.yaml b/Documentation/devicetree/bindings/display/bridge/lontium,lt9211.yaml
index 9a6e9b25d14a..381b69c761b8 100644
--- a/Documentation/devicetree/bindings/display/bridge/lontium,lt9211.yaml
+++ b/Documentation/devicetree/bindings/display/bridge/lontium,lt9211.yaml
@@ -31,6 +31,13 @@ properties:
   vccio-supply:
     description: Regulator for 1.8V IO power.
 
+  drive-strength-microamp:
+    description:
+      LVDS TX output driver current. Sixteen discrete levels are supported,
+      corresponding to the following nominal values in microamps.
+    enum: [12, 14, 16, 17, 19, 20, 22, 23, 25, 27, 28, 30, 31, 33, 34, 36]
+    default: 25
+
   ports:
     $ref: /schemas/graph.yaml#/properties/ports
 
-- 
2.54.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] drm/bridge: lt9211: Add drive-strength-microamp DT property
  2026-05-12 16:46 [PATCH 0/2] drm/bridge: lt9211: Add drive-strength-microamp DT property Boerge Struempfel
  2026-05-12 16:46 ` [PATCH 1/2] dt-bindings: display/bridge: lt9211: Add drive-strength-microamp property Boerge Struempfel
@ 2026-05-12 16:46 ` Boerge Struempfel
  2026-05-12 18:29   ` Marek Vasut
  1 sibling, 1 reply; 5+ messages in thread
From: Boerge Struempfel @ 2026-05-12 16:46 UTC (permalink / raw)
  To: Marek Vasut, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley
  Cc: dri-devel, devicetree, linux-kernel, Boerge Struempfel

The LT9211 LVDS TX output driver current (RG_MLTX_HSDRV_ISEL) was
previously hardcoded to 0x8 (~25 uA), which may not be optimal for all
board layouts.

The hardware supports 16 discrete current levels starting at 12.5 uA
with a step of 1.5625 uA. These are exposed as rounded integer microamp
values in the lookup table.

Add support for the 'drive-strength-microamp' DT property. A lookup
table maps the sixteen supported microamp values (12..36 uA) to the
corresponding register field. Defaults to 25 uA when the property is
absent, preserving the existing behaviour.

Signed-off-by: Boerge Struempfel <bstruempfel@data-modul.com>
---
 drivers/gpu/drm/bridge/lontium-lt9211.c | 28 ++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/bridge/lontium-lt9211.c b/drivers/gpu/drm/bridge/lontium-lt9211.c
index 03fc8fd10f20..402c639ac515 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9211.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9211.c
@@ -40,6 +40,11 @@
 /* DSI lane count - 0 means 4 lanes ; 1, 2, 3 means 1, 2, 3 lanes. */
 #define REG_DSI_LANE_COUNT(n)			((n) & 3)
 
+/* Maps register value (index) to drive-strength-microamp DT property value */
+static const u32 lt9211_hsdrv_microamp[] = {
+	12, 14, 16, 17, 19, 20, 22, 23, 25, 27, 28, 30, 31, 33, 34, 36
+};
+
 struct lt9211 {
 	struct drm_bridge		bridge;
 	struct device			*dev;
@@ -50,6 +55,7 @@ struct lt9211 {
 	struct regulator		*vccio;
 	bool				lvds_dual_link;
 	bool				lvds_dual_link_even_odd_swap;
+	u8				lvds_hsdrv_isel;
 };
 
 static const struct regmap_range lt9211_rw_ranges[] = {
@@ -374,7 +380,8 @@ static int lt9211_configure_tx(struct lt9211 *ctx, bool jeida,
 		/* BIT(7) is LVDS dual-port */
 		{ 0x823b, 0x38 | (ctx->lvds_dual_link ? BIT(7) : 0) },
 		{ 0x823e, 0x92 },
-		{ 0x823f, 0x48 },
+		/* bits 3:0: RG_MLTX_HSDRV_ISEL, LVDS TX driver current */
+		{ 0x823f, 0x40 | ctx->lvds_hsdrv_isel },
 		{ 0x8240, 0x31 },
 		{ 0x8243, 0x80 },
 		{ 0x8244, 0x00 },
@@ -629,7 +636,9 @@ static int lt9211_parse_dt(struct lt9211 *ctx)
 	struct device *dev = ctx->dev;
 	struct drm_panel *panel;
 	int dual_link;
+	u32 microamp;
 	int ret;
+	int i;
 
 	ctx->vccio = devm_regulator_get(dev, "vccio");
 	if (IS_ERR(ctx->vccio))
@@ -666,6 +675,23 @@ static int lt9211_parse_dt(struct lt9211 *ctx)
 
 	ctx->panel_bridge = panel_bridge;
 
+	ctx->lvds_hsdrv_isel = 8; /* default: 25 uA */
+	ret = of_property_read_u32(dev->of_node, "drive-strength-microamp",
+				   &microamp);
+	if (!ret) {
+		for (i = 0; i < ARRAY_SIZE(lt9211_hsdrv_microamp); i++) {
+			if (lt9211_hsdrv_microamp[i] == microamp) {
+				ctx->lvds_hsdrv_isel = i;
+				break;
+			}
+		}
+		if (i == ARRAY_SIZE(lt9211_hsdrv_microamp)) {
+			dev_err(dev, "Invalid drive-strength-microamp value %u\n",
+				microamp);
+			return -EINVAL;
+		}
+	}
+
 	return 0;
 }
 
-- 
2.54.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] dt-bindings: display/bridge: lt9211: Add drive-strength-microamp property
  2026-05-12 16:46 ` [PATCH 1/2] dt-bindings: display/bridge: lt9211: Add drive-strength-microamp property Boerge Struempfel
@ 2026-05-12 17:05   ` Conor Dooley
  0 siblings, 0 replies; 5+ messages in thread
From: Conor Dooley @ 2026-05-12 17:05 UTC (permalink / raw)
  To: Boerge Struempfel
  Cc: Marek Vasut, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	dri-devel, devicetree, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 429 bytes --]

On Tue, May 12, 2026 at 06:46:08PM +0200, Boerge Struempfel wrote:
> Add the 'drive-strength-microamp' property to allow board DTs to
> configure the LT9211 LVDS TX output driver current. Sixteen discrete
> levels are supported, ranging from 12 uA to 36 uA. Defaults to 25 uA.
> 
> Signed-off-by: Boerge Struempfel <bstruempfel@data-modul.com>

Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] drm/bridge: lt9211: Add drive-strength-microamp DT property
  2026-05-12 16:46 ` [PATCH 2/2] drm/bridge: lt9211: Add drive-strength-microamp DT property Boerge Struempfel
@ 2026-05-12 18:29   ` Marek Vasut
  0 siblings, 0 replies; 5+ messages in thread
From: Marek Vasut @ 2026-05-12 18:29 UTC (permalink / raw)
  To: Boerge Struempfel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley
  Cc: dri-devel, devicetree, linux-kernel

On 5/12/26 6:46 PM, Boerge Struempfel wrote:

> +/* Maps register value (index) to drive-strength-microamp DT property value */
> +static const u32 lt9211_hsdrv_microamp[] = {

This can be u8 .

> +	12, 14, 16, 17, 19, 20, 22, 23, 25, 27, 28, 30, 31, 33, 34, 36
> +};
> +
>   struct lt9211 {
>   	struct drm_bridge		bridge;
>   	struct device			*dev;
> @@ -50,6 +55,7 @@ struct lt9211 {
>   	struct regulator		*vccio;
>   	bool				lvds_dual_link;
>   	bool				lvds_dual_link_even_odd_swap;
> +	u8				lvds_hsdrv_isel;
>   };
>   
>   static const struct regmap_range lt9211_rw_ranges[] = {
> @@ -374,7 +380,8 @@ static int lt9211_configure_tx(struct lt9211 *ctx, bool jeida,
>   		/* BIT(7) is LVDS dual-port */
>   		{ 0x823b, 0x38 | (ctx->lvds_dual_link ? BIT(7) : 0) },
>   		{ 0x823e, 0x92 },
> -		{ 0x823f, 0x48 },
> +		/* bits 3:0: RG_MLTX_HSDRV_ISEL, LVDS TX driver current */
> +		{ 0x823f, 0x40 | ctx->lvds_hsdrv_isel },
>   		{ 0x8240, 0x31 },
>   		{ 0x8243, 0x80 },
>   		{ 0x8244, 0x00 },
> @@ -629,7 +636,9 @@ static int lt9211_parse_dt(struct lt9211 *ctx)
>   	struct device *dev = ctx->dev;
>   	struct drm_panel *panel;
>   	int dual_link;
> +	u32 microamp;
>   	int ret;
> +	int i;
>   
>   	ctx->vccio = devm_regulator_get(dev, "vccio");
>   	if (IS_ERR(ctx->vccio))
> @@ -666,6 +675,23 @@ static int lt9211_parse_dt(struct lt9211 *ctx)
>   
>   	ctx->panel_bridge = panel_bridge;
>   
> +	ctx->lvds_hsdrv_isel = 8; /* default: 25 uA */
> +	ret = of_property_read_u32(dev->of_node, "drive-strength-microamp",
> +				   &microamp);

if ret != 0 , then what happens here ?

> +	if (!ret) {
> +		for (i = 0; i < ARRAY_SIZE(lt9211_hsdrv_microamp); i++) {
> +			if (lt9211_hsdrv_microamp[i] == microamp) {
> +				ctx->lvds_hsdrv_isel = i;
> +				break;
> +			}
> +		}
> +		if (i == ARRAY_SIZE(lt9211_hsdrv_microamp)) {
> +			dev_err(dev, "Invalid drive-strength-microamp value %u\n",
> +				microamp);
> +			return -EINVAL;
> +		}
> +	}
> +
>   	return 0;
[...]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-05-12 18:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-12 16:46 [PATCH 0/2] drm/bridge: lt9211: Add drive-strength-microamp DT property Boerge Struempfel
2026-05-12 16:46 ` [PATCH 1/2] dt-bindings: display/bridge: lt9211: Add drive-strength-microamp property Boerge Struempfel
2026-05-12 17:05   ` Conor Dooley
2026-05-12 16:46 ` [PATCH 2/2] drm/bridge: lt9211: Add drive-strength-microamp DT property Boerge Struempfel
2026-05-12 18:29   ` Marek Vasut

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox