diff options
author | Jesse Barnes <jbarnes@hobbes.virtuousgeek.org> | 2008-02-22 11:41:25 -0800 |
---|---|---|
committer | Jesse Barnes <jbarnes@hobbes.virtuousgeek.org> | 2008-02-22 11:51:17 -0800 |
commit | b85c0992938e85e2228e69a3d9bfdd14958c0f4f (patch) | |
tree | 717b62908a587ab707fb7f667d2cec9d4afeddb0 | |
parent | 5073b4026c536f6e5f0c8c5a741a1852b4480f31 (diff) |
Add quirk for DVO channel selection
Some machines want DVOA, some DVOB. We can use this quirk to differentiate
them until we come up with a better solution. Patch from Hong Liu.
Fixes #13722.
-rw-r--r-- | src/i830.h | 1 | ||||
-rw-r--r-- | src/i830_dvo.c | 8 | ||||
-rw-r--r-- | src/i830_quirks.c | 10 |
3 files changed, 18 insertions, 1 deletions
@@ -840,6 +840,7 @@ extern const int I830CopyROP[16]; #define QUIRK_IGNORE_LVDS 0x00000002 #define QUIRK_IGNORE_MACMINI_LVDS 0x00000004 #define QUIRK_PIPEA_FORCE 0x00000008 +#define QUIRK_IVCH_NEED_DVOB 0x00000010 extern void i830_fixup_devices(ScrnInfoPtr); #endif /* _I830_H_ */ diff --git a/src/i830_dvo.c b/src/i830_dvo.c index e7342b08..81d56012 100644 --- a/src/i830_dvo.c +++ b/src/i830_dvo.c @@ -83,7 +83,7 @@ struct _I830DVODriver i830_dvo_drivers[] = .type = I830_OUTPUT_DVO_LVDS, .modulename = "ivch", .fntablename = "ivch_methods", - .dvo_reg = DVOB, + .dvo_reg = DVOA, .address = 0x04, /* Might also be 0x44, 0x84, 0xc4 */ .symbols = ivch_symbols }, @@ -398,6 +398,7 @@ i830_dvo_get_current_mode (xf86OutputPtr output) void i830_dvo_init(ScrnInfoPtr pScrn) { + I830Ptr pI830 = I830PTR(pScrn); I830OutputPrivatePtr intel_output; int ret; int i; @@ -431,6 +432,11 @@ i830_dvo_init(ScrnInfoPtr pScrn) ret_ptr = NULL; drv->vid_rec = LoaderSymbol(drv->fntablename); + if (!strcmp(drv->modulename, "ivch") && + pI830->quirk_flag & QUIRK_IVCH_NEED_DVOB) { + drv->dvo_reg = DVOB; + } + /* Allow the I2C driver info to specify the GPIO to be used in * special cases, but otherwise default to what's defined in the spec. */ diff --git a/src/i830_quirks.c b/src/i830_quirks.c index 875bf672..e957845e 100644 --- a/src/i830_quirks.c +++ b/src/i830_quirks.c @@ -198,6 +198,11 @@ static void quirk_lenovo_tv_dmi (I830Ptr pI830) pI830->quirk_flag |= QUIRK_IGNORE_TV; } +static void quirk_ivch_dvob (I830Ptr pI830) +{ + pI830->quirk_flag |= QUIRK_IVCH_NEED_DVOB; +} + /* keep this list sorted by OEM, then by chip ID */ static i830_quirk i830_quirk_list[] = { /* Aopen mini pc */ @@ -230,6 +235,8 @@ static i830_quirk i830_quirk_list[] = { /* Toshiba Satellite U300 has no TV output */ { PCI_CHIP_I965_GM, 0x1179, 0xff50, quirk_ignore_tv }, + /* Toshiba i830M laptop (fix bug 11148) */ + { PCI_CHIP_I830_M, 0x1179, 0xff00, quirk_ivch_dvob }, /* Samsung Q35 has no TV output */ { PCI_CHIP_I945_GM, 0x144d, 0xc504, quirk_ignore_tv }, @@ -242,6 +249,9 @@ static i830_quirk i830_quirk_list[] = { /* ThinkPad X40 needs pipe A force quirk */ { PCI_CHIP_I855_GM, 0x1014, 0x0557, quirk_pipea_force }, + /* Sony vaio PCG-r600HFP (fix bug 13722) */ + { PCI_CHIP_I830_M, 0x104d, 0x8100, quirk_ivch_dvob }, + { 0, 0, 0, NULL }, }; |