mirror of
https://github.com/X11Libre/xserver.git
synced 2026-10-26 01:59:57 +00:00
EDID: CEA extension support
Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
fab74d1081
commit
fc2ec95664
7 changed files with 935 additions and 429 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue