Merge tag 'ntb-4.4' of git://github.com/jonmason/ntb
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / ipu-v3 / ipu-dc.c
index 4864f830079779a5e332f7872c8745795aea5766..d3ad5347342c622fe736a255e5635e9476de8583 100644 (file)
@@ -147,20 +147,20 @@ static void dc_write_tmpl(struct ipu_dc *dc, int word, u32 opcode, u32 operand,
        writel(reg2, priv->dc_tmpl_reg + word * 8 + 4);
 }
 
-static int ipu_pixfmt_to_map(u32 fmt)
+static int ipu_bus_format_to_map(u32 fmt)
 {
        switch (fmt) {
-       case V4L2_PIX_FMT_RGB24:
+       case MEDIA_BUS_FMT_RGB888_1X24:
                return IPU_DC_MAP_RGB24;
-       case V4L2_PIX_FMT_RGB565:
+       case MEDIA_BUS_FMT_RGB565_1X16:
                return IPU_DC_MAP_RGB565;
-       case IPU_PIX_FMT_GBR24:
+       case MEDIA_BUS_FMT_GBR888_1X24:
                return IPU_DC_MAP_GBR24;
-       case V4L2_PIX_FMT_BGR666:
+       case MEDIA_BUS_FMT_RGB666_1X18:
                return IPU_DC_MAP_BGR666;
-       case v4l2_fourcc('L', 'V', 'D', '6'):
+       case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
                return IPU_DC_MAP_LVDS666;
-       case V4L2_PIX_FMT_BGR24:
+       case MEDIA_BUS_FMT_BGR888_1X24:
                return IPU_DC_MAP_BGR24;
        default:
                return -EINVAL;
@@ -168,7 +168,7 @@ static int ipu_pixfmt_to_map(u32 fmt)
 }
 
 int ipu_dc_init_sync(struct ipu_dc *dc, struct ipu_di *di, bool interlaced,
-               u32 pixel_fmt, u32 width)
+               u32 bus_format, u32 width)
 {
        struct ipu_dc_priv *priv = dc->priv;
        u32 reg = 0;
@@ -176,19 +176,26 @@ int ipu_dc_init_sync(struct ipu_dc *dc, struct ipu_di *di, bool interlaced,
 
        dc->di = ipu_di_get_num(di);
 
-       map = ipu_pixfmt_to_map(pixel_fmt);
+       map = ipu_bus_format_to_map(bus_format);
        if (map < 0) {
                dev_dbg(priv->dev, "IPU_DISP: No MAP\n");
                return map;
        }
 
        if (interlaced) {
-               dc_link_event(dc, DC_EVT_NL, 0, 3);
-               dc_link_event(dc, DC_EVT_EOL, 0, 2);
-               dc_link_event(dc, DC_EVT_NEW_DATA, 0, 1);
+               int addr;
+
+               if (dc->di)
+                       addr = 1;
+               else
+                       addr = 0;
+
+               dc_link_event(dc, DC_EVT_NL, addr, 3);
+               dc_link_event(dc, DC_EVT_EOL, addr, 2);
+               dc_link_event(dc, DC_EVT_NEW_DATA, addr, 1);
 
                /* Init template microcode */
-               dc_write_tmpl(dc, 0, WROD(0), 0, map, SYNC_WAVE, 0, 8, 1);
+               dc_write_tmpl(dc, addr, WROD(0), 0, map, SYNC_WAVE, 0, 6, 1);
        } else {
                if (dc->di) {
                        dc_link_event(dc, DC_EVT_NL, 2, 3);