drm/radeon/kms: add pll quirk for toshiba laptop panel
authorAlex Deucher <alexdeucher@gmail.com>
Tue, 2 Feb 2010 17:06:28 +0000 (12:06 -0500)
committerDave Airlie <airlied@redhat.com>
Mon, 8 Feb 2010 23:31:22 +0000 (09:31 +1000)
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>
drivers/gpu/drm/radeon/radeon_atombios.c

index 667f099e84af93ffd9662d5b972b17f91e678a4e..d33fb4174b1338229d3aedb847e36c68a00eed28 100644 (file)
@@ -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;