VPL_GET_BUS_FORMAT walks downstream through the bridge to the panel.
Today neither fsl-ldb (which forwards the call) nor simple-panel
(which reads a "bus-format" DT property) succeeds for DTs that follow
the Linux panel-lvds binding -- that binding describes the LVDS data
mapping in "data-mapping", not as a discrete bus-format integer.

The driver currently aborts enable on the -EINVAL, leaving /dev/fb0
registered but nothing scanning out.  Default to RGB888_1X24 instead
-- the parallel format LCDIFv3 hands to every RGB888 bridge regardless
of what the panel ultimately drives onto the wire.

Signed-off-by: Johannes Schneider <[email protected]>
---
 drivers/video/lcdif_kms.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/video/lcdif_kms.c b/drivers/video/lcdif_kms.c
index a113f3e681..5487d1298c 100644
--- a/drivers/video/lcdif_kms.c
+++ b/drivers/video/lcdif_kms.c
@@ -364,8 +364,11 @@ static void lcdif_enable_fb_controller(struct fb_info 
*info)
 
        ret = vpl_ioctl(&lcdif->vpl, lcdif->id, VPL_GET_BUS_FORMAT, 
&vcstate.bus_format);
        if (ret < 0) {
-               dev_err(lcdif->dev, "Cannot determine bus format\n");
-               return;
+               /* default for panel-lvds DTs lacking bus-format / bridges not 
answering */
+               dev_warn(lcdif->dev,
+                        "VPL_GET_BUS_FORMAT failed (%pe), defaulting to 
RGB888_1X24\n",
+                        ERR_PTR(ret));
+               vcstate.bus_format = MEDIA_BUS_FMT_RGB888_1X24;
        }
 
        ret = vpl_ioctl(&lcdif->vpl, lcdif->id, VPL_GET_DISPLAY_INFO, 
&display_info);
-- 
2.43.0


Reply via email to