Lines Matching refs:edid

145 static int check_edid(unsigned char *edid)  in check_edid()  argument
147 unsigned char *block = edid + ID_MANUFACTURER_NAME, manufacturer[4]; in check_edid()
170 if (edid[i] != edid_v1_header[i]) { in check_edid()
177 b = edid + EDID_STRUCT_DISPLAY; in check_edid()
184 b = edid + DETAILED_TIMING_DESCRIPTIONS_START; in check_edid()
207 static void fix_edid(unsigned char *edid, int fix) in fix_edid() argument
215 memcpy(edid, edid_v1_header, 8); in fix_edid()
219 b = edid + EDID_STRUCT_DISPLAY; in fix_edid()
221 edid[127] += 0x80; in fix_edid()
225 b = edid + DETAILED_TIMING_DESCRIPTIONS_START; in fix_edid()
249 csum += edid[i]; in fix_edid()
251 edid[127] = 256 - csum; in fix_edid()
256 static int edid_checksum(unsigned char *edid) in edid_checksum() argument
259 int i, err = 0, fix = check_edid(edid); in edid_checksum()
262 fix_edid(edid, fix); in edid_checksum()
265 csum += edid[i]; in edid_checksum()
266 all_null |= edid[i]; in edid_checksum()
277 static int edid_check_header(unsigned char *edid) in edid_check_header() argument
279 int i, err = 1, fix = check_edid(edid); in edid_check_header()
282 fix_edid(edid, fix); in edid_check_header()
285 if (edid[i] != edid_v1_header[i]) in edid_check_header()
615 static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize, in fb_create_modedb() argument
627 if (edid == NULL || !edid_checksum(edid) || in fb_create_modedb()
628 !edid_check_header(edid)) { in fb_create_modedb()
633 ver = edid[EDID_STRUCT_VERSION]; in fb_create_modedb()
634 rev = edid[EDID_STRUCT_REVISION]; in fb_create_modedb()
639 block = edid + DETAILED_TIMING_DESCRIPTIONS_START; in fb_create_modedb()
652 block = edid + ESTABLISHED_TIMING_1; in fb_create_modedb()
656 block = edid + STD_TIMING_DESCRIPTIONS_START; in fb_create_modedb()
660 block = edid + DETAILED_TIMING_DESCRIPTIONS_START; in fb_create_modedb()
694 static int fb_get_monitor_limits(unsigned char *edid, struct fb_monspecs *specs) in fb_get_monitor_limits() argument
699 block = edid + DETAILED_TIMING_DESCRIPTIONS_START; in fb_get_monitor_limits()
723 modes = fb_create_modedb(edid, &num_modes, specs); in fb_get_monitor_limits()
775 static void get_monspecs(unsigned char *edid, struct fb_monspecs *specs) in get_monspecs() argument
779 block = edid + EDID_STRUCT_DISPLAY; in get_monspecs()
781 fb_get_monitor_limits(edid, specs); in get_monspecs()
893 int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var) in fb_parse_edid() argument
898 if (edid == NULL || var == NULL) in fb_parse_edid()
901 if (!(edid_checksum(edid))) in fb_parse_edid()
904 if (!(edid_check_header(edid))) in fb_parse_edid()
907 block = edid + DETAILED_TIMING_DESCRIPTIONS_START; in fb_parse_edid()
936 void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs) in fb_edid_to_monspecs() argument
941 if (edid == NULL) in fb_edid_to_monspecs()
944 if (!(edid_checksum(edid))) in fb_edid_to_monspecs()
947 if (!(edid_check_header(edid))) in fb_edid_to_monspecs()
952 specs->version = edid[EDID_STRUCT_VERSION]; in fb_edid_to_monspecs()
953 specs->revision = edid[EDID_STRUCT_REVISION]; in fb_edid_to_monspecs()
961 parse_vendor_block(edid + ID_MANUFACTURER_NAME, specs); in fb_edid_to_monspecs()
963 block = edid + DETAILED_TIMING_DESCRIPTIONS_START; in fb_edid_to_monspecs()
978 get_monspecs(edid, specs); in fb_edid_to_monspecs()
980 specs->modedb = fb_create_modedb(edid, &specs->modedb_len, specs); in fb_edid_to_monspecs()
1005 void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs) in fb_edid_add_monspecs() argument
1013 if (!edid) in fb_edid_add_monspecs()
1016 if (!edid_checksum(edid)) in fb_edid_add_monspecs()
1019 if (edid[0] != 0x2 || in fb_edid_add_monspecs()
1020 edid[2] < 4 || edid[2] > 128 - DETAILED_TIMING_DESCRIPTION_SIZE) in fb_edid_add_monspecs()
1025 while (pos < edid[2]) { in fb_edid_add_monspecs()
1026 u8 len = edid[pos] & 0x1f, type = (edid[pos] >> 5) & 7; in fb_edid_add_monspecs()
1030 u8 idx = edid[pos + i] & 0x7f; in fb_edid_add_monspecs()
1033 edid[pos + i] & 0x80 ? "" : "on-n", idx); in fb_edid_add_monspecs()
1038 if (edid[pos + 1] == 3 && edid[pos + 2] == 0xc && in fb_edid_add_monspecs()
1039 edid[pos + 3] == 0) in fb_edid_add_monspecs()
1045 block = edid + edid[2]; in fb_edid_add_monspecs()
1049 for (i = 0; i < (128 - edid[2]) / DETAILED_TIMING_DESCRIPTION_SIZE; in fb_edid_add_monspecs()
1052 edt[num++] = block - edid; in fb_edid_add_monspecs()
1067 get_detailed_timing(edid + edt[i - specs->modedb_len], &m[i]); in fb_edid_add_monspecs()
1493 int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var) in fb_parse_edid() argument
1497 void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs) in fb_edid_to_monspecs() argument
1501 void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs) in fb_edid_add_monspecs() argument
1588 unsigned char *edid = NULL; in fb_firmware_edid() local
1597 edid = edid_info.dummy; in fb_firmware_edid()
1599 return edid; in fb_firmware_edid()