Skip to contentSkip to conversation

Add Lontium LT7911EXC eDP to MIPI DSI bridge

PATCH Superseded [email protected] 2 participants 7 messages May 8 – May 11

Subsystems (4)

v6 of 17 Superseded Latest is v17 →

lore
Share & tools
lore
#0 lore raw

v6 cover Add Lontium LT7911EXC eDP to MIPI DSI bridge

From: Sunyun Yang <[email protected]>

The LT7911EXC is an I2C-controlled bridge that Receiver eDP1.4 and output signal/dual port mipi dsi. This series introduces:

- A device tree binding YAML file describing the hardware
- A new DRM bridge driver implementing the basic functionality

---
Change in v6:
- dt-binding:
- drm/bridge:
1. use #define FW_FILE "Lontium/lt7911exc_fw.bin" to match linux-firmware
- Link to v5: https://lore.kernel.org/lkml/[email protected]/

Change in v5:
- dt-binding:
- drm/bridge:
1. Change "mipi" to "mipi dsi" in the commit message. [Dmitry]
2. Change "eDP/MIPI" to "eDP/MIPI DSI" in Kconfig.
- Link to v4: https://lore.kernel.org/lkml/[email protected]/

Change in v4:
- dt-binding:
1. Fix the missing spaces on the "subject". [Krzysztof]
2. Fix the error descriptions for port@0 and port@1.
- drm/bridge:
- Link to v3: https://lore.kernel.org/lkml/[email protected]/

Change in v3:
- dt-binding:
- drm/bridge:
1. already submit lt7911exc_fw.bin to linux-firmware. [Dmitry]
2. remove lt7911exc_remove function.
3. drop the "lontium, " in lt7911exc_i2c_table.
- Link to v2: https://lore.kernel.org/lkml/[email protected]/

Change in v2:
- dt-binding:
1. reset pins use active low. [Dmitry]
- drm/bridge:
1. use atomic_* callbacks. [Quentin]
2. fix the incorrect formatting and spaces.
3. add the required header files. [Dmitry]
4. remove "enabled" flag.
5. remove *fw from the lt7911exc struct.
6. .max_register and .range_max use actual range.
7. regulator use bulk interface.
8. use dev_err_probe, devm_mutex_init and devm_drm_bridge_add.
9. Replace GPL v2 with GPL.
- Link to v1: https://lore.kernel.org/lkml/[email protected]/
---
Sunyun Yang (2):
dt-bindings: bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge drm/bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

 .../display/bridge/lontium,lt7911exc.yaml     |  89 ++++
 drivers/gpu/drm/bridge/Kconfig                |  13 +
 drivers/gpu/drm/bridge/Makefile               |   1 +
 drivers/gpu/drm/bridge/lontium-lt7911exc.c    | 493 ++++++++++++++++++
 4 files changed, 596 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/bridge/lontium,lt7911exc.yaml
 create mode 100644 drivers/gpu/drm/bridge/lontium-lt7911exc.c
Signature · 1 line
2.34.1
#1 lore raw

PATCH v6 1/2 dt-bindings: bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

From: Sunyun Yang <[email protected]>

The LT7911EXC is an I2C-controlled bridge that Receiver eDP1.4 and output signal/dual port mipi dsi.

---
 .../display/bridge/lontium,lt7911exc.yaml     | 89 +++++++++++++++++++
 1 file changed, 89 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/bridge/lontium,lt7911exc.yaml
