Lines Matching refs:edid
180 u8 edid[256]; member
183 } edid; member
570 adv76xx_set_hpd(state, state->edid.present); in adv76xx_delayed_work_enable_hotplug()
1973 static int adv76xx_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid) in adv76xx_get_edid() argument
1978 memset(edid->reserved, 0, sizeof(edid->reserved)); in adv76xx_get_edid()
1980 switch (edid->pad) { in adv76xx_get_edid()
1985 if (state->edid.present & (1 << edid->pad)) in adv76xx_get_edid()
1986 data = state->edid.edid; in adv76xx_get_edid()
1992 if (edid->start_block == 0 && edid->blocks == 0) { in adv76xx_get_edid()
1993 edid->blocks = data ? state->edid.blocks : 0; in adv76xx_get_edid()
2000 if (edid->start_block >= state->edid.blocks) in adv76xx_get_edid()
2003 if (edid->start_block + edid->blocks > state->edid.blocks) in adv76xx_get_edid()
2004 edid->blocks = state->edid.blocks - edid->start_block; in adv76xx_get_edid()
2006 memcpy(edid->edid, data + edid->start_block * 128, edid->blocks * 128); in adv76xx_get_edid()
2011 static int get_edid_spa_location(const u8 *edid) in get_edid_spa_location() argument
2015 if ((edid[0x7e] != 1) || in get_edid_spa_location()
2016 (edid[0x80] != 0x02) || in get_edid_spa_location()
2017 (edid[0x81] != 0x03)) { in get_edid_spa_location()
2022 d = edid[0x82] & 0x7f; in get_edid_spa_location()
2028 u8 tag = edid[i] >> 5; in get_edid_spa_location()
2029 u8 len = edid[i] & 0x1f; in get_edid_spa_location()
2039 static int adv76xx_set_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid) in adv76xx_set_edid() argument
2047 memset(edid->reserved, 0, sizeof(edid->reserved)); in adv76xx_set_edid()
2049 if (edid->pad > ADV7604_PAD_HDMI_PORT_D) in adv76xx_set_edid()
2051 if (edid->start_block != 0) in adv76xx_set_edid()
2053 if (edid->blocks == 0) { in adv76xx_set_edid()
2055 state->edid.present &= ~(1 << edid->pad); in adv76xx_set_edid()
2056 adv76xx_set_hpd(state, state->edid.present); in adv76xx_set_edid()
2057 rep_write_clr_set(sd, info->edid_enable_reg, 0x0f, state->edid.present); in adv76xx_set_edid()
2063 if (!state->edid.present) in adv76xx_set_edid()
2064 state->edid.blocks = 0; in adv76xx_set_edid()
2067 __func__, edid->pad, state->edid.present); in adv76xx_set_edid()
2070 if (edid->blocks > 2) { in adv76xx_set_edid()
2071 edid->blocks = 2; in adv76xx_set_edid()
2076 __func__, edid->pad, state->edid.present); in adv76xx_set_edid()
2083 spa_loc = get_edid_spa_location(edid->edid); in adv76xx_set_edid()
2087 switch (edid->pad) { in adv76xx_set_edid()
2089 state->spa_port_a[0] = edid->edid[spa_loc]; in adv76xx_set_edid()
2090 state->spa_port_a[1] = edid->edid[spa_loc + 1]; in adv76xx_set_edid()
2093 rep_write(sd, 0x70, edid->edid[spa_loc]); in adv76xx_set_edid()
2094 rep_write(sd, 0x71, edid->edid[spa_loc + 1]); in adv76xx_set_edid()
2097 rep_write(sd, 0x72, edid->edid[spa_loc]); in adv76xx_set_edid()
2098 rep_write(sd, 0x73, edid->edid[spa_loc + 1]); in adv76xx_set_edid()
2101 rep_write(sd, 0x74, edid->edid[spa_loc]); in adv76xx_set_edid()
2102 rep_write(sd, 0x75, edid->edid[spa_loc + 1]); in adv76xx_set_edid()
2116 edid->edid[spa_loc] = state->spa_port_a[0]; in adv76xx_set_edid()
2117 edid->edid[spa_loc + 1] = state->spa_port_a[1]; in adv76xx_set_edid()
2119 memcpy(state->edid.edid, edid->edid, 128 * edid->blocks); in adv76xx_set_edid()
2120 state->edid.blocks = edid->blocks; in adv76xx_set_edid()
2121 state->aspect_ratio = v4l2_calc_aspect_ratio(edid->edid[0x15], in adv76xx_set_edid()
2122 edid->edid[0x16]); in adv76xx_set_edid()
2123 state->edid.present |= 1 << edid->pad; in adv76xx_set_edid()
2125 err = edid_write_block(sd, 128 * edid->blocks, state->edid.edid); in adv76xx_set_edid()
2127 v4l2_err(sd, "error %d writing edid pad %d\n", err, edid->pad); in adv76xx_set_edid()
2133 rep_write_clr_set(sd, info->edid_enable_reg, 0x0f, state->edid.present); in adv76xx_set_edid()
2136 if (rep_read(sd, info->edid_status_reg) & state->edid.present) in adv76xx_set_edid()
2141 v4l2_err(sd, "error enabling edid (0x%x)\n", state->edid.present); in adv76xx_set_edid()