The i.MX specific DI_MODE VPL ioctl already allows to query the encoder
input bus format. This patch also allows non-i.MX specific encoder drivers
to report their input bus format.

Signed-off-by: Philipp Zabel <p.za...@pengutronix.de>
---
 drivers/video/imx-ipu-v3/ipufb.c | 8 ++++++--
 include/video/vpl.h              | 1 +
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/video/imx-ipu-v3/ipufb.c b/drivers/video/imx-ipu-v3/ipufb.c
index cfafa22..63024b5 100644
--- a/drivers/video/imx-ipu-v3/ipufb.c
+++ b/drivers/video/imx-ipu-v3/ipufb.c
@@ -109,7 +109,7 @@ int ipu_crtc_mode_set(struct ipufb_info *fbi,
        int ret;
        struct ipu_di_signal_cfg sig_cfg = {};
        struct ipu_di_mode di_mode = {};
-       u32 bus_format;
+       u32 bus_format = 0;
 
        dev_info(fbi->dev, "%s: mode->xres: %d\n", __func__,
                        mode->xres);
@@ -117,7 +117,11 @@ int ipu_crtc_mode_set(struct ipufb_info *fbi,
                        mode->yres);
 
        vpl_ioctl(&fbi->vpl, 2 + fbi->dino, IMX_IPU_VPL_DI_MODE, &di_mode);
-       bus_format = di_mode.bus_format ?: fbi->bus_format;
+       vpl_ioctl(&fbi->vpl, 2 + fbi->dino, VPL_GET_BUS_FORMAT, &bus_format);
+       if (bus_format)
+               di_mode.di_clkflags = IPU_DI_CLKMODE_NON_FRACTIONAL;
+       else
+               bus_format = di_mode.bus_format ?: fbi->bus_format;
 
        if (mode->sync & FB_SYNC_HOR_HIGH_ACT)
                sig_cfg.Hsync_pol = 1;
diff --git a/include/video/vpl.h b/include/video/vpl.h
index 846007f..6ae7b0f 100644
--- a/include/video/vpl.h
+++ b/include/video/vpl.h
@@ -8,6 +8,7 @@
 #define VPL_ENABLE             0x67660003
 #define VPL_DISABLE            0x67660004
 #define VPL_GET_VIDEOMODES     0x67660005
+#define VPL_GET_BUS_FORMAT     0x67660006
 
 struct vpl {
        int (*ioctl)(struct vpl *, unsigned int port,
-- 
2.8.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to