Documentation/devicetree/bindings/display/bridge/lontium,lt7911exc.yaml new file +89 -0
new file mode 100644
index 000000000000..3290b10ce883
@@ -0,0 +1,89 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/bridge/lontium,lt7911exc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Lontium LT7911EXC eDP to MIPI DSI Bridge
+
+maintainers:
+  - Sunyun Yang <[email protected]>
+
+properties:
+  compatible:
+    enum:
+      - lontium,lt7911exc
+
+  reg:
+    maxItems: 1
+
+  reset-gpios:
+    maxItems: 1
+    description: GPIO connected to RST_ pin.
+
+  vdd-supply:
+    description: Regulator for 1.2V MIPI phy power.
+
+  vcc-supply:
+    description: Regulator for 3.3V IO power.
+
+  ports:
+    $ref: /schemas/graph.yaml#/properties/ports
+
+    properties:
+      port@0:
+        $ref: /schemas/graph.yaml#/properties/port
+        description: Video port for eDP input.
+
+      port@1:
+        $ref: /schemas/graph.yaml#/properties/port
+        description: Video port for MIPI DSI output.
+
+    required:
+      - port@0
+      - port@1
+
+required:
+  - compatible
+  - reg
+  - reset-gpios
+  - vdd-supply
+  - vcc-supply
+  - ports
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        mipi-bridge@41 {
+            compatible = "lontium,lt7911exc";
+            reg = <0x41>;
+            reset-gpios = <&gpy8 8 GPIO_ACTIVE_LOW>;
+            vdd-supply = <&lt7911exc_1v2>;
+            vcc-supply = <&lt7911exc_3v3>;
+
+            ports {
+                #address-cells = <1>;
+                #size-cells = <0>;
+
+                port@0 {
+                    reg = <0>;
+                    bridge_in: endpoint {
+                        remote-endpoint = <&edp_out>;
+                    };
+                };
+
+                port@1 {
+                    reg = <1>;
+                    bridge_out: endpoint {
+                        remote-endpoint = <&panel_in>;
+                    };
+                };
+            };
+        };
+    };
Signature · 1 line
2.34.1
#2 lore raw

Re: [PATCH v6 1/2] dt-bindings: bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider: - [Medium] The binding lacks support for the dual-port MIPI DSI output claimed in the commit message.…

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] The binding lacks support for the dual-port MIPI DSI output claimed in the commit message.
- [Low] Typographical errors in the commit message alter the meaning and reduce clarity. --

commit d7e3500f4741bb0ae26a44a80c52b86455bf1c05
Author: Sunyun Yang <[email protected]>

dt-bindings: bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

This commit adds the device tree binding schema for the Lontium LT7911EXC. This device is an I2C-controlled bridge that converts eDP 1.4 input to MIPI DSI output.

Quoted 2 lines

The LT7911EXC is an I2C-controlled bridge that Receiver eDP1.4 and output signal/dual port mipi dsi.

This isn't a bug, but there appear to be a few typos in the commit message description. The word Receiver reads like it should be receives, and the word signal looks like a typo for single.

Quoted 5 lines
Documentation/devicetree/bindings/display/bridge/lontium,lt7911exc.yaml new file +0 -0
new file mode 100644
index 0000000000000..3290b10ce8835

[ ... ]

Quoted 11 lines

ports:
$ref: /schemas/graph.yaml#/properties/ports

properties:
port@0:
$ref: /schemas/graph.yaml#/properties/port
description: Video port for eDP input.

port@1:
$ref: /schemas/graph.yaml#/properties/port
description: Video port for MIPI DSI output.

Since the commit message indicates the hardware supports dual port MIPI DSI output, should the schema define a secondary DSI interface here?

Without a second endpoint or an additional port defined, it seems device tree authors would be unable to properly model a dual-port display panel connection.

Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=1
#3 lore raw

Re: [PATCH v6 1/2] dt-bindings: bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

Quoted 2 lines · 在 2026/5/9 4:50, [email protected] 写道:

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] The binding lacks support for the dual-port MIPI DSI output claimed in the commit message.

1. When using single-port mode:
(a). Only either Port A or Port B can be output at a time. (b). Port A and Port B are combined into a single port to output
8-lane DSI.

2. When using dual-port mode:
Port A outputs the signal, and Port B copy the same signal from Port A.Both ports output the same image, and configuration for Port A alone is sufficient.

I need to look into how to modify it.

Quoted 1 line

- [Low] Typographical errors in the commit message alter the meaning and reduce clarity.

it will be fixed.> --

Quoted 10 lines

commit d7e3500f4741bb0ae26a44a80c52b86455bf1c05
Author: Sunyun Yang <[email protected]>

dt-bindings: bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

This commit adds the device tree binding schema for the Lontium LT7911EXC. This device is an I2C-controlled bridge that converts eDP 1.4 input to MIPI DSI output.

Quoted 7 lines
Quoted 2 lines

The LT7911EXC is an I2C-controlled bridge that Receiver eDP1.4 and output signal/dual port mipi dsi.

This isn't a bug, but there appear to be a few typos in the commit message description. The word Receiver reads like it should be receives, and the word signal looks like a typo for single.

it will be fixed in next version.

Quoted 27 lines
Quoted 5 lines
Documentation/devicetree/bindings/display/bridge/lontium,lt7911exc.yaml new file +0 -0
new file mode 100644
index 0000000000000..3290b10ce8835

[ ... ]

Quoted 11 lines

ports:
$ref: /schemas/graph.yaml#/properties/ports

properties:
port@0:
$ref: /schemas/graph.yaml#/properties/port
description: Video port for eDP input.

port@1:
$ref: /schemas/graph.yaml#/properties/port
description: Video port for MIPI DSI output.

Since the commit message indicates the hardware supports dual port MIPI DSI output, should the schema define a secondary DSI interface here?

Without a second endpoint or an additional port defined, it seems device tree authors would be unable to properly model a dual-port display panel connection.

#4 lore raw

PATCH v6 2/2 drm/bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

In reply to [email protected]

From: Sunyun Yang <[email protected]>

The LT7911EXC is an I2C-controlled bridge that Receiver eDP1.4 and output signal/dual port mipi dsi.

---
 drivers/gpu/drm/bridge/Kconfig             |  13 +
 drivers/gpu/drm/bridge/Makefile            |   1 +
 drivers/gpu/drm/bridge/lontium-lt7911exc.c | 493 +++++++++++++++++++++
 3 files changed, 507 insertions(+)
 create mode 100644 drivers/gpu/drm/bridge/lontium-lt7911exc.c
drivers/gpu/drm/bridge/Kconfig +13 -0
index c3209b0f4678..fe45a9052aa0 100644
@@ -132,6 +132,19 @@ config DRM_ITE_IT6505
 	help
 	  ITE IT6505 DisplayPort bridge chip driver.
 
+config DRM_LONTIUM_LT7911EXC
+	tristate "Lontium eDP/MIPI DSI bridge"
+	depends on OF
+	select CRC32
+	select FW_LOADER
+	select DRM_PANEL
+	select DRM_KMS_HELPER
+	help
+	  DRM driver for the Lontium LT7911EXC bridge chip.
+	  The LT7911EXC converts eDP input to single/dual port
+	  MIPI DSI output.
+	  Please say Y if you have such hardware.
+
 config DRM_LONTIUM_LT8912B
 	tristate "Lontium LT8912B DSI/HDMI bridge"
 	depends on OF
drivers/gpu/drm/bridge/Makefile +1 -0
index beab5b695a6e..70ddca75dd3a 100644
@@ -13,6 +13,7 @@ obj-$(CONFIG_DRM_I2C_NXP_TDA998X) += tda998x.o
 obj-$(CONFIG_DRM_INNO_HDMI) += inno-hdmi.o
 obj-$(CONFIG_DRM_ITE_IT6263) += ite-it6263.o
 obj-$(CONFIG_DRM_ITE_IT6505) += ite-it6505.o
+obj-$(CONFIG_DRM_LONTIUM_LT7911EXC) += lontium-lt7911exc.o
 obj-$(CONFIG_DRM_LONTIUM_LT8912B) += lontium-lt8912b.o
 obj-$(CONFIG_DRM_LONTIUM_LT9211) += lontium-lt9211.o
 obj-$(CONFIG_DRM_LONTIUM_LT9611) += lontium-lt9611.o
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +493 -0

