Hi Allan,
Not sure if you've solved this yet but our design is based on an i.mx6solo and includes both an ADV7181 and ADV7610. We only use one of these at a time so both are connected to CSI1 (we use CSI0 for a MIPI camara module) and we tri-state the output of the which ever one is not in use. We use BT.656 to bring in the data and have tested both chips in 8 and 16 bit width. The embedded clock mode has worked so well for us that we have actually dropped HSYNC, VSYNC and DAT_EN for our production board.
One thing that I had to mess with to get BT.656 working was the ADV7610's LLC delay. See IO Register 0x19 (LLC_DDL_EN).
Here are the few changes I had to make to my adv7610 driver in order when switching between 8 and 16 bit modes:
In probe()
#ifdef ADV7610_16BIT
adv_data.v4l2_data.pix.pixelformat = V4L2_PIX_FMT_YUYV;
#else
adv_data.v4l2_data.pix.pixelformat = V4L2_PIX_FMT_UYVY;
#endif
In init_ADV7610_regs:
#ifdef ADV7610_16BIT
{ IO_ADDR, 0x03, 0x80 }, // Output format is 16 bit SDR ITU-656 Mode 0
{ IO_ADDR, 0x19, 0x89 }, // LLC DLL phase, changed to improve setup/hold time
#else
{ IO_ADDR, 0x03, 0x00 }, // Output format is 8 bit SDR ITU-656
{ IO_ADDR, 0x19, 0xC3 }, // LLC DLL phase
#endif
In ioctl_g_ifparm
#ifdef ADV7610_16BIT
p->if_type = V4L2_IF_TYPE_BT1120;
p->u.bt1120.mode = V4L2_IF_TYPE_BT1120_MODE_BT_8BIT;
p->u.bt1120.clock_curr = (V4L2_DV_INTERLACED == adv_data.timings.bt.interlaced) ?
0 : adv_data.timings.bt.pixelclock;
p->u.bt1120.nobt_hs_inv = 0; // horizontal sync invert
p->u.bt1120.nobt_vs_inv = 0; // vertical sync invert
p->u.bt1120.frame_start_on_rising_vs = 0; // VS rising indicates a start
// of a new frame
p->u.bt1120.latch_clk_inv = 0;
p->u.bt1120.bt_sync_correct = 0;
#else
p->if_type = V4L2_IF_TYPE_BT656;
p->u.bt656.mode = V4L2_IF_TYPE_BT656_MODE_BT_8BIT;
p->u.bt656.clock_curr = (V4L2_DV_INTERLACED == adv_data.timings.bt.interlaced) ?
0 : adv_data.timings.bt.pixelclock;
p->u.bt656.nobt_hs_inv = 0;
p->u.bt656.nobt_vs_inv = 0;
p->u.bt656.latch_clk_inv = 0;
p->u.bt656.frame_start_on_rising_vs = 0;
p->u.bt656.bt_sync_correct = 0;
#endif