Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/dev/videomode/edid.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/dev/videomode/edid.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.9 retrieving revision 1.10 diff -u -p -r1.9 -r1.10 --- src/sys/dev/videomode/edid.c 2011/04/09 18:18:28 1.9 +++ src/sys/dev/videomode/edid.c 2011/04/09 20:53:39 1.10 @@ -1,4 +1,4 @@ -/* $NetBSD: edid.c,v 1.9 2011/04/09 18:18:28 jdc Exp $ */ +/* $NetBSD: edid.c,v 1.10 2011/04/09 20:53:39 christos Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: edid.c,v 1.9 2011/04/09 18:18:28 jdc Exp $"); +__KERNEL_RCSID(0, "$NetBSD: edid.c,v 1.10 2011/04/09 20:53:39 christos Exp $"); #include #include @@ -91,7 +91,7 @@ edid_findvendor(const char *vendor) for (n = 0; n < edid_nvendors; n++) if (memcmp(edid_vendors[n].vendor, vendor, 3) == 0) - return (edid_vendors[n].name); + return edid_vendors[n].name; #endif return NULL; } @@ -103,9 +103,9 @@ edid_findproduct(const char *vendor, uin int n; for (n = 0; n < edid_nproducts; n++) - if ((edid_products[n].product == product) && - (memcmp(edid_products[n].vendor, vendor, 3) == 0)) - return (edid_products[n].name); + if (edid_products[n].product == product && + memcmp(edid_products[n].vendor, vendor, 3) == 0) + return (edid_products[n].name; #endif /* EDIDVERBOSE */ return NULL; @@ -116,11 +116,11 @@ edid_strchomp(char *ptr) { for (;;) { switch (*ptr) { - case 0: + case '\0': return; case '\r': case '\n': - *ptr = 0; + *ptr = '\0'; return; } ptr++; @@ -264,8 +264,7 @@ edid_print(struct edid_info *edid) edid->edid_modes[i].hdisplay, edid->edid_modes[i].vdisplay, DIVIDE(DIVIDE(edid->edid_modes[i].dot_clock * 1000, - edid->edid_modes[i].htotal), - edid->edid_modes[i].vtotal)); + edid->edid_modes[i].htotal), edid->edid_modes[i].vtotal)); printf(" (%d %d %d %d %d %d %d", edid->edid_modes[i].dot_clock, edid->edid_modes[i].hsync_start, @@ -285,8 +284,8 @@ edid_print(struct edid_info *edid) edid->edid_preferred_mode->hdisplay, edid->edid_preferred_mode->vdisplay, DIVIDE(DIVIDE(edid->edid_preferred_mode->dot_clock * 1000, - edid->edid_preferred_mode->htotal), - edid->edid_preferred_mode->vtotal)); + edid->edid_preferred_mode->htotal), + edid->edid_preferred_mode->vtotal)); } static const struct videomode * @@ -312,9 +311,8 @@ edid_search_mode(struct edid_info *edid, mode->vdisplay == edid->edid_modes[i].vdisplay && refresh == DIVIDE(DIVIDE( edid->edid_modes[i].dot_clock * 1000, - edid->edid_modes[i].htotal), - edid->edid_modes[i].vtotal)) { - return &(edid->edid_modes[i]); + edid->edid_modes[i].htotal), edid->edid_modes[i].vtotal)) { + return &edid->edid_modes[i]; } } return NULL; @@ -351,13 +349,11 @@ edid_std_timing(uint8_t *data, struct vi f = EDID_STD_TIMING_VFREQ(data); /* first try to lookup the mode as a DMT timing */ - snprintf(name, sizeof (name), "%dx%dx%d", x, y, f); + snprintf(name, sizeof(name), "%dx%dx%d", x, y, f); if ((lookup = edid_mode_lookup_list(name)) != NULL) { *vmp = *lookup; - } - - /* failing that, calculate it using gtf */ - else { + } else { + /* failing that, calculate it using gtf */ /* * Hmm. I'm not using alternate GTF timings, which * could, in theory, be present. @@ -429,68 +425,53 @@ edid_block(struct edid_info *edid, uint8 struct videomode mode, *exist_mode; if (EDID_BLOCK_IS_DET_TIMING(data)) { - if (edid_det_timing(data, &mode)) { - /* Does this mode already exist? */ - exist_mode = edid_search_mode(edid, &mode); - if (exist_mode != NULL) { - memcpy(exist_mode, &mode, - sizeof(struct videomode)); - if (edid->edid_preferred_mode == NULL) { - edid->edid_preferred_mode = - exist_mode; - } - } else { - edid->edid_modes[edid->edid_nmodes] = mode; - if (edid->edid_preferred_mode == NULL) { - edid->edid_preferred_mode = - &edid->edid_modes[edid->edid_nmodes]; - } - edid->edid_nmodes++; - } + if (!edid_det_timing(data, &mode)) { + return; + /* Does this mode already exist? */ + exist_mode = edid_search_mode(edid, &mode); + if (exist_mode != NULL) { + *exist_mode = mode; + if (edid->edid_preferred_mode == NULL) + edid->edid_preferred_mode = exist_mode; + } else { + edid->edid_modes[edid->edid_nmodes] = mode; + if (edid->edid_preferred_mode == NULL) + edid->edid_preferred_mode = + &edid->edid_modes[edid->edid_nmodes]; + edid->edid_nmodes++; } return; } switch (EDID_BLOCK_TYPE(data)) { case EDID_DESC_BLOCK_TYPE_SERIAL: - memcpy(edid->edid_serial, - data + EDID_DESC_ASCII_DATA_OFFSET, + memcpy(edid->edid_serial, data + EDID_DESC_ASCII_DATA_OFFSET, EDID_DESC_ASCII_DATA_LEN); - edid->edid_serial[sizeof (edid->edid_serial) - 1] = 0; + edid->edid_serial[sizeof(edid->edid_serial) - 1] = 0; break; case EDID_DESC_BLOCK_TYPE_ASCII: - memcpy(edid->edid_comment, - data + EDID_DESC_ASCII_DATA_OFFSET, + memcpy(edid->edid_comment, data + EDID_DESC_ASCII_DATA_OFFSET, EDID_DESC_ASCII_DATA_LEN); - edid->edid_comment[sizeof (edid->edid_comment) - 1] = 0; + edid->edid_comment[sizeof(edid->edid_comment) - 1] = 0; break; case EDID_DESC_BLOCK_TYPE_RANGE: edid->edid_have_range = 1; - edid->edid_range.er_min_vfreq = - EDID_DESC_RANGE_MIN_VFREQ(data); - edid->edid_range.er_max_vfreq = - EDID_DESC_RANGE_MAX_VFREQ(data); - edid->edid_range.er_min_hfreq = - EDID_DESC_RANGE_MIN_HFREQ(data); - edid->edid_range.er_max_hfreq = - EDID_DESC_RANGE_MAX_HFREQ(data); - edid->edid_range.er_max_clock = - EDID_DESC_RANGE_MAX_CLOCK(data); - if (EDID_DESC_RANGE_HAVE_GTF2(data)) { - edid->edid_range.er_have_gtf2 = 1; - edid->edid_range.er_gtf2_hfreq = - EDID_DESC_RANGE_GTF2_HFREQ(data); - edid->edid_range.er_gtf2_c = - EDID_DESC_RANGE_GTF2_C(data); - edid->edid_range.er_gtf2_m = - EDID_DESC_RANGE_GTF2_M(data); - edid->edid_range.er_gtf2_j = - EDID_DESC_RANGE_GTF2_J(data); - edid->edid_range.er_gtf2_k = - EDID_DESC_RANGE_GTF2_K(data); - } + edid->edid_range.er_min_vfreq = EDID_DESC_RANGE_MIN_VFREQ(data); + edid->edid_range.er_max_vfreq = EDID_DESC_RANGE_MAX_VFREQ(data); + edid->edid_range.er_min_hfreq = EDID_DESC_RANGE_MIN_HFREQ(data); + edid->edid_range.er_max_hfreq = EDID_DESC_RANGE_MAX_HFREQ(data); + edid->edid_range.er_max_clock = EDID_DESC_RANGE_MAX_CLOCK(data); + if (!EDID_DESC_RANGE_HAVE_GTF2(data)) + break; + edid->edid_range.er_have_gtf2 = 1; + edid->edid_range.er_gtf2_hfreq = + EDID_DESC_RANGE_GTF2_HFREQ(data); + edid->edid_range.er_gtf2_c = EDID_DESC_RANGE_GTF2_C(data); + edid->edid_range.er_gtf2_m = EDID_DESC_RANGE_GTF2_M(data); + edid->edid_range.er_gtf2_j = EDID_DESC_RANGE_GTF2_J(data); + edid->edid_range.er_gtf2_k = EDID_DESC_RANGE_GTF2_K(data); break; case EDID_DESC_BLOCK_TYPE_NAME: @@ -549,20 +530,20 @@ edid_parse(uint8_t *data, struct edid_in (data[EDID_OFFSET_PRODUCT_ID + 1] << 8); name = edid_findvendor(edid->edid_vendor); - if (name != NULL) { - snprintf(edid->edid_vendorname, - sizeof (edid->edid_vendorname), "%s", name); - } - edid->edid_vendorname[sizeof (edid->edid_vendorname) - 1] = 0; + if (name != NULL) + strlcpy(edid->edid_vendorname, name, + sizeof(edid->edid_vendorname)); + else + edid->edid_vendorname[0] = '\0'; name = edid_findproduct(edid->edid_vendor, edid->edid_product); - if (name != NULL) { - snprintf(edid->edid_productname, - sizeof (edid->edid_productname), "%s", name); - } - edid->edid_productname[sizeof (edid->edid_productname) - 1] = 0; + if (name != NULL) + strlcpy(edid->edid_productname, name, + sizeof(edid->edid_productname)); + else + edid->edid_productname[0] = '\0'; - snprintf(edid->edid_serial, sizeof (edid->edid_serial), "%08x", + snprintf(edid->edid_serial, sizeof(edid->edid_serial), "%08x", EDID_SERIAL_NUMBER(data)); edid->edid_week = EDID_WEEK(data); @@ -651,7 +632,6 @@ edid_parse(uint8_t *data, struct edid_in mhz = (max_dotclock + 999) / 1000; if (edid->edid_have_range) { - if (mhz > edid->edid_range.er_max_clock) edid->edid_range.er_max_clock = mhz; } else