|
@@ -131,6 +131,7 @@ static u32 rvin_read(struct rvin_dev *vin, u32 offset)
|
|
static int rvin_setup(struct rvin_dev *vin)
|
|
static int rvin_setup(struct rvin_dev *vin)
|
|
{
|
|
{
|
|
u32 vnmc, dmr, dmr2, interrupts;
|
|
u32 vnmc, dmr, dmr2, interrupts;
|
|
|
|
+ v4l2_std_id std;
|
|
bool progressive = false, output_is_yuv = false, input_is_yuv = false;
|
|
bool progressive = false, output_is_yuv = false, input_is_yuv = false;
|
|
|
|
|
|
switch (vin->format.field) {
|
|
switch (vin->format.field) {
|
|
@@ -141,6 +142,14 @@ static int rvin_setup(struct rvin_dev *vin)
|
|
vnmc = VNMC_IM_EVEN;
|
|
vnmc = VNMC_IM_EVEN;
|
|
break;
|
|
break;
|
|
case V4L2_FIELD_INTERLACED:
|
|
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:
|
|
case V4L2_FIELD_INTERLACED_TB:
|
|
vnmc = VNMC_IM_FULL;
|
|
vnmc = VNMC_IM_FULL;
|
|
break;
|
|
break;
|