[media] ad9389b: no monitor if EDID is wrong
authorMats Randgaard <matrandg@cisco.com>
Wed, 14 Aug 2013 12:23:48 +0000 (09:23 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Sat, 24 Aug 2013 07:24:58 +0000 (04:24 -0300)
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>
drivers/media/i2c/ad9389b.c

index 7e68d8f9676f066d7769947a8b99ee59de294d77..52384e83cde95a80c1484d161f37a70ac0b710f5 100644 (file)
@@ -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;