diff --git a/src/i830.h b/src/i830.h index 207d4ec..d0ace19 100644 --- a/src/i830.h +++ b/src/i830.h @@ -917,6 +917,7 @@ extern const int I830CopyROP[16]; #define QUIRK_PFIT_SAFE 0x00000040 #define QUIRK_IGNORE_CRT 0x00000080 #define QUIRK_BROKEN_ACPI_LID 0x00000100 +#define QUIRK_FULL_PANEL_FITTING 0x00000200 extern void i830_fixup_devices(ScrnInfoPtr); /** diff --git a/src/i830_lvds.c b/src/i830_lvds.c index 064810f..e49dfa8 100644 --- a/src/i830_lvds.c +++ b/src/i830_lvds.c @@ -1572,10 +1572,13 @@ found_mode: dev_priv->backlight_duty_cycle = dev_priv->get_backlight(output); - /* - * Avoid munging the aspect ratio by default. - */ - dev_priv->fitting_mode = FULL_ASPECT; + if (pI830->quirk_flag & QUIRK_FULL_PANEL_FITTING) + dev_priv->fitting_mode = FULL; + else + /* + * Avoid munging the aspect ratio by default. + */ + dev_priv->fitting_mode = FULL_ASPECT; return; diff --git a/src/i830_quirks.c b/src/i830_quirks.c index 81ea3c2..237de64 100644 --- a/src/i830_quirks.c +++ b/src/i830_quirks.c @@ -260,6 +260,14 @@ static void quirk_broken_acpi_lid (I830Ptr pI830) pI830->quirk_flag |= QUIRK_BROKEN_ACPI_LID; } +/* The laptop only accept FULL panel fitting, + * intead of FULL_ASPECT. + */ +static void quirk_full_panel_fitting(I830Ptr pI830) +{ + pI830->quirk_flag |= QUIRK_FULL_PANEL_FITTING; +} + /* keep this list sorted by OEM, then by chip ID */ static i830_quirk i830_quirk_list[] = { /* Aopen mini pc */ @@ -394,6 +402,8 @@ static i830_quirk i830_quirk_list[] = { /* #19529: iBase MB890 board */ { PCI_CHIP_I855_GM, 0x8086, 0x3582, quirk_ibase_lvds }, + { PCI_CHIP_I945_GM, 0x1028, 0x01d8, quirk_full_panel_fitting }, + { 0, 0, 0, NULL }, };