Loading drivers/media/i2c/adv7842.c +41 −0 Original line number Original line Diff line number Diff line Loading @@ -1910,6 +1910,46 @@ static int adv7842_isr(struct v4l2_subdev *sd, u32 status, bool *handled) return 0; return 0; } } static int adv7842_get_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid) { struct adv7842_state *state = to_state(sd); u8 *data = NULL; if (edid->pad > ADV7842_EDID_PORT_VGA) return -EINVAL; if (edid->blocks == 0) return -EINVAL; if (edid->blocks > 2) return -EINVAL; if (edid->start_block > 1) return -EINVAL; if (edid->start_block == 1) edid->blocks = 1; if (!edid->edid) return -EINVAL; switch (edid->pad) { case ADV7842_EDID_PORT_A: case ADV7842_EDID_PORT_B: if (state->hdmi_edid.present & (0x04 << edid->pad)) data = state->hdmi_edid.edid; break; case ADV7842_EDID_PORT_VGA: if (state->vga_edid.present) data = state->vga_edid.edid; break; default: return -EINVAL; } if (!data) return -ENODATA; memcpy(edid->edid, data + edid->start_block * 128, edid->blocks * 128); return 0; } static int adv7842_set_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *e) static int adv7842_set_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *e) { { struct adv7842_state *state = to_state(sd); struct adv7842_state *state = to_state(sd); Loading Loading @@ -2722,6 +2762,7 @@ static const struct v4l2_subdev_video_ops adv7842_video_ops = { }; }; static const struct v4l2_subdev_pad_ops adv7842_pad_ops = { static const struct v4l2_subdev_pad_ops adv7842_pad_ops = { .get_edid = adv7842_get_edid, .set_edid = adv7842_set_edid, .set_edid = adv7842_set_edid, }; }; Loading Loading
drivers/media/i2c/adv7842.c +41 −0 Original line number Original line Diff line number Diff line Loading @@ -1910,6 +1910,46 @@ static int adv7842_isr(struct v4l2_subdev *sd, u32 status, bool *handled) return 0; return 0; } } static int adv7842_get_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid) { struct adv7842_state *state = to_state(sd); u8 *data = NULL; if (edid->pad > ADV7842_EDID_PORT_VGA) return -EINVAL; if (edid->blocks == 0) return -EINVAL; if (edid->blocks > 2) return -EINVAL; if (edid->start_block > 1) return -EINVAL; if (edid->start_block == 1) edid->blocks = 1; if (!edid->edid) return -EINVAL; switch (edid->pad) { case ADV7842_EDID_PORT_A: case ADV7842_EDID_PORT_B: if (state->hdmi_edid.present & (0x04 << edid->pad)) data = state->hdmi_edid.edid; break; case ADV7842_EDID_PORT_VGA: if (state->vga_edid.present) data = state->vga_edid.edid; break; default: return -EINVAL; } if (!data) return -ENODATA; memcpy(edid->edid, data + edid->start_block * 128, edid->blocks * 128); return 0; } static int adv7842_set_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *e) static int adv7842_set_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *e) { { struct adv7842_state *state = to_state(sd); struct adv7842_state *state = to_state(sd); Loading Loading @@ -2722,6 +2762,7 @@ static const struct v4l2_subdev_video_ops adv7842_video_ops = { }; }; static const struct v4l2_subdev_pad_ops adv7842_pad_ops = { static const struct v4l2_subdev_pad_ops adv7842_pad_ops = { .get_edid = adv7842_get_edid, .set_edid = adv7842_set_edid, .set_edid = adv7842_set_edid, }; }; Loading