Hi,
I upgrade my Linux kernel from 5.15.52 to 6.6. After upgrading my panel only shows a small stripe. I made no changes at the device tree. When I use the panel-simple driver instead of panel-lvds I got a working display. Does someone know about changes in the driver.
I use a iMX8MP and my panel is connected to LVDS1 interface.
dmesg shows a message but I can't identify the failure
dmesg | grep lvds
[ 0.077630] platform panel-lvds1: Fixed dependency cycle(s) with /ldb-display-controller/lvds-channel@1
[ 2.511277] imx8mp-ldb ldb-display-controller: Failed to create device link (0x180) with phy-lvds
[ 2.552129] imx8mp-ldb ldb-display-controller: Failed to create device link (0x180) with panel-lvds1Thanks
This is an old thread, but I faced the same problem.
In my case, I had to pass the de-active = <1>; property to fix it.
Failure occurs early during boot. This might indicate clocks problem. Check e. g. clock-names in node ldb read by drivers. What are you using? drm display-subsystem or frame buffers (mxc) ?
Here are my settings. Maybe you find a mistake
/ {
backlight1: backlight1 {
compatible = "pwm-backlight";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_lvds1>;
default-brightness-level = <6>;
pwms = <&pwm3 0 50000 0>;
power-supply = <®_lvds1_reg_en>;
enable-gpios = <&gpio2 20 GPIO_ACTIVE_LOW>;
brightness-levels= <0 4 8 16 32 64 128 255>;
status = "okay";
};
panel_lvds: panel-lvds1 {
compatible = "panel-lvds";
backlight = <&backlight1>;
width-mm = <218>;
height-mm = <137>;
data-mapping = "vesa-24";
status = "okay";
panel-timing {
clock-frequency = <71000000>;
hactive = <1280>;
hfront-porch = <30>;
hsync-len = <48>;
hback-porch = <80>;
vactive = <800>;
vfront-porch = <3>;
vsync-len = <6>;
vback-porch = <14>;
};
port {
panel1_in: endpoint {
remote-endpoint = <&lvds1_out>;
};
};
};
};
&lcdif2 {
status = "okay";
};
/* LVDS1 */
&ldb {
status = "okay";
lvds-channel@1 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
primary;
port@1 {
reg = <1>;
lvds1_out: endpoint {
remote-endpoint = <&panel1_in>;
};
};
};
};
&ldb_phy {
status = "okay";
};yes I checkd the dtb. I convert the dtb back to dts. The new one as the old one. I can't see any differences.
I use a DataModul 10,1“ TFT – WXGA – LVDS panel (TX26D207VM0AAA)
Hello,
Have you checked the dtb? are they changed? which lvds device are you working on?
Regards
Hi @SanthoshRajavel,
Since my product is proprietary, I cannot share the contents of our DTS. However, this snippet from the above DTS shows where I added the 'de-active = <1>' property which was the fix I needed:
/ {
backlight1: backlight1 {
compatible = "pwm-backlight";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_lvds1>;
default-brightness-level = <6>;
pwms = <&pwm3 0 50000 0>;
power-supply = <®_lvds1_reg_en>;
enable-gpios = <&gpio2 20 GPIO_ACTIVE_LOW>;
brightness-levels= <0 4 8 16 32 64 128 255>;
status = "okay";
};
panel_lvds: panel-lvds1 {
compatible = "panel-lvds";
backlight = <&backlight1>;
width-mm = <218>;
height-mm = <137>;
data-mapping = "vesa-24";
status = "okay";
panel-timing {
clock-frequency = <71000000>;
hactive = <1280>;
hfront-porch = <30>;
hsync-len = <48>;
hback-porch = <80>;
vactive = <800>;
vfront-porch = <3>;
vsync-len = <6>;
vback-porch = <14>;
de-active = <1>;
};
port {
panel1_in: endpoint {
remote-endpoint = <&lvds1_out>;
};
};
};
};
&lcdif2 {
status = "okay";
};
/* LVDS1 */
&ldb {
status = "okay";
lvds-channel@1 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
primary;
port@1 {
reg = <1>;
lvds1_out: endpoint {
remote-endpoint = <&panel1_in>;
};
};
};
};
&ldb_phy {
status = "okay";
};@SanthoshRajavel I would check if the 'fsl,data-mapping' and 'fsl,data-width' properties in 'lvds-channel@1' node is correct. I have these defined in my own DTS to specific values expected by my panel, which differ from the defaults defined in the driver.
I would also verify the 'pinctrl-0' and 'pinctrl-names' property definitions - I see it in the backlight node definition which I think is not needed. This property is defined in my 'panel' node instead.
These are only pointers - I am by no means an expert in device tree configs but these things popped out as areas of interest.
Hi @brood
I am experiencing the same issue as well. Could you please share the DTS file in the chat? It would be very helpful.
@brood Thank you for sharing this. I already tried the same approach, but it did not work for me. I am also very new to this. Please find my code below—could you help me fix it?
My Board : 8MPLUSLPD4-EVK
@brood
Even after disabling HDMI and retrying the setup, the issue persists.
@MicMoba
I have a separate backlight module and I am controlling the backlight through that. In my case, an integrated backlight is not required.
Are you using a HDMI panel? I see you have the HDMI node activated - that may be causing a conflict depending on your pinmux.
Maybe it helps. At your stage I remember this patch brought me further:
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -462,7 +462,7 @@ static int pwm_backlight_initial_power_state(const struct pwm_bl_data *pb)
* assume that another driver will enable the backlight at the
* appropriate time. Therefore, if it is disabled, keep it so.
*/
- return active ? FB_BLANK_UNBLANK: FB_BLANK_POWERDOWN;
+ return FB_BLANK_UNBLANK;
}
static int pwm_backlight_probe(struct platform_device *pdev)
@brood I have updated the backlight configuration, and the code builds successfully. The LVDS interface is now visible in DRM, but there is no output on the display. I am currently stuck at this stage. I have attached my code and the display details below for your review and suggestions.
Display : Innolux G070Y2-L01