|
@@ -209,7 +209,7 @@ bool v4l2_find_dv_timings_cap(struct v4l2_dv_timings *t,
|
|
|
if (v4l2_valid_dv_timings(v4l2_dv_timings_presets + i, cap,
|
|
|
fnc, fnc_handle) &&
|
|
|
v4l2_match_dv_timings(t, v4l2_dv_timings_presets + i,
|
|
|
- pclock_delta)) {
|
|
|
+ pclock_delta, false)) {
|
|
|
u32 flags = t->bt.flags & V4L2_DV_FL_REDUCED_FPS;
|
|
|
|
|
|
*t = v4l2_dv_timings_presets[i];
|
|
@@ -228,12 +228,14 @@ EXPORT_SYMBOL_GPL(v4l2_find_dv_timings_cap);
|
|
|
* @t1 - compare this v4l2_dv_timings struct...
|
|
|
* @t2 - with this struct.
|
|
|
* @pclock_delta - the allowed pixelclock deviation.
|
|
|
+ * @match_reduced_fps - if true, then fail if V4L2_DV_FL_REDUCED_FPS does not
|
|
|
+ * match.
|
|
|
*
|
|
|
* Compare t1 with t2 with a given margin of error for the pixelclock.
|
|
|
*/
|
|
|
bool v4l2_match_dv_timings(const struct v4l2_dv_timings *t1,
|
|
|
const struct v4l2_dv_timings *t2,
|
|
|
- unsigned pclock_delta)
|
|
|
+ unsigned pclock_delta, bool match_reduced_fps)
|
|
|
{
|
|
|
if (t1->type != t2->type || t1->type != V4L2_DV_BT_656_1120)
|
|
|
return false;
|
|
@@ -249,6 +251,9 @@ bool v4l2_match_dv_timings(const struct v4l2_dv_timings *t1,
|
|
|
t1->bt.vfrontporch == t2->bt.vfrontporch &&
|
|
|
t1->bt.vsync == t2->bt.vsync &&
|
|
|
t1->bt.vbackporch == t2->bt.vbackporch &&
|
|
|
+ (!match_reduced_fps ||
|
|
|
+ (t1->bt.flags & V4L2_DV_FL_REDUCED_FPS) ==
|
|
|
+ (t2->bt.flags & V4L2_DV_FL_REDUCED_FPS)) &&
|
|
|
(!t1->bt.interlaced ||
|
|
|
(t1->bt.il_vfrontporch == t2->bt.il_vfrontporch &&
|
|
|
t1->bt.il_vsync == t2->bt.il_vsync &&
|