[media] ad9389b: no monitor if EDID is wrong
state->have_monitor is set to false if the EDID that is read from the monitor has too many segments or wrong CRC. Signed-off-by: Mats Randgaard <matrandg@cisco.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
70028fe646
commit
7be4f88811
|
@ -1019,6 +1019,7 @@ static bool ad9389b_check_edid_status(struct v4l2_subdev *sd)
|
|||
segment = ad9389b_rd(sd, 0xc4);
|
||||
if (segment >= EDID_MAX_SEGM) {
|
||||
v4l2_err(sd, "edid segment number too big\n");
|
||||
state->have_monitor = false;
|
||||
return false;
|
||||
}
|
||||
v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
|
||||
|
@ -1032,6 +1033,8 @@ static bool ad9389b_check_edid_status(struct v4l2_subdev *sd)
|
|||
}
|
||||
if (!edid_segment_verify_crc(sd, segment)) {
|
||||
/* edid crc error, force reread of edid segment */
|
||||
v4l2_err(sd, "%s: edid crc error\n", __func__);
|
||||
state->have_monitor = false;
|
||||
ad9389b_s_power(sd, false);
|
||||
ad9389b_s_power(sd, true);
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue