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
