Add a new optional device tree property `ti,dual-link-video-mode`
to indicate that the bridge should configure the device for
dual-link LVDS video mode.
In dual-link configurations, some panels require the horizontal
timing parameters to be adjusted before programming them into
the device. In such cases, the horizontal timing values must be
divided by two when operating in dual-link mode.
Signed-off-by: Sudarshan Shetty <tessolveupstream@gmail.com>
---
.../devicetree/bindings/display/bridge/ti,sn65dsi83.yaml | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/bridge/ti,sn65dsi83.yaml b/Documentation/devicetree/bindings/display/bridge/ti,sn65dsi83.yaml
index e69b6343a8eb..b610739555a4 100644
--- a/Documentation/devicetree/bindings/display/bridge/ti,sn65dsi83.yaml
+++ b/Documentation/devicetree/bindings/display/bridge/ti,sn65dsi83.yaml
@@ -38,6 +38,15 @@ properties:
interrupts:
maxItems: 1
+ ti,dual-link-video-mode:
+ type: boolean
+ description: |
+ Enables configuration settings required for correct dual-link
+ LVDS operation. Some panels require the horizontal timing
+ parameters to be adjusted before being programmed into the
+ device. The horizontal timing values must be divided by
+ two when operating in dual-link mode.
+
ports:
$ref: /schemas/graph.yaml#/properties/ports
--
2.34.1
Hello Sudarshan,
On Thu Mar 12, 2026 at 5:37 AM CET, Sudarshan Shetty wrote:
> Add a new optional device tree property `ti,dual-link-video-mode`
> to indicate that the bridge should configure the device for
> dual-link LVDS video mode.
>
> In dual-link configurations, some panels require the horizontal
> timing parameters to be adjusted before programming them into
> the device. In such cases, the horizontal timing values must be
> divided by two when operating in dual-link mode.
>
> Signed-off-by: Sudarshan Shetty <tessolveupstream@gmail.com>
This is not needed. Dual link mode is already implied by the presence of
port@2 and port@3.
Also, the driver implements that already, and handles even/odd pixel swap
as well:
ctx->lvds_dual_link = false;
ctx->lvds_dual_link_even_odd_swap = false;
if (model != MODEL_SN65DSI83) {
struct device_node *port2, *port3;
int dual_link;
port2 = of_graph_get_port_by_id(dev->of_node, 2);
port3 = of_graph_get_port_by_id(dev->of_node, 3);
dual_link = drm_of_lvds_get_dual_link_pixel_order(port2, port3);
of_node_put(port2);
of_node_put(port3);
if (dual_link == DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS) {
ctx->lvds_dual_link = true;
/* Odd pixels to LVDS Channel A, even pixels to B */
ctx->lvds_dual_link_even_odd_swap = false;
} else if (dual_link == DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS) {
ctx->lvds_dual_link = true;
/* Even pixels to LVDS Channel A, odd pixels to B */
ctx->lvds_dual_link_even_odd_swap = true;
}
}
(https://elixir.bootlin.com/linux/v7.0-rc3/source/drivers/gpu/drm/bridge/ti-sn65dsi83.c#L895-L916)
Luca
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
On 12-03-2026 21:16, Luca Ceresoli wrote:
> Hello Sudarshan,
>
> On Thu Mar 12, 2026 at 5:37 AM CET, Sudarshan Shetty wrote:
>> Add a new optional device tree property `ti,dual-link-video-mode`
>> to indicate that the bridge should configure the device for
>> dual-link LVDS video mode.
>>
>> In dual-link configurations, some panels require the horizontal
>> timing parameters to be adjusted before programming them into
>> the device. In such cases, the horizontal timing values must be
>> divided by two when operating in dual-link mode.
>>
>> Signed-off-by: Sudarshan Shetty <tessolveupstream@gmail.com>
>
> This is not needed. Dual link mode is already implied by the presence of
> port@2 and port@3.
>
> Also, the driver implements that already, and handles even/odd pixel swap
> as well:
>
> ctx->lvds_dual_link = false;
> ctx->lvds_dual_link_even_odd_swap = false;
> if (model != MODEL_SN65DSI83) {
> struct device_node *port2, *port3;
> int dual_link;
>
> port2 = of_graph_get_port_by_id(dev->of_node, 2);
> port3 = of_graph_get_port_by_id(dev->of_node, 3);
> dual_link = drm_of_lvds_get_dual_link_pixel_order(port2, port3);
> of_node_put(port2);
> of_node_put(port3);
>
> if (dual_link == DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS) {
> ctx->lvds_dual_link = true;
> /* Odd pixels to LVDS Channel A, even pixels to B */
> ctx->lvds_dual_link_even_odd_swap = false;
> } else if (dual_link == DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS) {
> ctx->lvds_dual_link = true;
> /* Even pixels to LVDS Channel A, odd pixels to B */
> ctx->lvds_dual_link_even_odd_swap = true;
> }
> }
>
> (https://elixir.bootlin.com/linux/v7.0-rc3/source/drivers/gpu/drm/bridge/ti-sn65dsi83.c#L895-L916)
>
Thanks for the clarification.
For reference, the DTS currently used on our platform already
describes the two LVDS output ports as follows:
lvds_bridge: bridge@2c {
compatible = "ti,sn65dsi84";
reg = <0x2c>;
enable-gpios = <&tlmm 42 GPIO_ACTIVE_HIGH>;
ti,dual-link-video-mode;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
sn65dsi84_in: endpoint {
data-lanes = <1 2 3 4>;
remote-endpoint = <&mdss_dsi0_out>;
};
};
port@2 {
reg = <2>;
sn65dsi84_out_a: endpoint {
data-lanes = <1 2 3 4>;
remote-endpoint = <&lvds_panel_out_a>;
};
};
port@3 {
reg = <3>;
sn65dsi84_out_b: endpoint {
data-lanes = <1 2 3 4>;
remote-endpoint = <&lvds_panel_out_b>;
};
};
};
> Luca
>
> --
> Luca Ceresoli, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
On 12-03-2026 21:16, Luca Ceresoli wrote:
> Hello Sudarshan,
>
> On Thu Mar 12, 2026 at 5:37 AM CET, Sudarshan Shetty wrote:
>> Add a new optional device tree property `ti,dual-link-video-mode`
>> to indicate that the bridge should configure the device for
>> dual-link LVDS video mode.
>>
>> In dual-link configurations, some panels require the horizontal
>> timing parameters to be adjusted before programming them into
>> the device. In such cases, the horizontal timing values must be
>> divided by two when operating in dual-link mode.
>>
>> Signed-off-by: Sudarshan Shetty <tessolveupstream@gmail.com>
>
> This is not needed. Dual link mode is already implied by the presence of
> port@2 and port@3.
>
> Also, the driver implements that already, and handles even/odd pixel swap
> as well:
>
> ctx->lvds_dual_link = false;
> ctx->lvds_dual_link_even_odd_swap = false;
> if (model != MODEL_SN65DSI83) {
> struct device_node *port2, *port3;
> int dual_link;
>
> port2 = of_graph_get_port_by_id(dev->of_node, 2);
> port3 = of_graph_get_port_by_id(dev->of_node, 3);
> dual_link = drm_of_lvds_get_dual_link_pixel_order(port2, port3);
> of_node_put(port2);
> of_node_put(port3);
>
> if (dual_link == DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS) {
> ctx->lvds_dual_link = true;
> /* Odd pixels to LVDS Channel A, even pixels to B */
> ctx->lvds_dual_link_even_odd_swap = false;
> } else if (dual_link == DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS) {
> ctx->lvds_dual_link = true;
> /* Even pixels to LVDS Channel A, odd pixels to B */
> ctx->lvds_dual_link_even_odd_swap = true;
> }
> }
>
> (https://elixir.bootlin.com/linux/v7.0-rc3/source/drivers/gpu/drm/bridge/ti-sn65dsi83.c#L895-L916)
>
Thanks for the clarification.
For reference, the DTS currently used on our platform already
describes the two LVDS output ports as follows:
lvds_bridge: bridge@2c {
compatible = "ti,sn65dsi84";
reg = <0x2c>;
enable-gpios = <&tlmm 42 GPIO_ACTIVE_HIGH>;
ti,dual-link-video-mode;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
sn65dsi84_in: endpoint {
data-lanes = <1 2 3 4>;
remote-endpoint = <&mdss_dsi0_out>;
};
};
port@2 {
reg = <2>;
sn65dsi84_out_a: endpoint {
data-lanes = <1 2 3 4>;
remote-endpoint = <&lvds_panel_out_a>;
};
};
port@3 {
reg = <3>;
sn65dsi84_out_b: endpoint {
data-lanes = <1 2 3 4>;
remote-endpoint = <&lvds_panel_out_b>;
};
};
};
> Luca
>
> --
> Luca Ceresoli, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
On Thu, Mar 12, 2026 at 04:46:40PM +0100, Luca Ceresoli wrote: > Hello Sudarshan, > > On Thu Mar 12, 2026 at 5:37 AM CET, Sudarshan Shetty wrote: > > Add a new optional device tree property `ti,dual-link-video-mode` > > to indicate that the bridge should configure the device for > > dual-link LVDS video mode. > > > > In dual-link configurations, some panels require the horizontal > > timing parameters to be adjusted before programming them into > > the device. In such cases, the horizontal timing values must be > > divided by two when operating in dual-link mode. > > > > Signed-off-by: Sudarshan Shetty <tessolveupstream@gmail.com> > > This is not needed. Dual link mode is already implied by the presence of > port@2 and port@3. Yep! Thanks for chiming in. Best regards, Krzysztof
© 2016 - 2026 Red Hat, Inc.