I'm working on IMX93 board with LT9611UXC dsi to HDMI chip for a while, and still stucked.
I followed the LT9611UXC demo reference from : LT9611UXC demo board for i.MX8 - NXP Community
There is no display output while encountering the following message from booting up.
root@imx93evk:~# dmesg | grep 4ae10000
[ 0.333564] platform 4ae30000.lcd-controller: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000/ports/port@0/endpoint
[ 1.749533] panel-simple-dsi 4ae10000.dsi.1: supply power not found, using dummy regulator
[ 1.766593] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -19
[ 1.776600] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -19
[ 1.786166] imx-drm display-subsystem: failed to bind 4ae10000.dsi (ops dw_mipi_dsi_imx_ops): -19
[ 1.800903] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -19
As far as I know, the LT9611UXC has already flashed the firmware on it, so it should work while the dsi signal passed throught SoC to it.
kernel device tree:
&dsi {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
port@1 {
compatible = "lontium,lt9611uxc";
reset-gpio = <&gpio3 26 GPIO_ACTIVE_HIGH>;
reg = <1>;
video-mode = <2>;
status = "okay";
};
};
Hope someone can help me figure it out. Thanks
Hi @AlanWen
If you want to control it with LT9611 kernel driver, you need modify LT9611 kernel driver.
If you just need firmware, you need use panel type in device tree.
Best Regards
Zhiming
To the best of my knowledge, I need the LT9611UXC driver to operate and receive the DSI signal from the CPU.
I can confirm that there is firmware on the LT9611UXC, so which option should I choose to ensure its functionality?
Is it correct ?
Hi @AlanWen
If you want to use firmware to drive LT9611, you don't need linux driver, just set it as simple panel like knowledge base did.
If you want to drive it with Linux driver, you need refer Documentation/devicetree/bindings/display/bridge/lontium,lt9611.yaml to add i2c device node and add below node in root dts node.
/{
model = "xxxxx"
...
hdmi-out {
compatible = "hdmi-connector";
type = "a";
port {
hdmi_con: endpoint {
remote-endpoint = <<9611_out>;
};
};
};
...
}
If you face error about '-517', you need adjust driver code, move lt9611uxc_attach_dsi function in
As I want to drive LT9611UXC with linux driver, I set the device tree as below, and I face the Error message you mentioned.
&dsi {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
bridge@0 {
compatible = "lontuim,lt9611uxc";
reset-gpio = <&gpio3 26 GPIO_ACTIVE_HIGH>;
reg = <0>;
status = "okay";
port {
lt9611_to_dsi: endpoint {
remote-endpoint = <&dsi_to_lt9611>;
};
};
};
ports {
port@1 {
reg = <1>;
dsi_to_lt9611: endpoint {
remote-endpoint = <<9611_to_dsi>;
};
};
};
};
root@imx93evk:~# dmesg | grep 4ae10000
[ 0.333170] platform 4ae10000.dsi: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000/bridge@0/port/endpoint
[ 0.342994] platform 4ae30000.lcd-controller: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000/ports/port@0/endpoint
[ 1.744375] mipi-dsi 4ae10000.dsi.0: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000/ports/port@1/endpoint
[ 1.762986] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -517
[ 1.773085] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -517
[ 1.782941] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -517
[ 2.149832] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -517
[ 2.159922] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -517
[ 2.169780] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -517
[ 2.205168] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -517
[ 2.215333] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -517
[ 2.225218] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -517
[ 2.251503] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -517
[ 2.261661] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -517
[ 2.271553] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -517
[ 2.297873] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -517
[ 2.308045] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -517
[ 2.317937] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -517
[ 2.503080] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -517
[ 2.513180] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -517
[ 2.523038] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -517
[ 8.107721] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -517
[ 8.107749] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -517
[ 8.108034] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -517
[ 8.189924] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -517
[ 8.227541] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -517
[ 8.255814] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -517
[ 19.097281] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/dsi@4ae10000 to encoder DSI-34: -517
[ 19.109253] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_bind] *ERROR* failed to attach bridge: -517
[ 19.120857] dw-mipi-dsi-imx 4ae10000.dsi: [drm:dw_mipi_dsi_imx_probe] *ERROR* failed to register component: -517
[ 19.216430] platform 4ae10000.dsi: deferred probe pending
I had already modified the lt9611uxc driver, move the lt9611uxc_attach_dsi function in lt9611uxc_probe to lt9611uxc_bridge_attach as below.
static int lt9611uxc_bridge_attach(struct drm_bridge *bridge,
enum drm_bridge_attach_flags flags)
{
struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
int ret;
if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)) {
ret = lt9611uxc_connector_init(bridge, lt9611uxc);
if (ret < 0)
return ret;
}
/* Attach primary DSI */
lt9611uxc->dsi0 = lt9611uxc_attach_dsi(lt9611uxc, lt9611uxc->dsi0_node);
//if (IS_ERR(lt9611uxc->dsi0)) {
// ret = PTR_ERR(lt9611uxc->dsi0);
// goto err_remove_bridge;
//}
/* Attach secondary DSI, if specified */
if (lt9611uxc->dsi1_node) {
lt9611uxc->dsi1 = lt9611uxc_attach_dsi(lt9611uxc, lt9611uxc->dsi1_node);
//if (IS_ERR(lt9611uxc->dsi1)) {
// ret = PTR_ERR(lt9611uxc->dsi1);
// goto err_remove_bridge;
//}
}
return 0;
}
Seems I can still get the -517 Error message.
You need refer Documentation/devicetree/bindings/display/bridge/lontium,lt9611.yaml to add i2c device node, do not define "lontuim,lt9611uxc" in dsi node.
Thanks for helping me a lot, now I can port the driver successfully using following device tree setup.
/{
...
hdmi-out {
compatible = "hdmi-connector";
type = "a";
port {
hdmi_con: endpoint {
remote-endpoint = <<9611_out>;
};
};
};
};
&dsi {
ports {
port@1 {
reg = <1>;
dsi_to_lt9611: endpoint {
remote-endpoint = <<9611_to_dsi>;
};
};
};
};
&lpi2c3 {
#address-cells = <1>;
#size-cells = <0>;
clock-frequency = <400000>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <&pinctrl_lpi2c3>;
pinctrl-1 = <&pinctrl_lpi2c3>;
status = "okay";
lt9611uxc_codec: hdmi-bridge@2b {
compatible = "lontium,lt9611uxc";
reg = <0x2b>;
#sound-dai-cells = <1>;
interrupts-extended = <&gpio1 12 IRQ_TYPE_EDGE_FALLING>;
reset-gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>;
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
lt9611_to_dsi: endpoint {
remote-endpoint = <&dsi_to_lt9611>;
};
};
port@2 {
reg = <2>;
lt9611_out: endpoint {
remote-endpoint = <&hdmi_con>;
};
};
};
};
};
As the DSI & I2C worked fine:
root@imx93evk:~# i2cdetect -y 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@imx93evk:~# dmesg | grep 4ae10000
[ 0.333650] platform 4ae30000.lcd-controller: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000/ports/port@0/endpoint
[ 2.049117] i2c 2-002b: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000/ports/port@1/endpoint
[ 2.636315] imx-drm display-subsystem: bound 4ae10000.dsi (ops dw_mipi_dsi_imx_ops)
Now I'm facing a new problem about EDID timeout:
root@imx93evk:~# dmesg | grep lt9611
[ 2.058278] lt9611uxc 2-002b: supply vdd not found, using dummy regulator
[ 2.065135] lt9611uxc 2-002b: supply vcc not found, using dummy regulator
[ 2.467765] lt9611uxc 2-002b: LT9611 revision: 0x17.04.93
[ 2.530843] lt9611uxc 2-002b: LT9611 version: 0x40
[ 3.234292] lt9611uxc 2-002b: wait for EDID timeout
[ 3.810251] lt9611uxc 2-002b: wait for EDID timeout
[ 9.747723] Error: Driver 'lt9611uxc' is already registered, aborting...
[ 13.314370] lt9611uxc 2-002b: wait for EDID timeout
Hopes someone could help me figure it out. Thanks in advance.