summaryrefslogtreecommitdiff
path: root/hw/xfree86/ddc/interpret_edid.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xfree86/ddc/interpret_edid.c')
-rw-r--r--hw/xfree86/ddc/interpret_edid.c521
1 files changed, 275 insertions, 246 deletions
diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c
index 46958f744..882a6b201 100644
--- a/hw/xfree86/ddc/interpret_edid.c
+++ b/hw/xfree86/ddc/interpret_edid.c
@@ -35,38 +35,38 @@
#include "xf86DDC.h"
#include <string.h>
-static void get_vendor_section(Uchar*, struct vendor *);
-static void get_version_section(Uchar*, struct edid_version *);
-static void get_display_section(Uchar*, struct disp_features *,
- struct edid_version *);
-static void get_established_timing_section(Uchar*, struct established_timings *);
-static void get_std_timing_section(Uchar*, struct std_timings *,
- struct edid_version *);
-static void fetch_detailed_block(Uchar *c, struct edid_version *ver,
+static void get_vendor_section(Uchar *, struct vendor *);
+static void get_version_section(Uchar *, struct edid_version *);
+static void get_display_section(Uchar *, struct disp_features *,
+ struct edid_version *);
+static void get_established_timing_section(Uchar *,
+ struct established_timings *);
+static void get_std_timing_section(Uchar *, struct std_timings *,
+ struct edid_version *);
+static void fetch_detailed_block(Uchar * c, struct edid_version *ver,
struct detailed_monitor_section *det_mon);
static void get_dt_md_section(Uchar *, struct edid_version *,
- struct detailed_monitor_section *det_mon);
+ struct detailed_monitor_section *det_mon);
static void copy_string(Uchar *, Uchar *);
static void get_dst_timing_section(Uchar *, struct std_timings *,
- struct edid_version *);
+ struct edid_version *);
static void get_monitor_ranges(Uchar *, struct monitor_ranges *);
static void get_whitepoint_section(Uchar *, struct whitePoints *);
-static void get_detailed_timing_section(Uchar*, struct detailed_timings *);
+static void get_detailed_timing_section(Uchar *, struct detailed_timings *);
static Bool validate_version(int scrnIndex, struct edid_version *);
static void
find_ranges_section(struct detailed_monitor_section *det, void *ranges)
{
- if (det->type == DS_RANGES && det->section.ranges.max_clock)
- *(struct monitor_ranges **)ranges = &det->section.ranges;
+ if (det->type == DS_RANGES && det->section.ranges.max_clock)
+ *(struct monitor_ranges **) ranges = &det->section.ranges;
}
static void
find_max_detailed_clock(struct detailed_monitor_section *det, void *ret)
{
if (det->type == DT) {
- *(int *)ret = max(*((int *)ret),
- det->section.d_timings.clock);
+ *(int *) ret = max(*((int *) ret), det->section.d_timings.clock);
}
}
@@ -82,15 +82,16 @@ handle_edid_quirks(xf86MonPtr m)
* see how well this works.
*/
- /* Try to find Monitor Range and max clock, then re-set range value*/
+ /* Try to find Monitor Range and max clock, then re-set range value */
xf86ForEachDetailedBlock(m, find_ranges_section, &ranges);
if (ranges && ranges->max_clock) {
int clock = 0;
+
xf86ForEachDetailedBlock(m, find_max_detailed_clock, &clock);
if (clock && (ranges->max_clock * 1e6 < clock)) {
xf86Msg(X_WARNING, "EDID timing clock %.2f exceeds claimed max "
"%dMHz, fixing\n", clock / 1.0e6, ranges->max_clock);
- ranges->max_clock = (clock+999999)/1e6;
+ ranges->max_clock = (clock + 999999) / 1e6;
}
}
}
@@ -101,20 +102,21 @@ struct det_hv_parameter {
float target_aspect;
};
-static void handle_detailed_hvsize(struct detailed_monitor_section *det_mon,
- void *data)
+static void
+handle_detailed_hvsize(struct detailed_monitor_section *det_mon, void *data)
{
- struct det_hv_parameter *p = (struct det_hv_parameter *)data;
+ struct det_hv_parameter *p = (struct det_hv_parameter *) data;
float timing_aspect;
if (det_mon->type == DT) {
struct detailed_timings *timing;
+
timing = &det_mon->section.d_timings;
if (!timing->v_size)
return;
- timing_aspect = (float)timing->h_size / timing->v_size;
+ timing_aspect = (float) timing->h_size / timing->v_size;
if (fabs(1 - (timing_aspect / p->target_aspect)) < 0.05) {
p->real_hsize = max(p->real_hsize, timing->h_size);
p->real_vsize = max(p->real_vsize, timing->v_size);
@@ -122,7 +124,8 @@ static void handle_detailed_hvsize(struct detailed_monitor_section *det_mon,
}
}
-static void encode_aspect_ratio(xf86MonPtr m)
+static void
+encode_aspect_ratio(xf86MonPtr m)
{
/*
* some monitors encode the aspect ratio instead of the physical size.
@@ -130,55 +133,60 @@ static void encode_aspect_ratio(xf86MonPtr m)
* ratio and use that to fill in the feature section.
*/
if ((m->features.hsize == 16 && m->features.vsize == 9) ||
- (m->features.hsize == 16 && m->features.vsize == 10) ||
- (m->features.hsize == 4 && m->features.vsize == 3) ||
- (m->features.hsize == 5 && m->features.vsize == 4)) {
+ (m->features.hsize == 16 && m->features.vsize == 10) ||
+ (m->features.hsize == 4 && m->features.vsize == 3) ||
+ (m->features.hsize == 5 && m->features.vsize == 4)) {
struct det_hv_parameter p;
+
p.real_hsize = 0;
p.real_vsize = 0;
- p.target_aspect = (float)m->features.hsize /m->features.vsize;
+ p.target_aspect = (float) m->features.hsize / m->features.vsize;
xf86ForEachDetailedBlock(m, handle_detailed_hvsize, &p);
- if (!p.real_hsize || !p.real_vsize) {
- m->features.hsize = m->features.vsize = 0;
- } else if ((m->features.hsize * 10 == p.real_hsize) &&
- (m->features.vsize * 10 == p.real_vsize)) {
- /* exact match is just unlikely, should do a better check though */
- m->features.hsize = m->features.vsize = 0;
- } else {
- /* convert mm to cm */
- m->features.hsize = (p.real_hsize + 5) / 10;
- m->features.vsize = (p.real_vsize + 5) / 10;
- }
-
- xf86Msg(X_INFO, "Quirked EDID physical size to %dx%d cm\n",
- m->features.hsize, m->features.vsize);
+ if (!p.real_hsize || !p.real_vsize) {
+ m->features.hsize = m->features.vsize = 0;
+ }
+ else if ((m->features.hsize * 10 == p.real_hsize) &&
+ (m->features.vsize * 10 == p.real_vsize)) {
+ /* exact match is just unlikely, should do a better check though */
+ m->features.hsize = m->features.vsize = 0;
+ }
+ else {
+ /* convert mm to cm */
+ m->features.hsize = (p.real_hsize + 5) / 10;
+ m->features.vsize = (p.real_vsize + 5) / 10;
+ }
+
+ xf86Msg(X_INFO, "Quirked EDID physical size to %dx%d cm\n",
+ m->features.hsize, m->features.vsize);
}
}
xf86MonPtr
-xf86InterpretEDID(int scrnIndex, Uchar *block)
+xf86InterpretEDID(int scrnIndex, Uchar * block)
{
xf86MonPtr m;
- if (!block) return NULL;
- if (! (m = xnfcalloc(sizeof(xf86Monitor),1))) return NULL;
+ if (!block)
+ return NULL;
+ if (!(m = xnfcalloc(sizeof(xf86Monitor), 1)))
+ return NULL;
m->scrnIndex = scrnIndex;
m->rawData = block;
- get_vendor_section(SECTION(VENDOR_SECTION,block),&m->vendor);
- get_version_section(SECTION(VERSION_SECTION,block),&m->ver);
- if (!validate_version(scrnIndex, &m->ver)) goto error;
- get_display_section(SECTION(DISPLAY_SECTION,block),&m->features,
- &m->ver);
- get_established_timing_section(SECTION(ESTABLISHED_TIMING_SECTION,block),
- &m->timings1);
- get_std_timing_section(SECTION(STD_TIMING_SECTION,block),m->timings2,
- &m->ver);
- get_dt_md_section(SECTION(DET_TIMING_SECTION,block),&m->ver, m->det_mon);
- m->no_sections = (int)*(char *)SECTION(NO_EDID,block);
+ get_vendor_section(SECTION(VENDOR_SECTION, block), &m->vendor);
+ get_version_section(SECTION(VERSION_SECTION, block), &m->ver);
+ if (!validate_version(scrnIndex, &m->ver))
+ goto error;
+ get_display_section(SECTION(DISPLAY_SECTION, block), &m->features, &m->ver);
+ get_established_timing_section(SECTION(ESTABLISHED_TIMING_SECTION, block),
+ &m->timings1);
+ get_std_timing_section(SECTION(STD_TIMING_SECTION, block), m->timings2,
+ &m->ver);
+ get_dt_md_section(SECTION(DET_TIMING_SECTION, block), &m->ver, m->det_mon);
+ m->no_sections = (int) *(char *) SECTION(NO_EDID, block);
handle_edid_quirks(m);
encode_aspect_ratio(m);
@@ -190,11 +198,12 @@ xf86InterpretEDID(int scrnIndex, Uchar *block)
return NULL;
}
-static int get_cea_detail_timing(Uchar *blk, xf86MonPtr mon,
- struct detailed_monitor_section *det_mon)
+static int
+get_cea_detail_timing(Uchar * blk, xf86MonPtr mon,
+ struct detailed_monitor_section *det_mon)
{
int dt_num;
- int dt_offset = ((struct cea_ext_body *)blk)->dt_offset;
+ int dt_offset = ((struct cea_ext_body *) blk)->dt_offset;
dt_num = 0;
@@ -202,19 +211,18 @@ static int get_cea_detail_timing(Uchar *blk, xf86MonPtr mon,
return dt_num;
for (; dt_offset < (CEA_EXT_MAX_DATA_OFFSET - DET_TIMING_INFO_LEN) &&
- dt_num < CEA_EXT_DET_TIMING_NUM;
- _NEXT_DT_MD_SECTION(dt_offset)) {
+ dt_num < CEA_EXT_DET_TIMING_NUM; _NEXT_DT_MD_SECTION(dt_offset)) {
fetch_detailed_block(blk + dt_offset, &mon->ver, det_mon + dt_num);
- dt_num = dt_num + 1 ;
+ dt_num = dt_num + 1;
}
return dt_num;
}
-static void handle_cea_detail_block(Uchar *ext, xf86MonPtr mon,
- handle_detailed_fn fn,
- void *data)
+static void
+handle_cea_detail_block(Uchar * ext, xf86MonPtr mon,
+ handle_detailed_fn fn, void *data)
{
int i;
struct detailed_monitor_section det_mon[CEA_EXT_DET_TIMING_NUM];
@@ -226,9 +234,8 @@ static void handle_cea_detail_block(Uchar *ext, xf86MonPtr mon,
fn(det_mon + i, data);
}
-void xf86ForEachDetailedBlock(xf86MonPtr mon,
- handle_detailed_fn fn,
- void *data)
+void
+xf86ForEachDetailedBlock(xf86MonPtr mon, handle_detailed_fn fn, void *data)
{
int i;
Uchar *ext;
@@ -241,7 +248,7 @@ void xf86ForEachDetailedBlock(xf86MonPtr mon,
for (i = 0; i < mon->no_sections; i++) {
ext = mon->rawData + EDID1_LEN * (i + 1);
- switch (ext[EXT_TAG]){
+ switch (ext[EXT_TAG]) {
case CEA_EXT:
handle_cea_detail_block(ext, mon, fn, data);
break;
@@ -249,39 +256,40 @@ void xf86ForEachDetailedBlock(xf86MonPtr mon,
case DI_EXT:
case LS_EXT:
case MI_EXT:
- break;
+ break;
}
}
}
static struct cea_data_block *
-extract_cea_data_block(Uchar *ext, int data_type)
+extract_cea_data_block(Uchar * ext, int data_type)
{
struct cea_ext_body *cea;
struct cea_data_block *data_collection;
struct cea_data_block *data_end;
- cea = (struct cea_ext_body *)ext;
+ cea = (struct cea_ext_body *) ext;
if (cea->dt_offset <= CEA_EXT_MIN_DATA_OFFSET)
return NULL;
data_collection = &cea->data_collection;
- data_end = (struct cea_data_block *)(cea->dt_offset + ext);
+ data_end = (struct cea_data_block *) (cea->dt_offset + ext);
- for ( ;data_collection < data_end;) {
+ for (; data_collection < data_end;) {
- if (data_type == data_collection->tag) {
- return data_collection;
- }
- data_collection = (void *)((unsigned char *)data_collection +
- data_collection->len + 1);
+ if (data_type == data_collection->tag) {
+ return data_collection;
+ }
+ data_collection = (void *) ((unsigned char *) data_collection +
+ data_collection->len + 1);
}
return NULL;
}
-static void handle_cea_video_block(Uchar *ext, handle_video_fn fn, void *data)
+static void
+handle_cea_video_block(Uchar * ext, handle_video_fn fn, void *data)
{
struct cea_video_block *video;
struct cea_video_block *video_end;
@@ -293,46 +301,45 @@ static void handle_cea_video_block(Uchar *ext, handle_video_fn fn, void *data)
video = &data_collection->u.video;
video_end = (struct cea_video_block *)
- ((Uchar *)video + data_collection->len);
+ ((Uchar *) video + data_collection->len);
for (; video < video_end; video = video + 1) {
- fn(video, data);
+ fn(video, data);
}
}
-void xf86ForEachVideoBlock(xf86MonPtr mon,
- handle_video_fn fn,
- void *data)
+void
+xf86ForEachVideoBlock(xf86MonPtr mon, handle_video_fn fn, void *data)
{
int i;
Uchar *ext;
if (mon == NULL)
- return;
+ return;
for (i = 0; i < mon->no_sections; i++) {
- ext = mon->rawData + EDID1_LEN * (i + 1);
- switch (ext[EXT_TAG]) {
- case CEA_EXT:
- handle_cea_video_block(ext, fn, data);
- break;
- case VTB_EXT:
- case DI_EXT:
- case LS_EXT:
- case MI_EXT:
- break;
- }
+ ext = mon->rawData + EDID1_LEN * (i + 1);
+ switch (ext[EXT_TAG]) {
+ case CEA_EXT:
+ handle_cea_video_block(ext, fn, data);
+ break;
+ case VTB_EXT:
+ case DI_EXT:
+ case LS_EXT:
+ case MI_EXT:
+ break;
+ }
}
}
xf86MonPtr
-xf86InterpretEEDID(int scrnIndex, Uchar *block)
+xf86InterpretEEDID(int scrnIndex, Uchar * block)
{
xf86MonPtr m;
m = xf86InterpretEDID(scrnIndex, block);
if (!m)
- return NULL;
+ return NULL;
/* extension parse */
@@ -340,45 +347,46 @@ xf86InterpretEEDID(int scrnIndex, Uchar *block)
}
static void
-get_vendor_section(Uchar *c, struct vendor *r)
+get_vendor_section(Uchar * c, struct vendor *r)
{
r->name[0] = L1;
r->name[1] = L2;
r->name[2] = L3;
r->name[3] = '\0';
-
+
r->prod_id = PROD_ID;
- r->serial = SERIAL_NO;
- r->week = WEEK;
- r->year = YEAR;
+ r->serial = SERIAL_NO;
+ r->week = WEEK;
+ r->year = YEAR;
}
-static void
-get_version_section(Uchar *c, struct edid_version *r)
+static void
+get_version_section(Uchar * c, struct edid_version *r)
{
- r->version = VERSION;
+ r->version = VERSION;
r->revision = REVISION;
}
-static void
-get_display_section(Uchar *c, struct disp_features *r,
- struct edid_version *v)
+static void
+get_display_section(Uchar * c, struct disp_features *r, struct edid_version *v)
{
r->input_type = INPUT_TYPE;
if (!DIGITAL(r->input_type)) {
- r->input_voltage = INPUT_VOLTAGE;
- r->input_setup = SETUP;
- r->input_sync = SYNC;
- } else if (v->revision == 2 || v->revision == 3) {
- r->input_dfp = DFP;
- } else if (v->revision >= 4) {
- r->input_bpc = BPC;
- r->input_interface = DIGITAL_INTERFACE;
+ r->input_voltage = INPUT_VOLTAGE;
+ r->input_setup = SETUP;
+ r->input_sync = SYNC;
+ }
+ else if (v->revision == 2 || v->revision == 3) {
+ r->input_dfp = DFP;
+ }
+ else if (v->revision >= 4) {
+ r->input_bpc = BPC;
+ r->input_interface = DIGITAL_INTERFACE;
}
r->hsize = HSIZE_MAX;
r->vsize = VSIZE_MAX;
r->gamma = GAMMA;
- r->dpms = DPMS;
+ r->dpms = DPMS;
r->display_type = DISPLAY_TYPE;
r->msc = MSC;
r->redx = REDX;
@@ -391,8 +399,8 @@ get_display_section(Uchar *c, struct disp_features *r,
r->whitey = WHITEY;
}
-static void
-get_established_timing_section(Uchar *c, struct established_timings *r)
+static void
+get_established_timing_section(Uchar * c, struct established_timings *r)
{
r->t1 = T1;
r->t2 = T2;
@@ -400,83 +408,100 @@ get_established_timing_section(Uchar *c, struct established_timings *r)
}
static void
-get_cvt_timing_section(Uchar *c, struct cvt_timings *r)
+get_cvt_timing_section(Uchar * c, struct cvt_timings *r)
{
int i;
for (i = 0; i < 4; i++) {
- if (c[0] && c[1] && c[2]) {
- r[i].height = (c[0] + ((c[1] & 0xF0) << 8) + 1) * 2;
- switch (c[1] & 0xc0) {
- case 0x00: r[i].width = r[i].height * 4 / 3; break;
- case 0x40: r[i].width = r[i].height * 16 / 9; break;
- case 0x80: r[i].width = r[i].height * 16 / 10; break;
- case 0xc0: r[i].width = r[i].height * 15 / 9; break;
- }
- switch (c[2] & 0x60) {
- case 0x00: r[i].rate = 50; break;
- case 0x20: r[i].rate = 60; break;
- case 0x40: r[i].rate = 75; break;
- case 0x60: r[i].rate = 85; break;
- }
- r[i].rates = c[2] & 0x1f;
- } else {
- return;
- }
- c += 3;
+ if (c[0] && c[1] && c[2]) {
+ r[i].height = (c[0] + ((c[1] & 0xF0) << 8) + 1) * 2;
+ switch (c[1] & 0xc0) {
+ case 0x00:
+ r[i].width = r[i].height * 4 / 3;
+ break;
+ case 0x40:
+ r[i].width = r[i].height * 16 / 9;
+ break;
+ case 0x80:
+ r[i].width = r[i].height * 16 / 10;
+ break;
+ case 0xc0:
+ r[i].width = r[i].height * 15 / 9;
+ break;
+ }
+ switch (c[2] & 0x60) {
+ case 0x00:
+ r[i].rate = 50;
+ break;
+ case 0x20:
+ r[i].rate = 60;
+ break;
+ case 0x40:
+ r[i].rate = 75;
+ break;
+ case 0x60:
+ r[i].rate = 85;
+ break;
+ }
+ r[i].rates = c[2] & 0x1f;
+ }
+ else {
+ return;
+ }
+ c += 3;
}
}
static void
-get_std_timing_section(Uchar *c, struct std_timings *r,
- struct edid_version *v)
+get_std_timing_section(Uchar * c, struct std_timings *r, struct edid_version *v)
{
int i;
- for (i=0;i<STD_TIMINGS;i++){
- if (VALID_TIMING) {
- r[i].hsize = HSIZE1;
- VSIZE1(r[i].vsize);
- r[i].refresh = REFRESH_R;
- r[i].id = STD_TIMING_ID;
- } else {
- r[i].hsize = r[i].vsize = r[i].refresh = r[i].id = 0;
- }
- NEXT_STD_TIMING;
+ for (i = 0; i < STD_TIMINGS; i++) {
+ if (VALID_TIMING) {
+ r[i].hsize = HSIZE1;
+ VSIZE1(r[i].vsize);
+ r[i].refresh = REFRESH_R;
+ r[i].id = STD_TIMING_ID;
+ }
+ else {
+ r[i].hsize = r[i].vsize = r[i].refresh = r[i].id = 0;
+ }
+ NEXT_STD_TIMING;
}
}
static const unsigned char empty_block[18];
static void
-fetch_detailed_block(Uchar *c, struct edid_version *ver,
+fetch_detailed_block(Uchar * c, struct edid_version *ver,
struct detailed_monitor_section *det_mon)
{
if (ver->version == 1 && ver->revision >= 1 && IS_MONITOR_DESC) {
switch (MONITOR_DESC_TYPE) {
case SERIAL_NUMBER:
det_mon->type = DS_SERIAL;
- copy_string(c,det_mon->section.serial);
+ copy_string(c, det_mon->section.serial);
break;
case ASCII_STR:
det_mon->type = DS_ASCII_STR;
- copy_string(c,det_mon->section.ascii_data);
+ copy_string(c, det_mon->section.ascii_data);
break;
case MONITOR_RANGES:
det_mon->type = DS_RANGES;
- get_monitor_ranges(c,&det_mon->section.ranges);
+ get_monitor_ranges(c, &det_mon->section.ranges);
break;
case MONITOR_NAME:
det_mon->type = DS_NAME;
- copy_string(c,det_mon->section.name);
+ copy_string(c, det_mon->section.name);
break;
case ADD_COLOR_POINT:
det_mon->type = DS_WHITE_P;
- get_whitepoint_section(c,det_mon->section.wp);
+ get_whitepoint_section(c, det_mon->section.wp);
break;
case ADD_STD_TIMINGS:
det_mon->type = DS_STD_TIMINGS;
- get_dst_timing_section(c,det_mon->section.std_t, ver);
+ get_dst_timing_section(c, det_mon->section.std_t, ver);
break;
case COLOR_MANAGEMENT_DATA:
det_mon->type = DS_CMD;
@@ -487,7 +512,7 @@ fetch_detailed_block(Uchar *c, struct edid_version *ver,
break;
case ADD_EST_TIMINGS:
det_mon->type = DS_EST_III;
- memcpy(det_mon->section.est_iii, c + 6, 6);
+ memcpy(det_mon->section.est_iii, c + 6, 6);
break;
case ADD_DUMMY:
det_mon->type = DS_DUMMY;
@@ -496,120 +521,125 @@ fetch_detailed_block(Uchar *c, struct edid_version *ver,
det_mon->type = DS_UNKOWN;
break;
}
- if (c[3] <= 0x0F && memcmp(c, empty_block, sizeof(empty_block))) {
+ if (c[3] <= 0x0F && memcmp(c, empty_block, sizeof(empty_block))) {
det_mon->type = DS_VENDOR + c[3];
}
- } else {
+ }
+ else {
det_mon->type = DT;
get_detailed_timing_section(c, &det_mon->section.d_timings);
}
}
static void
-get_dt_md_section(Uchar *c, struct edid_version *ver,
- struct detailed_monitor_section *det_mon)
+get_dt_md_section(Uchar * c, struct edid_version *ver,
+ struct detailed_monitor_section *det_mon)
{
int i;
- for (i=0; i < DET_TIMINGS; i++) {
+ for (i = 0; i < DET_TIMINGS; i++) {
fetch_detailed_block(c, ver, det_mon + i);
NEXT_DT_MD_SECTION;
}
}
static void
-copy_string(Uchar *c, Uchar *s)
+copy_string(Uchar * c, Uchar * s)
{
- int i;
- c = c + 5;
- for (i = 0; (i < 13 && *c != 0x0A); i++)
- *(s++) = *(c++);
- *s = 0;
- while (i-- && (*--s == 0x20)) *s = 0;
+ int i;
+
+ c = c + 5;
+ for (i = 0; (i < 13 && *c != 0x0A); i++)
+ *(s++) = *(c++);
+ *s = 0;
+ while (i-- && (*--s == 0x20))
+ *s = 0;
}
static void
-get_dst_timing_section(Uchar *c, struct std_timings *t,
- struct edid_version *v)
+get_dst_timing_section(Uchar * c, struct std_timings *t, struct edid_version *v)
{
- int j;
+ int j;
+
c = c + 5;
for (j = 0; j < 5; j++) {
- t[j].hsize = HSIZE1;
- VSIZE1(t[j].vsize);
- t[j].refresh = REFRESH_R;
- t[j].id = STD_TIMING_ID;
- NEXT_STD_TIMING;
+ t[j].hsize = HSIZE1;
+ VSIZE1(t[j].vsize);
+ t[j].refresh = REFRESH_R;
+ t[j].id = STD_TIMING_ID;
+ NEXT_STD_TIMING;
}
}
static void
-get_monitor_ranges(Uchar *c, struct monitor_ranges *r)
+get_monitor_ranges(Uchar * c, struct monitor_ranges *r)
{
r->min_v = MIN_V;
r->max_v = MAX_V;
r->min_h = MIN_H;
r->max_h = MAX_H;
r->max_clock = 0;
- if(MAX_CLOCK != 0xff) /* is specified? */
- r->max_clock = MAX_CLOCK * 10 + 5;
+ if (MAX_CLOCK != 0xff) /* is specified? */
+ r->max_clock = MAX_CLOCK * 10 + 5;
if (HAVE_2ND_GTF) {
- r->gtf_2nd_f = F_2ND_GTF;
- r->gtf_2nd_c = C_2ND_GTF;
- r->gtf_2nd_m = M_2ND_GTF;
- r->gtf_2nd_k = K_2ND_GTF;
- r->gtf_2nd_j = J_2ND_GTF;
- } else {
- r->gtf_2nd_f = 0;
+ r->gtf_2nd_f = F_2ND_GTF;
+ r->gtf_2nd_c = C_2ND_GTF;
+ r->gtf_2nd_m = M_2ND_GTF;
+ r->gtf_2nd_k = K_2ND_GTF;
+ r->gtf_2nd_j = J_2ND_GTF;
+ }
+ else {
+ r->gtf_2nd_f = 0;
}
if (HAVE_CVT) {
- r->max_clock_khz = MAX_CLOCK_KHZ;
- r->max_clock = r->max_clock_khz / 1000;
- r->maxwidth = MAXWIDTH;
- r->supported_aspect = SUPPORTED_ASPECT;
- r->preferred_aspect = PREFERRED_ASPECT;
- r->supported_blanking = SUPPORTED_BLANKING;
- r->supported_scaling = SUPPORTED_SCALING;
- r->preferred_refresh = PREFERRED_REFRESH;
- } else {
- r->max_clock_khz = 0;
+ r->max_clock_khz = MAX_CLOCK_KHZ;
+ r->max_clock = r->max_clock_khz / 1000;
+ r->maxwidth = MAXWIDTH;
+ r->supported_aspect = SUPPORTED_ASPECT;
+ r->preferred_aspect = PREFERRED_ASPECT;
+ r->supported_blanking = SUPPORTED_BLANKING;
+ r->supported_scaling = SUPPORTED_SCALING;
+ r->preferred_refresh = PREFERRED_REFRESH;
+ }
+ else {
+ r->max_clock_khz = 0;
}
}
static void
-get_whitepoint_section(Uchar *c, struct whitePoints *wp)
+get_whitepoint_section(Uchar * c, struct whitePoints *wp)
{
wp[0].white_x = WHITEX1;
wp[0].white_y = WHITEY1;
wp[1].white_x = WHITEX2;
wp[1].white_y = WHITEY2;
- wp[0].index = WHITE_INDEX1;
- wp[1].index = WHITE_INDEX2;
- wp[0].white_gamma = WHITE_GAMMA1;
- wp[1].white_gamma = WHITE_GAMMA2;
+ wp[0].index = WHITE_INDEX1;
+ wp[1].index = WHITE_INDEX2;
+ wp[0].white_gamma = WHITE_GAMMA1;
+ wp[1].white_gamma = WHITE_GAMMA2;
}
static void
-get_detailed_timing_section(Uchar *c, struct detailed_timings *r)
+get_detailed_timing_section(Uchar * c, struct detailed_timings *r)
{
- r->clock = PIXEL_CLOCK;
- r->h_active = H_ACTIVE;
- r->h_blanking = H_BLANK;
- r->v_active = V_ACTIVE;
- r->v_blanking = V_BLANK;
- r->h_sync_off = H_SYNC_OFF;
- r->h_sync_width = H_SYNC_WIDTH;
- r->v_sync_off = V_SYNC_OFF;
- r->v_sync_width = V_SYNC_WIDTH;
- r->h_size = H_SIZE;
- r->v_size = V_SIZE;
- r->h_border = H_BORDER;
- r->v_border = V_BORDER;
- r->interlaced = INTERLACED;
- r->stereo = STEREO;
- r->stereo_1 = STEREO1;
- r->sync = SYNC_T;
- r->misc = MISC;
+ r->clock = PIXEL_CLOCK;
+ r->h_active = H_ACTIVE;
+ r->h_blanking = H_BLANK;
+ r->v_active = V_ACTIVE;
+ r->v_blanking = V_BLANK;
+ r->h_sync_off = H_SYNC_OFF;
+ r->h_sync_width = H_SYNC_WIDTH;
+ r->v_sync_off = V_SYNC_OFF;
+ r->v_sync_width = V_SYNC_WIDTH;
+ r->h_size = H_SIZE;
+ r->v_size = V_SIZE;
+ r->h_border = H_BORDER;
+ r->v_border = V_BORDER;
+ r->interlaced = INTERLACED;
+ r->stereo = STEREO;
+ r->stereo_1 = STEREO1;
+ r->sync = SYNC_T;
+ r->misc = MISC;
}
#define MAX_EDID_MINOR 4
@@ -618,15 +648,14 @@ static Bool
validate_version(int scrnIndex, struct edid_version *r)
{
if (r->version != 1) {
- xf86DrvMsg(scrnIndex, X_ERROR, "Unknown EDID version %d\n",
- r->version);
- return FALSE;
+ xf86DrvMsg(scrnIndex, X_ERROR, "Unknown EDID version %d\n", r->version);
+ return FALSE;
}
if (r->revision > MAX_EDID_MINOR)
- xf86DrvMsg(scrnIndex, X_WARNING,
- "Assuming version 1.%d is compatible with 1.%d\n",
- r->revision, MAX_EDID_MINOR);
+ xf86DrvMsg(scrnIndex, X_WARNING,
+ "Assuming version 1.%d is compatible with 1.%d\n",
+ r->revision, MAX_EDID_MINOR);
return TRUE;
}
@@ -641,43 +670,43 @@ xf86MonitorIsHDMI(xf86MonPtr mon)
char *edid = NULL;
if (!mon)
- return FALSE;
+ return FALSE;
if (!(mon->flags & EDID_COMPLETE_RAWDATA))
- return FALSE;
+ return FALSE;
if (!mon->no_sections)
- return FALSE;
+ return FALSE;
- edid = (char *)mon->rawData;
+ edid = (char *) mon->rawData;
if (!edid)
- return FALSE;
+ return FALSE;
/* find the CEA extension block */
for (i = 1; i <= mon->no_sections; i++)
- if (edid[i * 128] == 0x02)
- break;
+ if (edid[i * 128] == 0x02)
+ break;
if (i == mon->no_sections + 1)
- return FALSE;
+ return FALSE;
edid += (i * 128);
version = edid[1];
offset = edid[2];
if (version < 3 || offset < 4)
- return FALSE;
+ return FALSE;
/* walk the cea data blocks */
for (i = 4; i < offset; i += (edid[i] & 0x1f) + 1) {
- char *x = edid + i;
+ char *x = edid + i;
- /* find a vendor specific block */
- if ((x[0] & 0xe0) >> 5 == 0x03) {
- int oui = (x[3] << 16) + (x[2] << 8) + x[1];
+ /* find a vendor specific block */
+ if ((x[0] & 0xe0) >> 5 == 0x03) {
+ int oui = (x[3] << 16) + (x[2] << 8) + x[1];
- /* find the HDMI vendor OUI */
- if (oui == 0x000c03)
- return TRUE;
- }
+ /* find the HDMI vendor OUI */
+ if (oui == 0x000c03)
+ return TRUE;
+ }
}
/* guess it's not HDMI after all */