diff options
Diffstat (limited to 'drivers/video/aty/aty128fb.c')
-rw-r--r-- | drivers/video/aty/aty128fb.c | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/drivers/video/aty/aty128fb.c b/drivers/video/aty/aty128fb.c index 8a4ba3bb9872..9789115980a5 100644 --- a/drivers/video/aty/aty128fb.c +++ b/drivers/video/aty/aty128fb.c | |||
@@ -2331,7 +2331,6 @@ static int aty128_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2331 | { | 2331 | { |
2332 | struct fb_info *info = pci_get_drvdata(pdev); | 2332 | struct fb_info *info = pci_get_drvdata(pdev); |
2333 | struct aty128fb_par *par = info->par; | 2333 | struct aty128fb_par *par = info->par; |
2334 | u8 agp; | ||
2335 | 2334 | ||
2336 | /* We don't do anything but D2, for now we return 0, but | 2335 | /* We don't do anything but D2, for now we return 0, but |
2337 | * we may want to change that. How do we know if the BIOS | 2336 | * we may want to change that. How do we know if the BIOS |
@@ -2369,26 +2368,13 @@ static int aty128_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2369 | par->asleep = 1; | 2368 | par->asleep = 1; |
2370 | par->lock_blank = 1; | 2369 | par->lock_blank = 1; |
2371 | 2370 | ||
2372 | /* Disable AGP. The AGP host should have done it, but since ordering | 2371 | #ifdef CONFIG_PPC_PMAC |
2373 | * isn't always properly guaranteed in this specific case, let's make | 2372 | /* On powermac, we have hooks to properly suspend/resume AGP now, |
2374 | * sure it's disabled on card side now. Ultimately, when merging fbdev | 2373 | * use them here. We'll ultimately need some generic support here, |
2375 | * and dri into some common infrastructure, this will be handled | 2374 | * but the generic code isn't quite ready for that yet |
2376 | * more nicely. The host bridge side will (or will not) be dealt with | ||
2377 | * by the bridge AGP driver, we don't attempt to touch it here. | ||
2378 | */ | 2375 | */ |
2379 | agp = pci_find_capability(pdev, PCI_CAP_ID_AGP); | 2376 | pmac_suspend_agp_for_card(pdev); |
2380 | if (agp) { | 2377 | #endif /* CONFIG_PPC_PMAC */ |
2381 | u32 cmd; | ||
2382 | |||
2383 | pci_read_config_dword(pdev, agp + PCI_AGP_COMMAND, &cmd); | ||
2384 | if (cmd & PCI_AGP_COMMAND_AGP) { | ||
2385 | printk(KERN_INFO "aty128fb: AGP was enabled, " | ||
2386 | "disabling ...\n"); | ||
2387 | cmd &= ~PCI_AGP_COMMAND_AGP; | ||
2388 | pci_write_config_dword(pdev, agp + PCI_AGP_COMMAND, | ||
2389 | cmd); | ||
2390 | } | ||
2391 | } | ||
2392 | 2378 | ||
2393 | /* We need a way to make sure the fbdev layer will _not_ touch the | 2379 | /* We need a way to make sure the fbdev layer will _not_ touch the |
2394 | * framebuffer before we put the chip to suspend state. On 2.4, I | 2380 | * framebuffer before we put the chip to suspend state. On 2.4, I |
@@ -2432,6 +2418,14 @@ static int aty128_do_resume(struct pci_dev *pdev) | |||
2432 | par->lock_blank = 0; | 2418 | par->lock_blank = 0; |
2433 | aty128fb_blank(0, info); | 2419 | aty128fb_blank(0, info); |
2434 | 2420 | ||
2421 | #ifdef CONFIG_PPC_PMAC | ||
2422 | /* On powermac, we have hooks to properly suspend/resume AGP now, | ||
2423 | * use them here. We'll ultimately need some generic support here, | ||
2424 | * but the generic code isn't quite ready for that yet | ||
2425 | */ | ||
2426 | pmac_resume_agp_for_card(pdev); | ||
2427 | #endif /* CONFIG_PPC_PMAC */ | ||
2428 | |||
2435 | pdev->dev.power.power_state = PMSG_ON; | 2429 | pdev->dev.power.power_state = PMSG_ON; |
2436 | 2430 | ||
2437 | printk(KERN_DEBUG "aty128fb: resumed !\n"); | 2431 | printk(KERN_DEBUG "aty128fb: resumed !\n"); |