Lines Matching refs:edid
186 u8 edid[ADV76XX_MAX_EDID_BLOCKS * 128]; member
189 } edid; member
546 adv76xx_set_hpd(state, state->edid.present); in adv76xx_delayed_work_enable_hotplug()
2272 static int adv76xx_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid) in adv76xx_get_edid() argument
2277 memset(edid->reserved, 0, sizeof(edid->reserved)); in adv76xx_get_edid()
2279 switch (edid->pad) { in adv76xx_get_edid()
2284 if (state->edid.present & (1 << edid->pad)) in adv76xx_get_edid()
2285 data = state->edid.edid; in adv76xx_get_edid()
2291 if (edid->start_block == 0 && edid->blocks == 0) { in adv76xx_get_edid()
2292 edid->blocks = data ? state->edid.blocks : 0; in adv76xx_get_edid()
2299 if (edid->start_block >= state->edid.blocks) in adv76xx_get_edid()
2302 if (edid->start_block + edid->blocks > state->edid.blocks) in adv76xx_get_edid()
2303 edid->blocks = state->edid.blocks - edid->start_block; in adv76xx_get_edid()
2305 memcpy(edid->edid, data + edid->start_block * 128, edid->blocks * 128); in adv76xx_get_edid()
2310 static int adv76xx_set_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid) in adv76xx_set_edid() argument
2319 memset(edid->reserved, 0, sizeof(edid->reserved)); in adv76xx_set_edid()
2321 if (edid->pad > ADV7604_PAD_HDMI_PORT_D) in adv76xx_set_edid()
2323 if (edid->start_block != 0) in adv76xx_set_edid()
2325 if (edid->blocks == 0) { in adv76xx_set_edid()
2327 state->edid.present &= ~(1 << edid->pad); in adv76xx_set_edid()
2328 adv76xx_set_hpd(state, state->edid.present); in adv76xx_set_edid()
2329 rep_write_clr_set(sd, info->edid_enable_reg, 0x0f, state->edid.present); in adv76xx_set_edid()
2335 if (!state->edid.present) { in adv76xx_set_edid()
2336 state->edid.blocks = 0; in adv76xx_set_edid()
2341 __func__, edid->pad, state->edid.present); in adv76xx_set_edid()
2344 if (edid->blocks > ADV76XX_MAX_EDID_BLOCKS) { in adv76xx_set_edid()
2345 edid->blocks = ADV76XX_MAX_EDID_BLOCKS; in adv76xx_set_edid()
2349 pa = v4l2_get_edid_phys_addr(edid->edid, edid->blocks * 128, &spa_loc); in adv76xx_set_edid()
2360 pa = (edid->edid[spa_loc] << 8) | edid->edid[spa_loc + 1]; in adv76xx_set_edid()
2364 __func__, edid->pad, state->edid.present); in adv76xx_set_edid()
2371 switch (edid->pad) { in adv76xx_set_edid()
2400 edid->edid[spa_loc] = state->spa_port_a[0]; in adv76xx_set_edid()
2401 edid->edid[spa_loc + 1] = state->spa_port_a[1]; in adv76xx_set_edid()
2403 memcpy(state->edid.edid, edid->edid, 128 * edid->blocks); in adv76xx_set_edid()
2404 state->edid.blocks = edid->blocks; in adv76xx_set_edid()
2405 state->aspect_ratio = v4l2_calc_aspect_ratio(edid->edid[0x15], in adv76xx_set_edid()
2406 edid->edid[0x16]); in adv76xx_set_edid()
2407 state->edid.present |= 1 << edid->pad; in adv76xx_set_edid()
2411 err = edid_write_block(sd, 128 * min(edid->blocks, 2U), state->edid.edid); in adv76xx_set_edid()
2413 v4l2_err(sd, "error %d writing edid pad %d\n", err, edid->pad); in adv76xx_set_edid()
2416 if (edid->blocks > 2) { in adv76xx_set_edid()
2420 err = edid_write_block(sd, 128 * (edid->blocks - 2), in adv76xx_set_edid()
2421 state->edid.edid + 256); in adv76xx_set_edid()
2424 err, edid->pad); in adv76xx_set_edid()
2431 rep_write_clr_set(sd, info->edid_enable_reg, 0x0f, state->edid.present); in adv76xx_set_edid()
2434 if (rep_read(sd, info->edid_status_reg) & state->edid.present) in adv76xx_set_edid()
2439 v4l2_err(sd, "error enabling edid (0x%x)\n", state->edid.present); in adv76xx_set_edid()