diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 2d4e538..2fee3a7 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -9,7 +9,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.3.0.0 -Release: 35%{?dist} +Release: 36%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -80,7 +80,7 @@ Patch2016: xserver-1.3.0-xorg-conf-man-randr-update.patch Patch2017: xserver-1.3.0-update-quirks.patch Patch2018: xserver-1.3.0-late-sigusr1.patch Patch2019: xserver-1.3.0-yet-more-vt-ioctl-hate.patch - +Patch2020: xserver-1.3.0-update-edid-quirks.patch # assorted PCI layer shenanigans. oh the pain. Patch2500: xorg-x11-server-1.2.99-unbreak-domain.patch @@ -349,7 +349,8 @@ Xserver source code needed to build VNC server (Xvnc) %patch2016 -p1 -b .document-randr %patch2017 -p1 -b .update-quirk %patch2018 -p1 -b .sigusr1 -%patch2019 -p1 -b .jx +%patch2019 -p1 -b .vt-ioctl-hate +%patch2020 -p1 -b .more-quirk-patch %patch2500 -p1 -b .unbreak-domains %patch2501 -p1 -b .pci-bus-count @@ -625,6 +626,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Fri Nov 30 2007 Dave Airlie 1.3.0.0-36 +- xserver-1.3.0-update-edid-quirks.patch - updates quirk from master server + * Thu Nov 29 2007 Dave Airlie 1.3.0.0-35 - xserver-1.3.0-ignore-extra-entity.patch - if a driver doesn't support secondary entities, don't fatal error just ignore and keep going diff --git a/xserver-1.3.0-update-edid-quirks.patch b/xserver-1.3.0-update-edid-quirks.patch new file mode 100644 index 0000000..edfbd9d --- /dev/null +++ b/xserver-1.3.0-update-edid-quirks.patch @@ -0,0 +1,105 @@ +diff -up xorg-server-1.3.0.0/hw/xfree86/modes/xf86EdidModes.c.da xorg-server-1.3.0.0/hw/xfree86/modes/xf86EdidModes.c +--- xorg-server-1.3.0.0/hw/xfree86/modes/xf86EdidModes.c.da 2007-11-30 13:28:41.000000000 +1000 ++++ xorg-server-1.3.0.0/hw/xfree86/modes/xf86EdidModes.c 2007-11-30 13:29:10.000000000 +1000 +@@ -64,13 +64,16 @@ typedef enum { + * maximum size and use that. + */ + DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE = 1 << 5, ++ /* Monitor forgot to set the first detailed is preferred bit. */ ++ DDC_QUIRK_FIRST_DETAILED_PREFERRED = 1 << 6, + } ddc_quirk_t; + + static Bool quirk_prefer_large_60 (int scrnIndex, xf86MonPtr DDC) + { + /* Belinea 10 15 55 */ + if (memcmp (DDC->vendor.name, "MAX", 4) == 0 && +- DDC->vendor.prod_id == 1516) ++ ((DDC->vendor.prod_id == 1516) || ++ (DDC->vendor.prod_id == 0x77e))) + return TRUE; + + /* Acer AL1706 */ +@@ -147,6 +150,16 @@ static Bool quirk_135_clock_too_high (in + return FALSE; + } + ++static Bool quirk_first_detailed_preferred (int scrnIndex, xf86MonPtr DDC) ++{ ++ /* Philips 107p5 CRT. Reported on xorg@ with pastebin. */ ++ if (memcmp (DDC->vendor.name, "PHL", 4) == 0 && ++ DDC->vendor.prod_id == 57364) ++ return TRUE; ++ ++ return FALSE; ++} ++ + typedef struct { + Bool (*detect) (int scrnIndex, xf86MonPtr DDC); + ddc_quirk_t quirk; +@@ -178,6 +191,10 @@ static const ddc_quirk_map_t ddc_quirks[ + quirk_detailed_use_maximum_size, DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE, + "Detailed timings give sizes in cm." + }, ++ { ++ quirk_first_detailed_preferred, DDC_QUIRK_FIRST_DETAILED_PREFERRED, ++ "First detailed timing was not marked as preferred." ++ }, + { + NULL, DDC_QUIRK_NONE, + "No known quirks" +@@ -257,7 +274,7 @@ DDCModesFromStandardTiming(int scrnIndex + */ + static DisplayModePtr + DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing, +- int preferred, ddc_quirk_t quirks) ++ Bool preferred, ddc_quirk_t quirks) + { + DisplayModePtr Mode; + +@@ -470,9 +487,10 @@ xf86DDCSetPreferredRefresh(int scrnIndex + _X_EXPORT DisplayModePtr + xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) + { +- int preferred, i; ++ int i; + DisplayModePtr Modes = NULL, Mode; + ddc_quirk_t quirks; ++ Bool preferred; + + xf86DrvMsg (scrnIndex, X_INFO, "EDID vendor \"%s\", prod id %d\n", + DDC->vendor.name, DDC->vendor.prod_id); +@@ -480,8 +498,10 @@ xf86DDCGetModes(int scrnIndex, xf86MonPt + quirks = xf86DDCDetectQuirks(scrnIndex, DDC, TRUE); + + preferred = PREFERRED_TIMING_MODE(DDC->features.msc); +- if (quirks & DDC_QUIRK_PREFER_LARGE_60) +- preferred = 0; ++ if (quirks & DDC_QUIRK_FIRST_DETAILED_PREFERRED) ++ preferred = TRUE; ++ if (quirks & (DDC_QUIRK_PREFER_LARGE_60 | DDC_QUIRK_PREFER_LARGE_75)) ++ preferred = FALSE; + + for (i = 0; i < DET_TIMINGS; i++) { + struct detailed_monitor_section *det_mon = &DDC->det_mon[i]; +@@ -492,7 +512,7 @@ xf86DDCGetModes(int scrnIndex, xf86MonPt + &det_mon->section.d_timings, + preferred, + quirks); +- preferred = 0; ++ preferred = FALSE; + Modes = xf86ModesAdd(Modes, Mode); + break; + case DS_STD_TIMINGS: +@@ -538,10 +558,8 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr + + Monitor->DDC = DDC; + +- if (Monitor->widthmm <= 0 && Monitor->heightmm <= 0) { +- Monitor->widthmm = 10 * DDC->features.hsize; +- Monitor->heightmm = 10 * DDC->features.vsize; +- } ++ Monitor->widthmm = 10 * DDC->features.hsize; ++ Monitor->heightmm = 10 * DDC->features.vsize; + + /* If this is a digital display, then we can use reduced blanking */ + if (DDC->features.input_type)