[media] media: rcar-vin: make V4L2_FIELD_INTERLACED standard dependent
authorNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Fri, 2 Sep 2016 16:44:57 +0000 (13:44 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Mon, 19 Sep 2016 19:31:20 +0000 (16:31 -0300)
The field V4L2_FIELD_INTERLACED is standard dependent and should not
unconditionally be equivalent to V4L2_FIELD_INTERLACED_TB.

This patch adds a check to see if the video standard can be obtained and
if it's a 60 Hz format. If the condition is met V4L2_FIELD_INTERLACED
is treated as V4L2_FIELD_INTERLACED_BT if not as
V4L2_FIELD_INTERLACED_TB.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/platform/rcar-vin/rcar-dma.c

index 8397125a89684c932d0556c5355830a5b6a0a741..01182e0a86f8bc16c31db0c5ddd7e0bb8d440e2f 100644 (file)
@@ -131,6 +131,7 @@ static u32 rvin_read(struct rvin_dev *vin, u32 offset)
 static int rvin_setup(struct rvin_dev *vin)
 {
        u32 vnmc, dmr, dmr2, interrupts;
+       v4l2_std_id std;
        bool progressive = false, output_is_yuv = false, input_is_yuv = false;
 
        switch (vin->format.field) {
@@ -141,6 +142,14 @@ static int rvin_setup(struct rvin_dev *vin)
                vnmc = VNMC_IM_EVEN;
                break;
        case V4L2_FIELD_INTERLACED:
+               /* Default to TB */
+               vnmc = VNMC_IM_FULL;
+               /* Use BT if video standard can be read and is 60 Hz format */
+               if (!v4l2_subdev_call(vin_to_source(vin), video, g_std, &std)) {
+                       if (std & V4L2_STD_525_60)
+                               vnmc = VNMC_IM_FULL | VNMC_FOC;
+               }
+               break;
        case V4L2_FIELD_INTERLACED_TB:
                vnmc = VNMC_IM_FULL;
                break;