diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2010-02-02 12:06:28 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-02-09 09:31:22 +1000 |
commit | 093972788f009cabf8f8fb726dc5267b60b3d09e (patch) | |
tree | d31858dcd64d393fa1150e4e34bd1914f53fa7aa /drivers | |
parent | 7c27f87d2bde885e9bcda74c208a7aae8bef8e76 (diff) | |
download | linux-stable-093972788f009cabf8f8fb726dc5267b60b3d09e.tar.gz linux-stable-093972788f009cabf8f8fb726dc5267b60b3d09e.tar.bz2 linux-stable-093972788f009cabf8f8fb726dc5267b60b3d09e.zip |
drm/radeon/kms: add pll quirk for toshiba laptop panel
The panel on the Toshiba A300-1BU laptop does not like the
PLL dividers selected by the avivo pll algo, but works fine
using the older method. Add a quirk to handle it.
Should fix fdo bug 26358.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index 667f099e84af..d33fb4174b13 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c @@ -1073,6 +1073,21 @@ static struct radeon_atom_ss *radeon_atombios_get_ss_info(struct return ss; } +static void radeon_atom_apply_lvds_quirks(struct drm_device *dev, + struct radeon_encoder_atom_dig *lvds) +{ + + /* Toshiba A300-1BU laptop panel doesn't like new pll divider algo */ + if ((dev->pdev->device == 0x95c4) && + (dev->pdev->subsystem_vendor == 0x1179) && + (dev->pdev->subsystem_device == 0xff50)) { + if ((lvds->native_mode.hdisplay == 1280) && + (lvds->native_mode.vdisplay == 800)) + lvds->pll_algo = PLL_ALGO_LEGACY; + } + +} + union lvds_info { struct _ATOM_LVDS_INFO info; struct _ATOM_LVDS_INFO_V12 info_12; @@ -1151,6 +1166,9 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct } else lvds->pll_algo = PLL_ALGO_LEGACY; + /* LVDS quirks */ + radeon_atom_apply_lvds_quirks(dev, lvds); + encoder->native_mode = lvds->native_mode; } return lvds; |