diff --git a/src/i830.h b/src/i830.h index 512938c..2b6b7a3 100644 --- a/src/i830.h +++ b/src/i830.h @@ -865,6 +865,7 @@ extern const int I830CopyROP[16]; #define QUIRK_IGNORE_MACMINI_LVDS 0x00000004 #define QUIRK_PIPEA_FORCE 0x00000008 #define QUIRK_IVCH_NEED_DVOB 0x00000010 +#define QUIRK_RESET_MODES 0x00000020 extern void i830_fixup_devices(ScrnInfoPtr); #endif /* _I830_H_ */ diff --git a/src/i830_driver.c b/src/i830_driver.c index d5b260c..5d1243b 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -3453,6 +3453,9 @@ I830PMEvent(int scrnIndex, pmEvent event, Bool undo) break; /* This is currently used for ACPI */ case XF86_APM_CAPABILITY_CHANGED: + if (pI830->quirk_flag & QUIRK_RESET_MODES) + xf86SetDesiredModes(pScrn); + #if 0 /* If we had status checking turned on, turn it off now */ if (pI830->checkDevices) { diff --git a/src/i830_quirks.c b/src/i830_quirks.c index f29083b..8b1f9df 100644 --- a/src/i830_quirks.c +++ b/src/i830_quirks.c @@ -161,6 +161,15 @@ static void i830_dmi_dump(void) DMIID_DUMP(chassis_asset_tag); } +/* + * Some machines hose the display regs regardless of the ACPI DOS + * setting, so we need to reset modes at ACPI event time. + */ +static void quirk_reset_modes (I830Ptr pI830) +{ + pI830->quirk_flag = QUIRK_RESET_MODES; +} + static void quirk_pipea_force (I830Ptr pI830) { pI830->quirk_flag |= QUIRK_PIPEA_FORCE; @@ -266,6 +275,9 @@ static i830_quirk i830_quirk_list[] = { /* Sony vaio PCG-r600HFP (fix bug 13722) */ { PCI_CHIP_I830_M, 0x104d, 0x8100, quirk_ivch_dvob }, + /* Dell Latitude D500 needs reset modes quirk */ + { PCI_CHIP_I855_GM, 0x1028, 0x0152, quirk_reset_modes }, + { 0, 0, 0, NULL }, };