aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/aty/radeon_pm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/aty/radeon_pm.c')
-rw-r--r--drivers/video/aty/radeon_pm.c43
1 files changed, 15 insertions, 28 deletions
diff --git a/drivers/video/aty/radeon_pm.c b/drivers/video/aty/radeon_pm.c
index 23c677e5093f..98352af39325 100644
--- a/drivers/video/aty/radeon_pm.c
+++ b/drivers/video/aty/radeon_pm.c
@@ -2520,13 +2520,10 @@ static int radeon_restore_pci_cfg(struct radeonfb_info *rinfo)
2520} 2520}
2521 2521
2522 2522
2523static/*extern*/ int susdisking = 0;
2524
2525int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t state) 2523int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t state)
2526{ 2524{
2527 struct fb_info *info = pci_get_drvdata(pdev); 2525 struct fb_info *info = pci_get_drvdata(pdev);
2528 struct radeonfb_info *rinfo = info->par; 2526 struct radeonfb_info *rinfo = info->par;
2529 u8 agp;
2530 int i; 2527 int i;
2531 2528
2532 if (state == pdev->dev.power.power_state) 2529 if (state == pdev->dev.power.power_state)
@@ -2542,11 +2539,6 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t state)
2542 */ 2539 */
2543 if (state != PM_SUSPEND_MEM) 2540 if (state != PM_SUSPEND_MEM)
2544 goto done; 2541 goto done;
2545 if (susdisking) {
2546 printk("radeonfb (%s): suspending to disk but state = %d\n",
2547 pci_name(pdev), state);
2548 goto done;
2549 }
2550 2542
2551 acquire_console_sem(); 2543 acquire_console_sem();
2552 2544
@@ -2567,27 +2559,13 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t state)
2567 rinfo->lock_blank = 1; 2559 rinfo->lock_blank = 1;
2568 del_timer_sync(&rinfo->lvds_timer); 2560 del_timer_sync(&rinfo->lvds_timer);
2569 2561
2570 /* Disable AGP. The AGP host should have done it, but since ordering 2562#ifdef CONFIG_PPC_PMAC
2571 * isn't always properly guaranteed in this specific case, let's make 2563 /* On powermac, we have hooks to properly suspend/resume AGP now,
2572 * sure it's disabled on card side now. Ultimately, when merging fbdev 2564 * use them here. We'll ultimately need some generic support here,
2573 * and dri into some common infrastructure, this will be handled 2565 * but the generic code isn't quite ready for that yet
2574 * more nicely. The host bridge side will (or will not) be dealt with
2575 * by the bridge AGP driver, we don't attempt to touch it here.
2576 */ 2566 */
2577 agp = pci_find_capability(pdev, PCI_CAP_ID_AGP); 2567 pmac_suspend_agp_for_card(pdev);
2578 if (agp) { 2568#endif /* CONFIG_PPC_PMAC */
2579 u32 cmd;
2580
2581 pci_read_config_dword(pdev, agp + PCI_AGP_COMMAND, &cmd);
2582 if (cmd & PCI_AGP_COMMAND_AGP) {
2583 printk(KERN_INFO "radeonfb (%s): AGP was enabled, "
2584 "disabling ...\n",
2585 pci_name(pdev));
2586 cmd &= ~PCI_AGP_COMMAND_AGP;
2587 pci_write_config_dword(pdev, agp + PCI_AGP_COMMAND,
2588 cmd);
2589 }
2590 }
2591 2569
2592 /* If we support wakeup from poweroff, we save all regs we can including cfg 2570 /* If we support wakeup from poweroff, we save all regs we can including cfg
2593 * space 2571 * space
@@ -2699,6 +2677,15 @@ int radeonfb_pci_resume(struct pci_dev *pdev)
2699 rinfo->lock_blank = 0; 2677 rinfo->lock_blank = 0;
2700 radeon_screen_blank(rinfo, FB_BLANK_UNBLANK, 1); 2678 radeon_screen_blank(rinfo, FB_BLANK_UNBLANK, 1);
2701 2679
2680#ifdef CONFIG_PPC_PMAC
2681 /* On powermac, we have hooks to properly suspend/resume AGP now,
2682 * use them here. We'll ultimately need some generic support here,
2683 * but the generic code isn't quite ready for that yet
2684 */
2685 pmac_resume_agp_for_card(pdev);
2686#endif /* CONFIG_PPC_PMAC */
2687
2688
2702 /* Check status of dynclk */ 2689 /* Check status of dynclk */
2703 if (rinfo->dynclk == 1) 2690 if (rinfo->dynclk == 1)
2704 radeon_pm_enable_dynamic_mode(rinfo); 2691 radeon_pm_enable_dynamic_mode(rinfo);