493 lines not on this page · raw message

Signature · 1 line
2.34.1
#5 lore raw

Re: [PATCH v6 2/2] drm/bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

Thank you for your contribution! Sashiko AI review found 6 potential issue(s) to consider: - [High] Regulators enabled in `probe()` are never disabled on the success path, causing a permanent power…

Thank you for your contribution! Sashiko AI review found 6 potential issue(s) to consider:
- [High] Regulators enabled in probe() are never disabled on the success path, causing a permanent power leak.
- [High] Reset GPIO is driven high after cutting off power, violating power sequencing and risking hardware backpowering.
- [High] Synchronous request_firmware in probe can cause permanent probe failure if the driver is built-in.
- [Medium] Missing depends on I2C and select REGMAP_I2C in Kconfig.
- [Medium] The return value of devm_drm_bridge_add() is ignored in probe().
- [Low] Missing header includes for core kernel APIs.
--

commit d9cebea8e10096b0200ef8f220724550dd554963
Author: Sunyun Yang <[email protected]> drm/bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

This commit adds support for the Lontium LT7911EXC eDP to MIPI DSI bridge. It implements I2C-based setup, display configuration, and provides a firmware update mechanism.

drivers/gpu/drm/bridge/Kconfig config DRM_ITE_IT6505 · line 137

Quoted 11 lines
drivers/gpu/drm/bridge/Kconfig +3 -0
index c3209b0f46786..fe45a9052aa0d 100644
@@ -132,6 +132,19 @@ config DRM_ITE_IT6505
 	help
 	  ITE IT6505 DisplayPort bridge chip driver.
 
+config DRM_LONTIUM_LT7911EXC
+	tristate "Lontium eDP/MIPI DSI bridge"
+	depends on OF

Should this config also depend on I2C and select REGMAP_I2C?

The driver explicitly registers an I2C driver and utilizes devm_regmap_init_i2c(). Building without I2C enabled might cause compilation or linker errors.

[ ... ]

Quoted 10 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +4 -0
new file mode 100644
index 0000000000000..d50fc979ebd4b
@@ -0,0 +1,493 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2026 Lontium Semiconductor, Inc.
+ */

drivers/gpu/drm/bridge/lontium-lt7911exc.c line 14

Quoted 10 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +10 -0
+
+#include <linux/crc32.h>
+#include <linux/firmware.h>
+#include <linux/gpio/consumer.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/of_graph.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>

This isn't a bug, but it looks like some core headers are missing.

The driver uses kzalloc() and kfree(), msleep() and usleep_range(), as well as regulator_bulk_enable(). Could linux/slab.h, linux/delay.h, and linux/regulator/consumer.h be included directly to avoid relying on transitive includes?

[ ... ]

drivers/gpu/drm/bridge/lontium-lt7911exc.c line 290

