[go: nahoru, domu]

Lines Matching refs:edid

33 #include <video/edid.h>
40 #include "../edid.h"
149 static int check_edid(unsigned char *edid)
151 unsigned char *block = edid + ID_MANUFACTURER_NAME, manufacturer[4];
174 if (edid[i] != edid_v1_header[i]) {
181 b = edid + EDID_STRUCT_DISPLAY;
188 b = edid + DETAILED_TIMING_DESCRIPTIONS_START;
211 static void fix_edid(unsigned char *edid, int fix)
219 memcpy(edid, edid_v1_header, 8);
223 b = edid + EDID_STRUCT_DISPLAY;
225 edid[127] += 0x80;
229 b = edid + DETAILED_TIMING_DESCRIPTIONS_START;
253 csum += edid[i];
255 edid[127] = 256 - csum;
260 static int edid_checksum(unsigned char *edid)
263 int i, err = 0, fix = check_edid(edid);
266 fix_edid(edid, fix);
269 csum += edid[i];
270 all_null |= edid[i];
281 static int edid_check_header(unsigned char *edid)
283 int i, err = 1, fix = check_edid(edid);
286 fix_edid(edid, fix);
289 if (edid[i] != edid_v1_header[i])
595 * @edid: EDID data
604 static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize)
611 ver = edid[EDID_STRUCT_VERSION];
612 rev = edid[EDID_STRUCT_REVISION];
618 if (edid == NULL || !edid_checksum(edid) ||
619 !edid_check_header(edid)) {
627 block = edid + DETAILED_TIMING_DESCRIPTIONS_START;
640 block = edid + ESTABLISHED_TIMING_1;
644 block = edid + STD_TIMING_DESCRIPTIONS_START;
648 block = edid + DETAILED_TIMING_DESCRIPTIONS_START;
681 static int fb_get_monitor_limits(unsigned char *edid, struct fb_monspecs *specs)
686 block = edid + DETAILED_TIMING_DESCRIPTIONS_START;
710 modes = fb_create_modedb(edid, &num_modes);
762 static void get_monspecs(unsigned char *edid, struct fb_monspecs *specs)
766 block = edid + EDID_STRUCT_DISPLAY;
768 fb_get_monitor_limits(edid, specs);
880 int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var)
885 if (edid == NULL || var == NULL)
888 if (!(edid_checksum(edid)))
891 if (!(edid_check_header(edid)))
894 block = edid + DETAILED_TIMING_DESCRIPTIONS_START;
923 void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs)
928 if (edid == NULL)
931 if (!(edid_checksum(edid)))
934 if (!(edid_check_header(edid)))
939 specs->version = edid[EDID_STRUCT_VERSION];
940 specs->revision = edid[EDID_STRUCT_REVISION];
948 parse_vendor_block(edid + ID_MANUFACTURER_NAME, specs);
950 block = edid + DETAILED_TIMING_DESCRIPTIONS_START;
965 get_monspecs(edid, specs);
967 specs->modedb = fb_create_modedb(edid, &specs->modedb_len);
989 * @edid: 128 byte array with an E-EDID block
992 void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs)
1000 if (!edid)
1003 if (!edid_checksum(edid))
1006 if (edid[0] != 0x2 ||
1007 edid[2] < 4 || edid[2] > 128 - DETAILED_TIMING_DESCRIPTION_SIZE)
1012 while (pos < edid[2]) {
1013 u8 len = edid[pos] & 0x1f, type = (edid[pos] >> 5) & 7;
1017 u8 idx = edid[pos + i] & 0x7f;
1020 edid[pos + i] & 0x80 ? "" : "on-n", idx);
1025 if (edid[pos + 1] == 3 && edid[pos + 2] == 0xc &&
1026 edid[pos + 3] == 0)
1032 block = edid + edid[2];
1036 for (i = 0; i < (128 - edid[2]) / DETAILED_TIMING_DESCRIPTION_SIZE;
1039 edt[num++] = block - edid;
1054 get_detailed_timing(edid + edt[i - specs->modedb_len], &m[i]);
1478 int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var)
1482 void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs)
1486 void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs)
1573 unsigned char *edid = NULL;
1582 edid = edid_info.dummy;
1584 return edid;