Lines 638-645
Link Here
|
638 |
xf86UnloadSubModule(pDDCModule); |
638 |
xf86UnloadSubModule(pDDCModule); |
639 |
} |
639 |
} |
640 |
|
640 |
|
641 |
if ((pScrn->monitor->DDC = pVesa->monitor) != NULL) |
641 |
/* UNCLEAN */ |
642 |
xf86SetDDCproperties(pScrn, pVesa->monitor); |
642 |
do { |
|
|
643 |
Bool had_cfg_ranges, have_ddc_ranges; |
644 |
|
645 |
had_cfg_ranges = (pScrn->monitor->nHsync || pScrn->monitor->nVrefresh); |
646 |
if ((pScrn->monitor->DDC = pVesa->monitor) != NULL) |
647 |
xf86SetDDCproperties(pScrn, pVesa->monitor); |
648 |
have_ddc_ranges = (pScrn->monitor->nHsync || pScrn->monitor->nVrefresh); |
649 |
|
650 |
if (have_ddc_ranges && !had_cfg_ranges) { |
651 |
int i; |
652 |
for (i = 0; i < DET_TIMINGS; i++) { |
653 |
if (pVesa->monitor->det_mon[i].type == DS_RANGES) |
654 |
break; |
655 |
} |
656 |
if (i < DET_TIMINGS) |
657 |
break; |
658 |
|
659 |
/* |
660 |
* DDC added ranges, but they're inferred from the modes, not |
661 |
* copied from a range section. So in the worst case, where it's |
662 |
* not a range but a single frequency, stretch things out to be |
663 |
* a range. Panels with only one mode listed in DDC will |
664 |
* otherwise probably not match any VESA modes. Hooray for |
665 |
* conformance. |
666 |
*/ |
667 |
if (pScrn->monitor->hsync[0].lo == pScrn->monitor->hsync[0].hi |
668 |
&& pScrn->monitor->hsync[0].lo > 31.5) |
669 |
pScrn->monitor->hsync[0].lo = 31.5; |
670 |
if (pScrn->monitor->vrefresh[0].lo == pScrn->monitor->vrefresh[0].hi |
671 |
&& pScrn->monitor->vrefresh[0].lo > 50.0) |
672 |
pScrn->monitor->vrefresh[0].lo = 50; |
673 |
} |
674 |
} while (0); |
643 |
|
675 |
|
644 |
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, DEBUG_VERB, |
676 |
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, DEBUG_VERB, |
645 |
"Searching for matching VESA mode(s):\n"); |
677 |
"Searching for matching VESA mode(s):\n"); |