Quoted 11 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +11 -0
+static int lt7911exc_firmware_upgrade(struct lt7911exc *lt7911exc)
+{
+	struct device *dev = lt7911exc->dev;
+	const struct firmware *fw;
+	u8 *buffer;
+	size_t total_size = FW_SIZE - 4;
+	u32 crc32;
+	int ret;
+
+	/*1. load firmware*/
+	ret = request_firmware(&fw, FW_FILE, dev);

Can this synchronous request_firmware() call cause a permanent probe failure if the driver is built-in?

When built into the kernel, probe executes before the root filesystem is mounted, which would cause this to fail with -ENOENT. Because the error is propagated without returning -EPROBE_DEFER, the subsystem might not retry the probe later.

[ ... ]

drivers/gpu/drm/bridge/lontium-lt7911exc.c line 368

Quoted 11 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +11 -0
+static void lt7911exc_atomic_post_disable(struct drm_bridge *bridge, struct drm_atomic_state *state)
+{
+	struct lt7911exc *lt7911exc = bridge_to_lt7911exc(bridge);
+	int ret;
+
+	ret = regulator_bulk_disable(ARRAY_SIZE(lt7911exc->supplies), lt7911exc->supplies);
+	if (ret)
+		return;
+
+	gpiod_set_value_cansleep(lt7911exc->reset_gpio, 1);
+}

Does driving the reset GPIO high after cutting off the regulator power violate power sequencing?

Driving a logic high signal into an unpowered IC can sometimes backpower the device through its internal ESD protection diodes.

[ ... ]

Quoted 6 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +6 -0
+static int lt7911exc_probe(struct i2c_client *client)
+{
+	struct device *dev = &client->dev;
+	struct lt7911exc *lt7911exc;
+	bool fw_updated = false;
+	int ret;

[ ... ]

Quoted 6 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +6 -0
+	ret = regulator_bulk_enable(ARRAY_SIZE(lt7911exc->supplies), lt7911exc->supplies);
+	if (ret)
+		return ret;
+
+	lt7911exc_reset(lt7911exc);
+	lt7911exc_lock(lt7911exc);

[ ... ]

drivers/gpu/drm/bridge/lontium-lt7911exc.c line 459

Quoted 6 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +6 -0
+	lt7911exc_unlock(lt7911exc);
+
+	lt7911exc->bridge.of_node = dev->of_node;
+	devm_drm_bridge_add(dev, &lt7911exc->bridge);
+
+	return 0;

Is there a resource leak for the regulators here?

The regulator_bulk_enable() call at the beginning of probe increments the use count to power the device, but it appears the success path returns 0 without calling regulator_bulk_disable().

If lt7911exc_atomic_post_disable() later decrements the count, it seems the count might still remain elevated by 1, leaving the hardware permanently powered on.

Additionally, should the return value of devm_drm_bridge_add() be checked?

If it fails, the bridge is internally removed, but returning 0 here would lead the driver to successfully bind to the I2C device without exposing a functional DRM bridge.

Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=2
#6 lore raw

Re: [PATCH v6 2/2] drm/bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

Quoted 2 lines · 在 2026/5/9 5:13, [email protected] 写道:

Thank you for your contribution! Sashiko AI review found 6 potential issue(s) to consider:
- [High] Regulators enabled in probe() are never disabled on the success path, causing a permanent power leak.

it will be fixed in next version.> - [High] Reset GPIO is driven
high after cutting off power, violating power sequencing and risking hardware backpowering.

Quoted 56 lines

- [High] Synchronous request_firmware in probe can cause permanent probe failure if the driver is built-in.
- [Medium] Missing depends on I2C and select REGMAP_I2C in Kconfig.
- [Medium] The return value of devm_drm_bridge_add() is ignored in probe().
- [Low] Missing header includes for core kernel APIs.
--

commit d9cebea8e10096b0200ef8f220724550dd554963
Author: Sunyun Yang <[email protected]> drm/bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridge

This commit adds support for the Lontium LT7911EXC eDP to MIPI DSI bridge. It implements I2C-based setup, display configuration, and provides a firmware update mechanism.

drivers/gpu/drm/bridge/Kconfig config DRM_ITE_IT6505 · line 137

Quoted 11 lines
drivers/gpu/drm/bridge/Kconfig +3 -0
index c3209b0f46786..fe45a9052aa0d 100644
@@ -132,6 +132,19 @@ config DRM_ITE_IT6505
  	help
  	  ITE IT6505 DisplayPort bridge chip driver.
 
+config DRM_LONTIUM_LT7911EXC
+	tristate "Lontium eDP/MIPI DSI bridge"
+	depends on OF

Should this config also depend on I2C and select REGMAP_I2C?

The driver explicitly registers an I2C driver and utilizes devm_regmap_init_i2c(). Building without I2C enabled might cause compilation or linker errors.

[ ... ]

Quoted 10 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +4 -0
new file mode 100644
index 0000000000000..d50fc979ebd4b
@@ -0,0 +1,493 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2026 Lontium Semiconductor, Inc.
+ */

drivers/gpu/drm/bridge/lontium-lt7911exc.c line 14

Quoted 10 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +10 -0
+
+#include <linux/crc32.h>
+#include <linux/firmware.h>
+#include <linux/gpio/consumer.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/of_graph.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>

This isn't a bug, but it looks like some core headers are missing.

Quoted 5 lines

The driver uses kzalloc() and kfree(), msleep() and usleep_range(), as well as regulator_bulk_enable(). Could linux/slab.h, linux/delay.h, and linux/regulator/consumer.h be included directly to avoid relying on transitive includes?

it will be fixed in next version.

Quoted 16 lines

[ ... ]

drivers/gpu/drm/bridge/lontium-lt7911exc.c line 290

Quoted 11 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +11 -0
+static int lt7911exc_firmware_upgrade(struct lt7911exc *lt7911exc)
+{
+	struct device *dev = lt7911exc->dev;
+	const struct firmware *fw;
+	u8 *buffer;
+	size_t total_size = FW_SIZE - 4;
+	u32 crc32;
+	int ret;
+
+	/*1. load firmware*/
+	ret = request_firmware(&fw, FW_FILE, dev);

Can this synchronous request_firmware() call cause a permanent probe failure if the driver is built-in?

Quoted 5 lines

When built into the kernel, probe executes before the root filesystem is mounted, which would cause this to fail with -ENOENT. Because the error is propagated without returning -EPROBE_DEFER, the subsystem might not retry the probe later.

it will be fixed in next version.> [ ... ]

Quoted 15 lines

drivers/gpu/drm/bridge/lontium-lt7911exc.c line 368

Quoted 11 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +11 -0
+static void lt7911exc_atomic_post_disable(struct drm_bridge *bridge, struct drm_atomic_state *state)
+{
+	struct lt7911exc *lt7911exc = bridge_to_lt7911exc(bridge);
+	int ret;
+
+	ret = regulator_bulk_disable(ARRAY_SIZE(lt7911exc->supplies), lt7911exc->supplies);
+	if (ret)
+		return;
+
+	gpiod_set_value_cansleep(lt7911exc->reset_gpio, 1);
+}

Does driving the reset GPIO high after cutting off the regulator power violate power sequencing?

Quoted 3 lines

Driving a logic high signal into an unpowered IC can sometimes backpower the device through its internal ESD protection diodes.

it will be fixed in next version.

Quoted 32 lines

[ ... ]

Quoted 6 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +6 -0
+static int lt7911exc_probe(struct i2c_client *client)
+{
+	struct device *dev = &client->dev;
+	struct lt7911exc *lt7911exc;
+	bool fw_updated = false;
+	int ret;

[ ... ]

Quoted 6 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +6 -0
+	ret = regulator_bulk_enable(ARRAY_SIZE(lt7911exc->supplies), lt7911exc->supplies);
+	if (ret)
+		return ret;
+
+	lt7911exc_reset(lt7911exc);
+	lt7911exc_lock(lt7911exc);

[ ... ]

drivers/gpu/drm/bridge/lontium-lt7911exc.c line 459

Quoted 6 lines
drivers/gpu/drm/bridge/lontium-lt7911exc.c new file +6 -0
+	lt7911exc_unlock(lt7911exc);
+
+	lt7911exc->bridge.of_node = dev->of_node;
+	devm_drm_bridge_add(dev, &lt7911exc->bridge);
+
+	return 0;

Is there a resource leak for the regulators here?

The regulator_bulk_enable() call at the beginning of probe increments the use count to power the device, but it appears the success path returns 0 without calling regulator_bulk_disable().

If lt7911exc_atomic_post_disable() later decrements the count, it seems the count might still remain elevated by 1, leaving the hardware permanently powered on.

Quoted 5 lines

Additionally, should the return value of devm_drm_bridge_add() be checked?

If it fails, the bridge is internally removed, but returning 0 here would lead the driver to successfully bind to the I2C device without exposing a functional DRM bridge.

it will be fixed in next version.

Quoted 1 line