|
@@ -7411,6 +7411,26 @@ static int i945_get_display_clock_speed(struct drm_i915_private *dev_priv)
|
|
|
return 400000;
|
|
|
}
|
|
|
|
|
|
+static int i945gm_get_display_clock_speed(struct drm_i915_private *dev_priv)
|
|
|
+{
|
|
|
+ struct pci_dev *pdev = dev_priv->drm.pdev;
|
|
|
+ u16 gcfgc = 0;
|
|
|
+
|
|
|
+ pci_read_config_word(pdev, GCFGC, &gcfgc);
|
|
|
+
|
|
|
+ if (gcfgc & GC_LOW_FREQUENCY_ENABLE)
|
|
|
+ return 133333;
|
|
|
+ else {
|
|
|
+ switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
|
|
|
+ case GC_DISPLAY_CLOCK_333_320_MHZ:
|
|
|
+ return 320000;
|
|
|
+ default:
|
|
|
+ case GC_DISPLAY_CLOCK_190_200_MHZ:
|
|
|
+ return 200000;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int i915_get_display_clock_speed(struct drm_i915_private *dev_priv)
|
|
|
{
|
|
|
return 333333;
|
|
@@ -7457,7 +7477,7 @@ static int i915gm_get_display_clock_speed(struct drm_i915_private *dev_priv)
|
|
|
return 133333;
|
|
|
else {
|
|
|
switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
|
|
|
- case GC_DISPLAY_CLOCK_333_MHZ:
|
|
|
+ case GC_DISPLAY_CLOCK_333_320_MHZ:
|
|
|
return 333333;
|
|
|
default:
|
|
|
case GC_DISPLAY_CLOCK_190_200_MHZ:
|
|
@@ -16268,9 +16288,12 @@ void intel_init_display_hooks(struct drm_i915_private *dev_priv)
|
|
|
else if (IS_I915G(dev_priv))
|
|
|
dev_priv->display.get_display_clock_speed =
|
|
|
i915_get_display_clock_speed;
|
|
|
- else if (IS_I945GM(dev_priv) || IS_I845G(dev_priv))
|
|
|
+ else if (IS_I845G(dev_priv))
|
|
|
dev_priv->display.get_display_clock_speed =
|
|
|
i9xx_misc_get_display_clock_speed;
|
|
|
+ else if (IS_I945GM(dev_priv))
|
|
|
+ dev_priv->display.get_display_clock_speed =
|
|
|
+ i945gm_get_display_clock_speed;
|
|
|
else if (IS_I915GM(dev_priv))
|
|
|
dev_priv->display.get_display_clock_speed =
|
|
|
i915gm_get_display_clock_speed;
|