Re: [PATCHv2 5/5] adv7842: enable reduced fps detection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 15/08/18 15:40, Hans Verkuil wrote:
> From: Hans Verkuil <hans.verkuil@xxxxxxxxx>
> 
> The pixelclock detection of the adv7842 is precise enough to detect
> if the framerate is 60 Hz or 59.94 Hz (aka "reduced fps").
> 
> Implement this detection.
> 
> Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx>
> ---
>  drivers/media/i2c/adv7842.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c
> index 4f8fbdd00e35..999d621f5667 100644
> --- a/drivers/media/i2c/adv7842.c
> +++ b/drivers/media/i2c/adv7842.c
> @@ -1525,6 +1525,7 @@ static void adv7842_fill_optional_dv_timings_fields(struct v4l2_subdev *sd,
>  	v4l2_find_dv_timings_cap(timings, adv7842_get_dv_timings_cap(sd),
>  			is_digital_input(sd) ? 250000 : 1000000,
>  			adv7842_check_dv_timings, NULL);
> +	timings->bt.flags |= V4L2_DV_FL_CAN_DETECT_REDUCED_FPS;
>  }
>  
>  static int adv7842_query_dv_timings(struct v4l2_subdev *sd,
> @@ -1596,6 +1597,14 @@ static int adv7842_query_dv_timings(struct v4l2_subdev *sd,
>  			bt->il_vbackporch = 0;
>  		}
>  		adv7842_fill_optional_dv_timings_fields(sd, timings);
> +		if ((timings->bt.flags & V4L2_DV_FL_CAN_REDUCE_FPS) &&
> +		    freq < bt->pixelclock) {
> +			u32 reduced_freq = (bt->pixelclock / 1001) * 1000;

bt->pixelclock needs to be cast to u32 to avoid a 64 bit division.

> +			u32 delta_freq = abs(freq - reduced_freq);
> +
> +			if (delta_freq < (bt->pixelclock - reduced_freq) / 2)

Ditto.

(kbuild robot complained about this.)

	Hans

> +				timings->bt.flags |= V4L2_DV_FL_REDUCED_FPS;
> +		}
>  	} else {
>  		/* find format
>  		 * Since LCVS values are inaccurate [REF_03, p. 339-340],
> 




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux