Lines Matching refs:edid
154 u8 edid[256];
157 } edid;
628 adv7604_set_hpd(state, state->edid.present);
1995 static int adv7604_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
2000 if (edid->pad > ADV7604_PAD_HDMI_PORT_D)
2002 if (edid->blocks == 0)
2004 if (edid->blocks > 2)
2006 if (edid->start_block > 1)
2008 if (edid->start_block == 1)
2009 edid->blocks = 1;
2011 if (edid->blocks > state->edid.blocks)
2012 edid->blocks = state->edid.blocks;
2014 switch (edid->pad) {
2019 if (state->edid.present & (1 << edid->pad))
2020 data = state->edid.edid;
2029 memcpy(edid->edid,
2030 data + edid->start_block * 128,
2031 edid->blocks * 128);
2035 static int get_edid_spa_location(const u8 *edid)
2039 if ((edid[0x7e] != 1) ||
2040 (edid[0x80] != 0x02) ||
2041 (edid[0x81] != 0x03)) {
2046 d = edid[0x82] & 0x7f;
2052 u8 tag = edid[i] >> 5;
2053 u8 len = edid[i] & 0x1f;
2063 static int adv7604_set_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
2071 if (edid->pad > ADV7604_PAD_HDMI_PORT_D)
2073 if (edid->start_block != 0)
2075 if (edid->blocks == 0) {
2077 state->edid.present &= ~(1 << edid->pad);
2078 adv7604_set_hpd(state, state->edid.present);
2079 rep_write_clr_set(sd, info->edid_enable_reg, 0x0f, state->edid.present);
2085 if (!state->edid.present)
2086 state->edid.blocks = 0;
2088 v4l2_dbg(2, debug, sd, "%s: clear EDID pad %d, edid.present = 0x%x\n",
2089 __func__, edid->pad, state->edid.present);
2092 if (edid->blocks > 2) {
2093 edid->blocks = 2;
2097 v4l2_dbg(2, debug, sd, "%s: write EDID pad %d, edid.present = 0x%x\n",
2098 __func__, edid->pad, state->edid.present);
2105 spa_loc = get_edid_spa_location(edid->edid);
2109 switch (edid->pad) {
2111 state->spa_port_a[0] = edid->edid[spa_loc];
2112 state->spa_port_a[1] = edid->edid[spa_loc + 1];
2115 rep_write(sd, 0x70, edid->edid[spa_loc]);
2116 rep_write(sd, 0x71, edid->edid[spa_loc + 1]);
2119 rep_write(sd, 0x72, edid->edid[spa_loc]);
2120 rep_write(sd, 0x73, edid->edid[spa_loc + 1]);
2123 rep_write(sd, 0x74, edid->edid[spa_loc]);
2124 rep_write(sd, 0x75, edid->edid[spa_loc + 1]);
2138 edid->edid[spa_loc] = state->spa_port_a[0];
2139 edid->edid[spa_loc + 1] = state->spa_port_a[1];
2141 memcpy(state->edid.edid, edid->edid, 128 * edid->blocks);
2142 state->edid.blocks = edid->blocks;
2143 state->aspect_ratio = v4l2_calc_aspect_ratio(edid->edid[0x15],
2144 edid->edid[0x16]);
2145 state->edid.present |= 1 << edid->pad;
2147 err = edid_write_block(sd, 128 * edid->blocks, state->edid.edid);
2149 v4l2_err(sd, "error %d writing edid pad %d\n", err, edid->pad);
2155 rep_write_clr_set(sd, info->edid_enable_reg, 0x0f, state->edid.present);
2158 if (rep_read(sd, info->edid_status_reg) & state->edid.present)
2163 v4l2_err(sd, "error enabling edid (0x%x)\n", state->edid.present);