Merge branch 'master' of git://www.denx.de/git/u-boot-socfpga
[oweals/u-boot.git] / board / gateworks / gw_ventana / gw_ventana.c
index 50a2a9adf0c16d083a2299ddae3d4ab3c7976c5e..1e54912a0180961194cbbb921dbbacad9a659bf4 100644 (file)
@@ -1580,6 +1580,42 @@ int misc_init_r(void)
 
 #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
 
+static int ft_sethdmiinfmt(void *blob, char *mode)
+{
+       int off;
+
+       if (!mode)
+               return -EINVAL;
+
+       off = fdt_node_offset_by_compatible(blob, -1, "nxp,tda1997x");
+       if (off < 0)
+               return off;
+
+       if (0 == strcasecmp(mode, "yuv422bt656")) {
+               u8 cfg[] = { 0x00, 0x00, 0x00, 0x82, 0x81, 0x00,
+                            0x00, 0x00, 0x00 };
+               mode = "422_ccir";
+               fdt_setprop(blob, off, "vidout_fmt", mode, strlen(mode) + 1);
+               fdt_setprop_u32(blob, off, "vidout_trc", 1);
+               fdt_setprop_u32(blob, off, "vidout_blc", 1);
+               fdt_setprop(blob, off, "vidout_portcfg", cfg, sizeof(cfg));
+               printf("   set HDMI input mode to %s\n", mode);
+       } else if (0 == strcasecmp(mode, "yuv422smp")) {
+               u8 cfg[] = { 0x00, 0x00, 0x00, 0x88, 0x87, 0x00,
+                            0x82, 0x81, 0x00 };
+               mode = "422_smp";
+               fdt_setprop(blob, off, "vidout_fmt", mode, strlen(mode) + 1);
+               fdt_setprop_u32(blob, off, "vidout_trc", 0);
+               fdt_setprop_u32(blob, off, "vidout_blc", 0);
+               fdt_setprop(blob, off, "vidout_portcfg", cfg, sizeof(cfg));
+               printf("   set HDMI input mode to %s\n", mode);
+       } else {
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 /*
  * called prior to booting kernel or by 'fdt boardsetup' command
  *
@@ -1640,6 +1676,9 @@ int ft_board_setup(void *blob, bd_t *bd)
        fdt_setprop(blob, 0, "board", info->model,
                    strlen((const char *)info->model) + 1);
 
+       /* set desired digital video capture format */
+       ft_sethdmiinfmt(blob, getenv("hdmiinfmt"));
+
        /*
         * disable serial2 node for GW54xx for compatibility with older
         * 3.10.x kernel that improperly had this node enabled in the DT
@@ -1717,6 +1756,9 @@ int ft_board_setup(void *blob, bd_t *bd)
                        }
                        fdt_setprop_inplace(blob, i, "fsl,pins", range, len);
                }
+
+               /* set BT656 video format */
+               ft_sethdmiinfmt(blob, "yuv422bt656");
        }
 
        /*