diff options
author | Ma Ling <ling.ma@intel.com> | 2009-02-18 17:41:26 +0800 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2009-10-29 14:04:55 -0400 |
commit | fc2ec95664d55f45f77f1ebb039a7c17a1fcdaa3 (patch) | |
tree | d60e3d7be0efaeaa85eca961ae0247f4ef894b2d /hw/xfree86/common/xf86Configure.c | |
parent | fab74d1081270fb8f1d231e6e10d10aa33e164da (diff) |
EDID: CEA extension support
Reviewed-by: Adam Jackson <ajax@redhat.com>
Diffstat (limited to 'hw/xfree86/common/xf86Configure.c')
-rw-r--r-- | hw/xfree86/common/xf86Configure.c | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c index 3b7828a3f..2df6b4ec3 100644 --- a/hw/xfree86/common/xf86Configure.c +++ b/hw/xfree86/common/xf86Configure.c @@ -544,6 +544,36 @@ configureMonitorSection (int screennum) return ptr; } +/* Initialize Configure Monitor from Detailed Timing Block */ +static void handle_detailed_input(struct detailed_monitor_section *det_mon, + void *data) +{ + XF86ConfMonitorPtr ptr = (XF86ConfMonitorPtr) data; + + switch (det_mon->type) { + case DS_NAME: + ptr->mon_modelname = realloc(ptr->mon_modelname, + strlen((char*)(det_mon->section.name)) + + 1); + strcpy(ptr->mon_modelname, + (char*)(det_mon->section.name)); + break; + case DS_RANGES: + ptr->mon_hsync[ptr->mon_n_hsync].lo = + det_mon->section.ranges.min_h; + ptr->mon_hsync[ptr->mon_n_hsync].hi = + det_mon->section.ranges.max_h; + ptr->mon_n_vrefresh = 1; + ptr->mon_vrefresh[ptr->mon_n_hsync].lo = + det_mon->section.ranges.min_v; + ptr->mon_vrefresh[ptr->mon_n_hsync].hi = + det_mon->section.ranges.max_v; + ptr->mon_n_hsync++; + default: + break; + } +} + static XF86ConfMonitorPtr configureDDCMonitorSection (int screennum) { @@ -590,30 +620,8 @@ configureDDCMonitorSection (int screennum) } #endif /* def CONFIGURE_DISPLAYSIZE */ - for (i=0;i<4;i++) { - switch (ConfiguredMonitor->det_mon[i].type) { - case DS_NAME: - ptr->mon_modelname = realloc(ptr->mon_modelname, - strlen((char*)(ConfiguredMonitor->det_mon[i].section.name)) - + 1); - strcpy(ptr->mon_modelname, - (char*)(ConfiguredMonitor->det_mon[i].section.name)); - break; - case DS_RANGES: - ptr->mon_hsync[ptr->mon_n_hsync].lo = - ConfiguredMonitor->det_mon[i].section.ranges.min_h; - ptr->mon_hsync[ptr->mon_n_hsync].hi = - ConfiguredMonitor->det_mon[i].section.ranges.max_h; - ptr->mon_n_vrefresh = 1; - ptr->mon_vrefresh[ptr->mon_n_hsync].lo = - ConfiguredMonitor->det_mon[i].section.ranges.min_v; - ptr->mon_vrefresh[ptr->mon_n_hsync].hi = - ConfiguredMonitor->det_mon[i].section.ranges.max_v; - ptr->mon_n_hsync++; - default: - break; - } - } + xf86ForEachDetailedBlock(ConfiguredMonitor, handle_detailed_input, + ptr); if (ConfiguredMonitor->features.dpms) { ptr->mon_option_lst = xf86addNewOption(ptr->mon_option_lst, xstrdup("DPMS"), NULL); |