|
@@ -1566,10 +1566,24 @@ static int adv76xx_query_dv_timings(struct v4l2_subdev *sd,
|
|
|
V4L2_DV_INTERLACED : V4L2_DV_PROGRESSIVE;
|
|
|
|
|
|
if (is_digital_input(sd)) {
|
|
|
+ bool hdmi_signal = hdmi_read(sd, 0x05) & 0x80;
|
|
|
+ u8 vic = 0;
|
|
|
+ u32 w, h;
|
|
|
+
|
|
|
+ w = hdmi_read16(sd, 0x07, info->linewidth_mask);
|
|
|
+ h = hdmi_read16(sd, 0x09, info->field0_height_mask);
|
|
|
+
|
|
|
+ if (hdmi_signal && (io_read(sd, 0x60) & 1))
|
|
|
+ vic = infoframe_read(sd, 0x04);
|
|
|
+
|
|
|
+ if (vic && v4l2_find_dv_timings_cea861_vic(timings, vic) &&
|
|
|
+ bt->width == w && bt->height == h)
|
|
|
+ goto found;
|
|
|
+
|
|
|
timings->type = V4L2_DV_BT_656_1120;
|
|
|
|
|
|
- bt->width = hdmi_read16(sd, 0x07, info->linewidth_mask);
|
|
|
- bt->height = hdmi_read16(sd, 0x09, info->field0_height_mask);
|
|
|
+ bt->width = w;
|
|
|
+ bt->height = h;
|
|
|
bt->pixelclock = info->read_hdmi_pixelclock(sd);
|
|
|
bt->hfrontporch = hdmi_read16(sd, 0x20, info->hfrontporch_mask);
|
|
|
bt->hsync = hdmi_read16(sd, 0x22, info->hsync_mask);
|