diff options
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_bios.c | 25 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nv04_dfp.c | 23 |
2 files changed, 27 insertions, 21 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c index b54597f6eadf..f6c615b228d4 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bios.c +++ b/drivers/gpu/drm/nouveau/nouveau_bios.c | |||
| @@ -3869,27 +3869,10 @@ static int call_lvds_manufacturer_script(struct drm_device *dev, struct dcb_entr | |||
| 3869 | } | 3869 | } |
| 3870 | #ifdef __powerpc__ | 3870 | #ifdef __powerpc__ |
| 3871 | /* Powerbook specific quirks */ | 3871 | /* Powerbook specific quirks */ |
| 3872 | if ((dev->pci_device & 0xffff) == 0x0179 || | 3872 | if (script == LVDS_RESET && |
| 3873 | (dev->pci_device & 0xffff) == 0x0189 || | 3873 | (dev->pci_device == 0x0179 || dev->pci_device == 0x0189 || |
| 3874 | (dev->pci_device & 0xffff) == 0x0329) { | 3874 | dev->pci_device == 0x0329)) |
| 3875 | if (script == LVDS_RESET) { | 3875 | nv_write_tmds(dev, dcbent->or, 0, 0x02, 0x72); |
| 3876 | nv_write_tmds(dev, dcbent->or, 0, 0x02, 0x72); | ||
| 3877 | |||
| 3878 | } else if (script == LVDS_PANEL_ON) { | ||
| 3879 | bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL, | ||
| 3880 | bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL) | ||
| 3881 | | (1 << 31)); | ||
| 3882 | bios_wr32(bios, NV_PCRTC_GPIO_EXT, | ||
| 3883 | bios_rd32(bios, NV_PCRTC_GPIO_EXT) | 1); | ||
| 3884 | |||
| 3885 | } else if (script == LVDS_PANEL_OFF) { | ||
| 3886 | bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL, | ||
| 3887 | bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL) | ||
| 3888 | & ~(1 << 31)); | ||
| 3889 | bios_wr32(bios, NV_PCRTC_GPIO_EXT, | ||
| 3890 | bios_rd32(bios, NV_PCRTC_GPIO_EXT) & ~3); | ||
| 3891 | } | ||
| 3892 | } | ||
| 3893 | #endif | 3876 | #endif |
| 3894 | 3877 | ||
| 3895 | return 0; | 3878 | return 0; |
diff --git a/drivers/gpu/drm/nouveau/nv04_dfp.c b/drivers/gpu/drm/nouveau/nv04_dfp.c index ea89f6e69d4c..0d3206a7046c 100644 --- a/drivers/gpu/drm/nouveau/nv04_dfp.c +++ b/drivers/gpu/drm/nouveau/nv04_dfp.c | |||
| @@ -475,6 +475,27 @@ static void nv04_dfp_commit(struct drm_encoder *encoder) | |||
| 475 | nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); | 475 | nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); |
| 476 | } | 476 | } |
| 477 | 477 | ||
| 478 | static void nv04_dfp_update_backlight(struct drm_encoder *encoder, int mode) | ||
| 479 | { | ||
| 480 | #ifdef __powerpc__ | ||
| 481 | struct drm_device *dev = encoder->dev; | ||
| 482 | |||
| 483 | /* BIOS scripts usually take care of the backlight, thanks | ||
| 484 | * Apple for your consistency. | ||
| 485 | */ | ||
| 486 | if (dev->pci_device == 0x0179 || dev->pci_device == 0x0189 || | ||
| 487 | dev->pci_device == 0x0329) { | ||
| 488 | if (mode == DRM_MODE_DPMS_ON) { | ||
| 489 | nv_mask(dev, NV_PBUS_DEBUG_DUALHEAD_CTL, 0, 1 << 31); | ||
| 490 | nv_mask(dev, NV_PCRTC_GPIO_EXT, 3, 1); | ||
| 491 | } else { | ||
| 492 | nv_mask(dev, NV_PBUS_DEBUG_DUALHEAD_CTL, 1 << 31, 0); | ||
| 493 | nv_mask(dev, NV_PCRTC_GPIO_EXT, 3, 0); | ||
| 494 | } | ||
| 495 | } | ||
| 496 | #endif | ||
| 497 | } | ||
| 498 | |||
| 478 | static inline bool is_powersaving_dpms(int mode) | 499 | static inline bool is_powersaving_dpms(int mode) |
| 479 | { | 500 | { |
| 480 | return (mode != DRM_MODE_DPMS_ON); | 501 | return (mode != DRM_MODE_DPMS_ON); |
| @@ -522,6 +543,7 @@ static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode) | |||
| 522 | LVDS_PANEL_OFF, 0); | 543 | LVDS_PANEL_OFF, 0); |
| 523 | } | 544 | } |
| 524 | 545 | ||
| 546 | nv04_dfp_update_backlight(encoder, mode); | ||
| 525 | nv04_dfp_update_fp_control(encoder, mode); | 547 | nv04_dfp_update_fp_control(encoder, mode); |
| 526 | 548 | ||
| 527 | if (mode == DRM_MODE_DPMS_ON) | 549 | if (mode == DRM_MODE_DPMS_ON) |
| @@ -545,6 +567,7 @@ static void nv04_tmds_dpms(struct drm_encoder *encoder, int mode) | |||
| 545 | NV_INFO(dev, "Setting dpms mode %d on tmds encoder (output %d)\n", | 567 | NV_INFO(dev, "Setting dpms mode %d on tmds encoder (output %d)\n", |
| 546 | mode, nv_encoder->dcb->index); | 568 | mode, nv_encoder->dcb->index); |
| 547 | 569 | ||
| 570 | nv04_dfp_update_backlight(encoder, mode); | ||
| 548 | nv04_dfp_update_fp_control(encoder, mode); | 571 | nv04_dfp_update_fp_control(encoder, mode); |
| 549 | } | 572 | } |
| 550 | 573 | ||
