[Intel-gfx] [PATCH i-g-t 1/2] lib/kms: Turn the based_edid into a template
ville.syrjala at linux.intel.com
ville.syrjala at linux.intel.com
Fri Dec 4 06:08:29 PST 2015
From: Ville Syrjälä <ville.syrjala at linux.intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
lib/Makefile.sources | 1 +
lib/igt_edid_template.h | 74 ++++++++++++++++++++++++++++++++++++++++
lib/igt_kms.c | 90 +++++++++++--------------------------------------
3 files changed, 95 insertions(+), 70 deletions(-)
create mode 100644 lib/igt_edid_template.h
diff --git a/lib/Makefile.sources b/lib/Makefile.sources
index cb20f030cbec..4999868052b1 100644
--- a/lib/Makefile.sources
+++ b/lib/Makefile.sources
@@ -11,6 +11,7 @@ libintel_tools_la_SOURCES = \
igt_debugfs.h \
igt_aux.c \
igt_aux.h \
+ igt_edid_template.h \
igt_gt.c \
igt_gt.h \
igt_stats.c \
diff --git a/lib/igt_edid_template.h b/lib/igt_edid_template.h
new file mode 100644
index 000000000000..de421e080a88
--- /dev/null
+++ b/lib/igt_edid_template.h
@@ -0,0 +1,74 @@
+#define GAMMA(x) (((x) * 100) - 100)
+
+#define MANUFACTURER_ID(a, b, c) (a - '@') << 2 | (b - '@') >> 3, \
+ (b - '@') << 5 | (c - '@')
+
+
+#define ab(x, y) ((x) & 0xff), ((y) & 0xff), (((x) & 0xf00) >> 4) | (((y) & 0xf00) >> 8)
+#define op(ho, hp, vo, vp) ((ho) & 0xff), ((hp) & 0xff), \
+ (((vo) & 0xf) << 4) | ((vp) & 0xf), \
+ (((ho) & 0x300) >> 2) | (((hp) & 0x300) >> 4) \
+ | (((vo) & 0x30) >> 2) | ((vp) & 0x30 >> 4)
+
+static unsigned char EDID_NAME[EDID_LENGTH] = {
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, /* header */
+ MANUFACTURER_ID('I', 'G', 'T'),
+ /* product code, serial number, week and year of manufacture */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, /* edid version (1.3) */
+ /* basic display parameters */
+ /* digital display, maximum horizontal image size, maximum vertical
+ * image size, gamma, features: RGB 4:4:4, native pixel format and
+ * refresh rate in descriptor 1 */
+ 0x80, HSIZE, VSIZE, GAMMA(2.20), 0x02,
+ /* chromaticity coordinates */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* established timings: 640x480 60Hz, 800x600 60Hz, 1024x768 60Hz */
+ 0x21, 0x08, 0x00,
+ /* standard timings */
+ 0xd1, 0xc0, /* 1920x1080 60Hz */
+ 0x81, 0xc0, /* 1280x720 60Hz */
+ 0x61, 0x40, /* 1024x768 60Hz */
+ 0x45, 0x40, /* 800x600 60Hz */
+ 0x31, 0x40, /* 640x480 60Hz */
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ /* descriptor 1 (preferred timing) */
+ (CLOCK / 10) & 0x00ff, ((CLOCK / 10) & 0xff00) >> 8,
+ ab(HACTIVE, HBLANK), ab(VACTIVE, VBLANK),
+ op(HOFFSET, HPULSE, VOFFSET, VPULSE),
+ ab(HSIZE * 10, VSIZE * 10),
+ 0x00, 0x00, 0x00,
+ /* descriptor 2 (monitor range limits) */
+ 0x00, 0x00, 0x00, 0xfd, 0x00,
+ VFREQ - 1, VFREQ + 1, /* minimum, maximum vertical field rate */
+ (CLOCK / (HACTIVE + HBLANK)) - 1, /* minimum horizontal line rate */
+ (CLOCK / (HACTIVE + HBLANK)) + 1, /* maximum horizontal line rate */
+ (CLOCK / 10000) + 1, /* maximum pixel clock rate */
+ 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ /* descriptor 3 (name descriptor) */
+ 0x00, 0x00, 0x00, 0xfc, 0x00, 'I', 'G', 'T', 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ /* descriptor 4 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* extensions, checksum */
+ 0x00, 0x00
+};
+
+#undef EDID_NAME
+#undef VFREQ
+#undef CLOCK
+#undef HACTIVE
+#undef HBLANK
+#undef VACTIVE
+#undef VBLANK
+#undef HOFFSET
+#undef HPULSE
+#undef VOFFSET
+#undef VPULSE
+#undef HSIZE
+#undef VSIZE
+#undef GAMMA
+#undef MANUFACTURER_ID
+#undef ab
+#undef op
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index fd4f05e81f3d..da49f5676641 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -53,6 +53,23 @@
#define MAX_CONNECTORS 32
static char *forced_connectors[MAX_CONNECTORS + 1];
+static void update_edid_csum(unsigned char *edid)
+{
+ int i, sum = 0;
+ struct tm *tm;
+ time_t t;
+
+ /* year of manufacture */
+ t = time(NULL);
+ tm = localtime(&t);
+ edid[17] = tm->tm_year - 90;
+
+ /* calculate checksum */
+ for (i = 0; i < 127; i++) {
+ sum = sum + edid[i];
+ }
+ edid[127] = 256 - sum;
+}
#define VFREQ 60
#define CLOCK 148500
@@ -68,62 +85,8 @@ static char *forced_connectors[MAX_CONNECTORS + 1];
#define HSIZE 52
#define VSIZE 30
-#define GAMMA(x) (x * 100) - 100
-
-#define MANUFACTURER_ID(a, b, c) (a - '@') << 2 | (b - '@') >> 3, \
- (b - '@') << 5 | (c - '@')
-
-
-#define ab(x, y) (x & 0xff), (y & 0xff), ((x & 0xf00) >> 4) | ((y & 0xf00) >> 8)
-#define op(ho, hp, vo, vp) (ho & 0xff), (hp & 0xff), \
- ((vo & 0xf) << 4) | (vp & 0xf), \
- ((ho & 0x300) >> 2) | ((hp & 0x300) >> 4) \
- | ((vo & 0x30) >> 2) | (vp & 0x30 >> 4)
-
-static unsigned char base_edid[EDID_LENGTH] = {
- 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, /* header */
- MANUFACTURER_ID('I', 'G', 'T'),
- /* product code, serial number, week and year of manufacture */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x03, /* edid version (1.3) */
- /* basic display parameters */
- /* digital display, maximum horizontal image size, maximum vertical
- * image size, gamma, features: RGB 4:4:4, native pixel format and
- * refresh rate in descriptor 1 */
- 0x80, HSIZE, VSIZE, GAMMA(2.20), 0x02,
- /* chromaticity coordinates */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* established timings: 640x480 60Hz, 800x600 60Hz, 1024x768 60Hz */
- 0x21, 0x08, 0x00,
- /* standard timings */
- 0xd1, 0xc0, /* 1920x1080 60Hz */
- 0x81, 0xc0, /* 1280x720 60Hz */
- 0x61, 0x40, /* 1024x768 60Hz */
- 0x45, 0x40, /* 800x600 60Hz */
- 0x31, 0x40, /* 640x480 60Hz */
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- /* descriptor 1 (preferred timing) */
- (CLOCK / 10) & 0x00ff, ((CLOCK / 10) & 0xff00) >> 8,
- ab(HACTIVE, HBLANK), ab(VACTIVE, VBLANK),
- op(HOFFSET, HPULSE, VOFFSET, VPULSE),
- ab(HSIZE * 10, VSIZE * 10),
- 0x00, 0x00, 0x00,
- /* descriptor 2 (monitor range limits) */
- 0x00, 0x00, 0x00, 0xfd, 0x00,
- VFREQ - 1, VFREQ + 1, /* minimum, maximum vertical field rate */
- (CLOCK / (HACTIVE + HBLANK)) - 1, /* minimum horizontal line rate */
- (CLOCK / (HACTIVE + HBLANK)) + 1, /* maximum horizontal line rate */
- (CLOCK / 10000) + 1, /* maximum pixel clock rate */
- 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- /* descriptor 3 (name descriptor) */
- 0x00, 0x00, 0x00, 0xfc, 0x00, 'I', 'G', 'T', 0x0a,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- /* descriptor 4 */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* extensions, checksum */
- 0x00, 0x00
-};
+#define EDID_NAME base_edid
+#include "igt_edid_template.h"
/**
* igt_kms_get_base_edid:
@@ -143,20 +106,7 @@ static unsigned char base_edid[EDID_LENGTH] = {
*/
const unsigned char* igt_kms_get_base_edid(void)
{
- int i, sum = 0;
- struct tm *tm;
- time_t t;
-
- /* year of manufacture */
- t = time(NULL);
- tm = localtime(&t);
- base_edid[17] = tm->tm_year - 90;
-
- /* calculate checksum */
- for (i = 0; i < 127; i++) {
- sum = sum + base_edid[i];
- }
- base_edid[127] = 256 - sum;
+ update_edid_csum(base_edid);
return base_edid;
}
--
2.4.10
More information about the Intel-gfx
mailing list