{
                .name     = "RGB565 (LE)",
                .fourcc   = V4L2_PIX_FMT_RGB565, /* gggbbbbb rrrrrggg */
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "XRGB555 (LE)",
                .fourcc   = V4L2_PIX_FMT_XRGB555, /* gggbbbbb arrrrrgg */
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "ARGB555 (LE)",
                .fourcc   = V4L2_PIX_FMT_ARGB555, /* gggbbbbb arrrrrgg */
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .planes   = 1,
+               .buffers = 1,
        },
 };
 
        /* This driver supports custom bytesperline values */
 
        /* Calculate the minimum supported bytesperline value */
-       bytesperline = (mp->width * fmt->depth) >> 3;
+       bytesperline = (mp->width * fmt->bit_depth[0]) >> 3;
        /* Calculate the maximum supported bytesperline value */
-       max_bpl = (MAX_ZOOM * MAX_WIDTH * fmt->depth) >> 3;
+       max_bpl = (MAX_ZOOM * MAX_WIDTH * fmt->bit_depth[0]) >> 3;
        mp->num_planes = fmt->planes;
        for (p = 0; p < mp->num_planes; p++) {
                if (pfmt[p].bytesperline > max_bpl)
        fmt = vivid_get_format(dev, a->fmt.pixelformat);
        if (!fmt || !fmt->can_do_overlay)
                return -EINVAL;
-       if (a->fmt.bytesperline < (a->fmt.width * fmt->depth) / 8)
+       if (a->fmt.bytesperline < (a->fmt.width * fmt->bit_depth[0]) / 8)
                return -EINVAL;
        if (a->fmt.height * a->fmt.bytesperline < a->fmt.sizeimage)
                return -EINVAL;
 
        {
                .name     = "4:2:2, packed, YUYV",
                .fourcc   = V4L2_PIX_FMT_YUYV,
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .is_yuv   = true,
                .planes   = 1,
+               .buffers = 1,
                .data_offset = { PLANE0_DATA_OFFSET, 0 },
        },
        {
                .name     = "4:2:2, packed, UYVY",
                .fourcc   = V4L2_PIX_FMT_UYVY,
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .is_yuv   = true,
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "4:2:2, packed, YVYU",
                .fourcc   = V4L2_PIX_FMT_YVYU,
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .is_yuv   = true,
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "4:2:2, packed, VYUY",
                .fourcc   = V4L2_PIX_FMT_VYUY,
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .is_yuv   = true,
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "RGB565 (LE)",
                .fourcc   = V4L2_PIX_FMT_RGB565, /* gggbbbbb rrrrrggg */
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .planes   = 1,
+               .buffers = 1,
                .can_do_overlay = true,
        },
        {
                .name     = "RGB565 (BE)",
                .fourcc   = V4L2_PIX_FMT_RGB565X, /* rrrrrggg gggbbbbb */
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .planes   = 1,
+               .buffers = 1,
                .can_do_overlay = true,
        },
        {
                .name     = "RGB555 (LE)",
                .fourcc   = V4L2_PIX_FMT_RGB555, /* gggbbbbb arrrrrgg */
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .planes   = 1,
+               .buffers = 1,
                .can_do_overlay = true,
        },
        {
                .name     = "XRGB555 (LE)",
                .fourcc   = V4L2_PIX_FMT_XRGB555, /* gggbbbbb arrrrrgg */
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .planes   = 1,
+               .buffers = 1,
                .can_do_overlay = true,
        },
        {
                .name     = "ARGB555 (LE)",
                .fourcc   = V4L2_PIX_FMT_ARGB555, /* gggbbbbb arrrrrgg */
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .planes   = 1,
+               .buffers = 1,
                .can_do_overlay = true,
                .alpha_mask = 0x8000,
        },
        {
                .name     = "RGB555 (BE)",
                .fourcc   = V4L2_PIX_FMT_RGB555X, /* arrrrrgg gggbbbbb */
-               .depth    = 16,
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
                .planes   = 1,
+               .buffers = 1,
                .can_do_overlay = true,
        },
        {
                .name     = "RGB24 (LE)",
                .fourcc   = V4L2_PIX_FMT_RGB24, /* rgb */
-               .depth    = 24,
+               .vdownsampling = { 1 },
+               .bit_depth = { 24 },
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "RGB24 (BE)",
                .fourcc   = V4L2_PIX_FMT_BGR24, /* bgr */
-               .depth    = 24,
+               .vdownsampling = { 1 },
+               .bit_depth = { 24 },
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "RGB32 (LE)",
                .fourcc   = V4L2_PIX_FMT_RGB32, /* argb */
-               .depth    = 32,
+               .vdownsampling = { 1 },
+               .bit_depth = { 32 },
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "RGB32 (BE)",
                .fourcc   = V4L2_PIX_FMT_BGR32, /* bgra */
-               .depth    = 32,
+               .vdownsampling = { 1 },
+               .bit_depth = { 32 },
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "XRGB32 (LE)",
                .fourcc   = V4L2_PIX_FMT_XRGB32, /* argb */
-               .depth    = 32,
+               .vdownsampling = { 1 },
+               .bit_depth = { 32 },
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "XRGB32 (BE)",
                .fourcc   = V4L2_PIX_FMT_XBGR32, /* bgra */
-               .depth    = 32,
+               .vdownsampling = { 1 },
+               .bit_depth = { 32 },
                .planes   = 1,
+               .buffers = 1,
        },
        {
                .name     = "ARGB32 (LE)",
                .fourcc   = V4L2_PIX_FMT_ARGB32, /* argb */
-               .depth    = 32,
+               .vdownsampling = { 1 },
+               .bit_depth = { 32 },
                .planes   = 1,
+               .buffers = 1,
                .alpha_mask = 0x000000ff,
        },
        {
                .name     = "ARGB32 (BE)",
                .fourcc   = V4L2_PIX_FMT_ABGR32, /* bgra */
-               .depth    = 32,
+               .vdownsampling = { 1 },
+               .bit_depth = { 32 },
                .planes   = 1,
+               .buffers = 1,
                .alpha_mask = 0xff000000,
        },
        {
-               .name     = "4:2:2, planar, YUV",
+               .name     = "4:2:2, biplanar, YUV",
                .fourcc   = V4L2_PIX_FMT_NV16M,
-               .depth    = 8,
+               .vdownsampling = { 1, 1 },
+               .bit_depth = { 8, 8 },
                .is_yuv   = true,
                .planes   = 2,
+               .buffers = 2,
                .data_offset = { PLANE0_DATA_OFFSET, 0 },
        },
        {
-               .name     = "4:2:2, planar, YVU",
+               .name     = "4:2:2, biplanar, YVU",
                .fourcc   = V4L2_PIX_FMT_NV61M,
-               .depth    = 8,
+               .vdownsampling = { 1, 1 },
+               .bit_depth = { 8, 8 },
                .is_yuv   = true,
                .planes   = 2,
+               .buffers = 2,
                .data_offset = { 0, PLANE0_DATA_OFFSET },
        },
 };
 
        if (V4L2_FIELD_HAS_T_OR_B(dev->field_out))
                dev->crop_out.height /= 2;
        dev->fmt_out_rect = dev->crop_out;
-       dev->bytesperline_out[0] = (dev->sink_rect.width * dev->fmt_out->depth) / 8;
+       dev->bytesperline_out[0] = (dev->sink_rect.width * dev->fmt_out->bit_depth[0]) / 8;
        if (dev->fmt_out->planes == 2)
-               dev->bytesperline_out[1] = (dev->sink_rect.width * dev->fmt_out->depth) / 8;
+               dev->bytesperline_out[1] = (dev->sink_rect.width * dev->fmt_out->bit_depth[0]) / 8;
 }
 
 /* Map the field to something that is valid for the current output */
        /* This driver supports custom bytesperline values */
 
        /* Calculate the minimum supported bytesperline value */
-       bytesperline = (mp->width * fmt->depth) >> 3;
+       bytesperline = (mp->width * fmt->bit_depth[0]) >> 3;
        /* Calculate the maximum supported bytesperline value */
-       max_bpl = (MAX_ZOOM * MAX_WIDTH * fmt->depth) >> 3;
+       max_bpl = (MAX_ZOOM * MAX_WIDTH * fmt->bit_depth[0]) >> 3;
        mp->num_planes = fmt->planes;
        for (p = 0; p < mp->num_planes; p++) {
                if (pfmt[p].bytesperline > max_bpl)