Hi team,
I’m currently finishing some documentation for some new displays, and to round it up, I’m also adding the needed changes for Torizon, in the form of DTOs. However, during this process I had a couple of issues.
- Once understood a bit the DTO syntax, and launching process, I tried to create a DTS based on the 10.1" display that we have, but with the timings of the given display (a WVGA, 800x480 one). I activated the enable_lvds_display_apalis_imx6.dts.dtbo and my recently created one.
Unluckily it didn’t work as expected, and the image seemed cropped, like if it was using the 10.1" LVDS timings instead. Needless to say that the 10.1" DTO was not activated.
After some trial and error, and trying to understanding what was going on, I could found a working scenario (to which doesn’t make much sense to me).
## dtconf activate enable_lvds_display_apalis_imx6.dts
## dtconf activate --no-git-repo /dts/mydisplay.dts
AND
## dtconf activate enable_lvds_display_apalis_imx6.dts
## dtconf activate display_10.1_lvds_cap_touch.dts
have the same outcome.
But if I only apply the enable_lvds_display_apalis_imx6.dts one, I get an (expected) error message that no timings are found.
The DTO in question:
/dts-v1/;
/plugin/;
/ {
compatible = "toradex,apalis_imx6q";
fragment@0 {
target-path="/panel-lvds";
__overlay__ {
status = "okay";
data-mapping = "vesa-24";
width-mm = <193>;
height-mm = <130>;
panel-timings {
clock-frequency = <30400000>; //30.4 MHZ
hactive = <800>;
vactive = <480>;
hback-porch = <112>;
hfront-porch = <32>;
vback-porch = <3>;
vfront-porch = <17>;
hsync-len = <80>;
vsync-len = <4>;
hsync-active = <0>;
vsync-active = <0>;
pixelclk-active = <0>;
};
};
};
};
I even tried reducing the hactive
and vactive
to half, disable and reactivate the DTS but no change whatsoever. It looks like LVDS 10.1" values are hardcoded behind the DTO, and any additional DTO won’t make any change.
However, if I remove all the display timings and keep enable_lvds_display_apalis_imx6
I get the expected error:
Starting kernel ...
[ 1.183694] /ldb/lvds-channel@0: could not find display-timings node
[ 1.190054] /ldb/lvds-channel@0: no timings specified
[ 1.195147] imx-ldb ldb: could not determine data mapping: -22
[ 1.201000] imx-drm display-subsystem: failed to bind ldb (ops imx_ldb_ops): -22
[ 2.331916] imx6q-pcie 1ffc000.pcie: Phy link never came up
Error opening /dev/fb0
Starting version 243+
2 . So in order to workaround this, I tried to use the former approach and access the ldb node directly instead of the panel-lvds node which seems buggy.
So this is the following DTS (I disabled enable_lvds_display_apalis_imx6
) :
/dts-v1/;
/plugin/;
/ {
model = "Toradex Apalis iMX6Q/D Module";
compatible = "toradex,apalis_imx6q", "fsl,imx6q";
fragment@0 {
target = <&ldb>;
__overlay__ {
status = "okay";
lvds-channel@0 {
reg = <0>;
status = "okay";
fsl,data-mapping = "spwg";
fsl,data-width = <24>; //Selected by pin 19 of the LVDS connector
crtc = "ipu2-di1";
display-timings {
native-mode = <&mitsubishi_7>;
/* Mitsubishi 7", WVGA" */
mitsubishi_7: 800x480 {
clock-frequency = <30400000>; //30.4 MHZ
hactive = <800>;
vactive = <480>;
hback-porch = <112>;
hfront-porch = <32>;
vback-porch = <3>;
vfront-porch = <17>;
hsync-len = <80>;
vsync-len = <4>;
hsync-active = <0>;
vsync-active = <0>;
pixelclk-active = <0>;
};
};
};
lvds-channel@1 {
reg = <1>;
fsl,data-mapping = "spwg";
fsl,data-width = <24>; //Selected by pin 19 of the LVDS connector
crtc = "ipu1-di0";
status = "okay";
display-timings {
native-mode = <&mitsubishi_7_ch2>;
/* Mitsubishi 7", WVGA" */
mitsubishi_7_ch2: 800x480 {
clock-frequency = <30400000>; //30.4 MHZ
hactive = <800>;
vactive = <480>;
hback-porch = <112>;
hfront-porch = <32>;
vback-porch = <3>;
vfront-porch = <17>;
hsync-len = <80>;
vsync-len = <4>;
hsync-active = <0>;
vsync-active = <0>;
pixelclk-active = <0>;
};
};
};
};
};
};
Since I’m also testing the double channel capabilities, I hooked up 2 exact same displays that use a single LVDS each.
By launching the above DTO, I get the image correctly displayed but only on the second LVDS channel! (at lvds-channel@1
). Only a single /dev/fb0 (no /dev/fb1) that is routed to the LVDS channel B (Confirmed this by sending /dev/random to it). What is the current/expected support for +2 framebuffers?
3 . So I did a couple of more tests (disabling previous DTO and activating the newer with the changes):
3.1. I tried exchanging the crtc variable between channels: No change, I still only have image in channel B.
3.2. I removed the lvds-channel@1
node, leaving only the lvds-channel@0
: I get no image in either channel (but on restart I see the login image as it is a backlight issue)
3.3. I removed the lvds-channel@0
node, leaving only the lvds-channel@1
: I get no image in either channel with the same error at question 1 that /ldb/lvds-channel@0: could not find display-timings node
So this approach seems quite buggy as well… Any help would be appreciated to get this done, I’m out of ideas, but feel free to create a ticket.
Thanks.
Alvaro.