Add Lontium LT7911EXC eDP to MIPI DSI bridge
Subsystems (4)
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
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
@@ -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 = <<7911exc_1v2>; + vcc-supply = <<7911exc_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
[email protected]
AI reviewRe: [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
[ ... ]
Quoted 11 lines
ports:
$ref: /schemas/graph.yaml#/properties/portsproperties:
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
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[ ... ]
Quoted 11 lines
ports:
$ref: /schemas/graph.yaml#/properties/portsproperties:
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.
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
@@ -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
@@ -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
[email protected]
AI reviewRe: [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@@ -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@@ -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, <7911exc->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
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 inprobe()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_firmwareinprobecan cause permanent probe failure if the driver is built-in.
- [Medium] Missingdepends on I2Candselect REGMAP_I2CinKconfig.
- [Medium] The return value ofdevm_drm_bridge_add()is ignored inprobe().
- [Low] Missing header includes for core kernel APIs.
--commit
d9cebea8e10096b0200ef8f220724550dd554963
Author: Sunyun Yang <[email protected]> drm/bridge: Add Lontium LT7911EXC eDP to MIPI DSI bridgeThis 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@@ -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 OFShould 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@@ -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()andkfree(),msleep()andusleep_range(), as well asregulator_bulk_enable(). Couldlinux/slab.h,linux/delay.h, andlinux/regulator/consumer.hbe 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, <7911exc->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 callingregulator_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.