diff options
author | Pavel Machek <pavel@ucw.cz> | 2005-09-03 18:56:57 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@evo.osdl.org> | 2005-09-05 03:06:16 -0400 |
commit | ca078bae813dd46c0f9b102fdfb4a3384641ff48 (patch) | |
tree | e3348f5dcb24159a522941aa2e3ee40bc9e0589b /drivers/video/aty | |
parent | 829ca9a30a2ddb727981d80fabdbff2ea86bc9ea (diff) |
[PATCH] swsusp: switch pm_message_t to struct
This adds type-checking to pm_message_t, so that people can't confuse it
with int or u32. It also allows us to fix "disk yoyo" during suspend (disk
spinning down/up/down).
[We've tried that before; since that cpufreq problems were fixed and I've
tried make allyes config and fixed resulting damage.]
Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Alexander Nyberg <alexn@telia.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/video/aty')
-rw-r--r-- | drivers/video/aty/aty128fb.c | 14 | ||||
-rw-r--r-- | drivers/video/aty/atyfb_base.c | 11 | ||||
-rw-r--r-- | drivers/video/aty/radeon_pm.c | 12 |
3 files changed, 17 insertions, 20 deletions
diff --git a/drivers/video/aty/aty128fb.c b/drivers/video/aty/aty128fb.c index 7bc1d44d8814..b0eba3ac6420 100644 --- a/drivers/video/aty/aty128fb.c +++ b/drivers/video/aty/aty128fb.c | |||
@@ -2323,17 +2323,16 @@ static int aty128_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2323 | * can properly take care of D3 ? Also, with swsusp, we | 2323 | * can properly take care of D3 ? Also, with swsusp, we |
2324 | * know we'll be rebooted, ... | 2324 | * know we'll be rebooted, ... |
2325 | */ | 2325 | */ |
2326 | #ifdef CONFIG_PPC_PMAC | 2326 | #ifndef CONFIG_PPC_PMAC |
2327 | /* HACK ALERT ! Once I find a proper way to say to each driver | 2327 | /* HACK ALERT ! Once I find a proper way to say to each driver |
2328 | * individually what will happen with it's PCI slot, I'll change | 2328 | * individually what will happen with it's PCI slot, I'll change |
2329 | * that. On laptops, the AGP slot is just unclocked, so D2 is | 2329 | * that. On laptops, the AGP slot is just unclocked, so D2 is |
2330 | * expected, while on desktops, the card is powered off | 2330 | * expected, while on desktops, the card is powered off |
2331 | */ | 2331 | */ |
2332 | if (state >= 3) | 2332 | return 0; |
2333 | state = 2; | ||
2334 | #endif /* CONFIG_PPC_PMAC */ | 2333 | #endif /* CONFIG_PPC_PMAC */ |
2335 | 2334 | ||
2336 | if (state != 2 || state == pdev->dev.power.power_state) | 2335 | if (state.event == pdev->dev.power.power_state.event) |
2337 | return 0; | 2336 | return 0; |
2338 | 2337 | ||
2339 | printk(KERN_DEBUG "aty128fb: suspending...\n"); | 2338 | printk(KERN_DEBUG "aty128fb: suspending...\n"); |
@@ -2367,7 +2366,7 @@ static int aty128_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2367 | * used dummy fb ops, 2.5 need proper support for this at the | 2366 | * used dummy fb ops, 2.5 need proper support for this at the |
2368 | * fbdev level | 2367 | * fbdev level |
2369 | */ | 2368 | */ |
2370 | if (state == 2) | 2369 | if (state.event != PM_EVENT_ON) |
2371 | aty128_set_suspend(par, 1); | 2370 | aty128_set_suspend(par, 1); |
2372 | 2371 | ||
2373 | release_console_sem(); | 2372 | release_console_sem(); |
@@ -2382,12 +2381,11 @@ static int aty128_do_resume(struct pci_dev *pdev) | |||
2382 | struct fb_info *info = pci_get_drvdata(pdev); | 2381 | struct fb_info *info = pci_get_drvdata(pdev); |
2383 | struct aty128fb_par *par = info->par; | 2382 | struct aty128fb_par *par = info->par; |
2384 | 2383 | ||
2385 | if (pdev->dev.power.power_state == 0) | 2384 | if (pdev->dev.power.power_state.event == PM_EVENT_ON) |
2386 | return 0; | 2385 | return 0; |
2387 | 2386 | ||
2388 | /* Wakeup chip */ | 2387 | /* Wakeup chip */ |
2389 | if (pdev->dev.power.power_state == 2) | 2388 | aty128_set_suspend(par, 0); |
2390 | aty128_set_suspend(par, 0); | ||
2391 | par->asleep = 0; | 2389 | par->asleep = 0; |
2392 | 2390 | ||
2393 | /* Restore display & engine */ | 2391 | /* Restore display & engine */ |
diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c index 8c42538dc8c1..3e10bd837d9e 100644 --- a/drivers/video/aty/atyfb_base.c +++ b/drivers/video/aty/atyfb_base.c | |||
@@ -2022,17 +2022,16 @@ static int atyfb_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2022 | struct fb_info *info = pci_get_drvdata(pdev); | 2022 | struct fb_info *info = pci_get_drvdata(pdev); |
2023 | struct atyfb_par *par = (struct atyfb_par *) info->par; | 2023 | struct atyfb_par *par = (struct atyfb_par *) info->par; |
2024 | 2024 | ||
2025 | #ifdef CONFIG_PPC_PMAC | 2025 | #ifndef CONFIG_PPC_PMAC |
2026 | /* HACK ALERT ! Once I find a proper way to say to each driver | 2026 | /* HACK ALERT ! Once I find a proper way to say to each driver |
2027 | * individually what will happen with it's PCI slot, I'll change | 2027 | * individually what will happen with it's PCI slot, I'll change |
2028 | * that. On laptops, the AGP slot is just unclocked, so D2 is | 2028 | * that. On laptops, the AGP slot is just unclocked, so D2 is |
2029 | * expected, while on desktops, the card is powered off | 2029 | * expected, while on desktops, the card is powered off |
2030 | */ | 2030 | */ |
2031 | if (state >= 3) | 2031 | return 0; |
2032 | state = 2; | ||
2033 | #endif /* CONFIG_PPC_PMAC */ | 2032 | #endif /* CONFIG_PPC_PMAC */ |
2034 | 2033 | ||
2035 | if (state != 2 || state == pdev->dev.power.power_state) | 2034 | if (state.event == pdev->dev.power.power_state.event) |
2036 | return 0; | 2035 | return 0; |
2037 | 2036 | ||
2038 | acquire_console_sem(); | 2037 | acquire_console_sem(); |
@@ -2071,12 +2070,12 @@ static int atyfb_pci_resume(struct pci_dev *pdev) | |||
2071 | struct fb_info *info = pci_get_drvdata(pdev); | 2070 | struct fb_info *info = pci_get_drvdata(pdev); |
2072 | struct atyfb_par *par = (struct atyfb_par *) info->par; | 2071 | struct atyfb_par *par = (struct atyfb_par *) info->par; |
2073 | 2072 | ||
2074 | if (pdev->dev.power.power_state == 0) | 2073 | if (pdev->dev.power.power_state.event == PM_EVENT_ON) |
2075 | return 0; | 2074 | return 0; |
2076 | 2075 | ||
2077 | acquire_console_sem(); | 2076 | acquire_console_sem(); |
2078 | 2077 | ||
2079 | if (pdev->dev.power.power_state == 2) | 2078 | if (pdev->dev.power.power_state.event == 2) |
2080 | aty_power_mgmt(0, par); | 2079 | aty_power_mgmt(0, par); |
2081 | par->asleep = 0; | 2080 | par->asleep = 0; |
2082 | 2081 | ||
diff --git a/drivers/video/aty/radeon_pm.c b/drivers/video/aty/radeon_pm.c index 98352af39325..59a1b6f85067 100644 --- a/drivers/video/aty/radeon_pm.c +++ b/drivers/video/aty/radeon_pm.c | |||
@@ -2526,18 +2526,18 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2526 | struct radeonfb_info *rinfo = info->par; | 2526 | struct radeonfb_info *rinfo = info->par; |
2527 | int i; | 2527 | int i; |
2528 | 2528 | ||
2529 | if (state == pdev->dev.power.power_state) | 2529 | if (state.event == pdev->dev.power.power_state.event) |
2530 | return 0; | 2530 | return 0; |
2531 | 2531 | ||
2532 | printk(KERN_DEBUG "radeonfb (%s): suspending to state: %d...\n", | 2532 | printk(KERN_DEBUG "radeonfb (%s): suspending to state: %d...\n", |
2533 | pci_name(pdev), state); | 2533 | pci_name(pdev), state.event); |
2534 | 2534 | ||
2535 | /* For suspend-to-disk, we cheat here. We don't suspend anything and | 2535 | /* For suspend-to-disk, we cheat here. We don't suspend anything and |
2536 | * let fbcon continue drawing until we are all set. That shouldn't | 2536 | * let fbcon continue drawing until we are all set. That shouldn't |
2537 | * really cause any problem at this point, provided that the wakeup | 2537 | * really cause any problem at this point, provided that the wakeup |
2538 | * code knows that any state in memory may not match the HW | 2538 | * code knows that any state in memory may not match the HW |
2539 | */ | 2539 | */ |
2540 | if (state != PM_SUSPEND_MEM) | 2540 | if (state.event == PM_EVENT_FREEZE) |
2541 | goto done; | 2541 | goto done; |
2542 | 2542 | ||
2543 | acquire_console_sem(); | 2543 | acquire_console_sem(); |
@@ -2616,7 +2616,7 @@ int radeonfb_pci_resume(struct pci_dev *pdev) | |||
2616 | struct radeonfb_info *rinfo = info->par; | 2616 | struct radeonfb_info *rinfo = info->par; |
2617 | int rc = 0; | 2617 | int rc = 0; |
2618 | 2618 | ||
2619 | if (pdev->dev.power.power_state == 0) | 2619 | if (pdev->dev.power.power_state.event == PM_EVENT_ON) |
2620 | return 0; | 2620 | return 0; |
2621 | 2621 | ||
2622 | if (rinfo->no_schedule) { | 2622 | if (rinfo->no_schedule) { |
@@ -2626,7 +2626,7 @@ int radeonfb_pci_resume(struct pci_dev *pdev) | |||
2626 | acquire_console_sem(); | 2626 | acquire_console_sem(); |
2627 | 2627 | ||
2628 | printk(KERN_DEBUG "radeonfb (%s): resuming from state: %d...\n", | 2628 | printk(KERN_DEBUG "radeonfb (%s): resuming from state: %d...\n", |
2629 | pci_name(pdev), pdev->dev.power.power_state); | 2629 | pci_name(pdev), pdev->dev.power.power_state.event); |
2630 | 2630 | ||
2631 | 2631 | ||
2632 | if (pci_enable_device(pdev)) { | 2632 | if (pci_enable_device(pdev)) { |
@@ -2637,7 +2637,7 @@ int radeonfb_pci_resume(struct pci_dev *pdev) | |||
2637 | } | 2637 | } |
2638 | pci_set_master(pdev); | 2638 | pci_set_master(pdev); |
2639 | 2639 | ||
2640 | if (pdev->dev.power.power_state == PM_SUSPEND_MEM) { | 2640 | if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) { |
2641 | /* Wakeup chip. Check from config space if we were powered off | 2641 | /* Wakeup chip. Check from config space if we were powered off |
2642 | * (todo: additionally, check CLK_PIN_CNTL too) | 2642 | * (todo: additionally, check CLK_PIN_CNTL too) |
2643 | */ | 2643 | */ |