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 | |
| 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>
28 files changed, 108 insertions, 101 deletions
diff --git a/arch/ppc/syslib/of_device.c b/arch/ppc/syslib/of_device.c index 1eb4f726ca9f..da8a0f2128dc 100644 --- a/arch/ppc/syslib/of_device.c +++ b/arch/ppc/syslib/of_device.c | |||
| @@ -105,7 +105,7 @@ static int of_device_remove(struct device *dev) | |||
| 105 | return 0; | 105 | return 0; |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | static int of_device_suspend(struct device *dev, u32 state) | 108 | static int of_device_suspend(struct device *dev, pm_message_t state) |
| 109 | { | 109 | { |
| 110 | struct of_device * of_dev = to_of_device(dev); | 110 | struct of_device * of_dev = to_of_device(dev); |
| 111 | struct of_platform_driver * drv = to_of_platform_driver(dev->driver); | 111 | struct of_platform_driver * drv = to_of_platform_driver(dev->driver); |
diff --git a/drivers/base/power/resume.c b/drivers/base/power/resume.c index bdd96b03b885..0a7aa07b9a2a 100644 --- a/drivers/base/power/resume.c +++ b/drivers/base/power/resume.c | |||
| @@ -26,11 +26,11 @@ int resume_device(struct device * dev) | |||
| 26 | 26 | ||
| 27 | down(&dev->sem); | 27 | down(&dev->sem); |
| 28 | if (dev->power.pm_parent | 28 | if (dev->power.pm_parent |
| 29 | && dev->power.pm_parent->power.power_state) { | 29 | && dev->power.pm_parent->power.power_state.event) { |
| 30 | dev_err(dev, "PM: resume from %d, parent %s still %d\n", | 30 | dev_err(dev, "PM: resume from %d, parent %s still %d\n", |
| 31 | dev->power.power_state, | 31 | dev->power.power_state.event, |
| 32 | dev->power.pm_parent->bus_id, | 32 | dev->power.pm_parent->bus_id, |
| 33 | dev->power.pm_parent->power.power_state); | 33 | dev->power.pm_parent->power.power_state.event); |
| 34 | } | 34 | } |
| 35 | if (dev->bus && dev->bus->resume) { | 35 | if (dev->bus && dev->bus->resume) { |
| 36 | dev_dbg(dev,"resuming\n"); | 36 | dev_dbg(dev,"resuming\n"); |
| @@ -54,7 +54,7 @@ void dpm_resume(void) | |||
| 54 | list_add_tail(entry, &dpm_active); | 54 | list_add_tail(entry, &dpm_active); |
| 55 | 55 | ||
| 56 | up(&dpm_list_sem); | 56 | up(&dpm_list_sem); |
| 57 | if (!dev->power.prev_state) | 57 | if (!dev->power.prev_state.event) |
| 58 | resume_device(dev); | 58 | resume_device(dev); |
| 59 | down(&dpm_list_sem); | 59 | down(&dpm_list_sem); |
| 60 | put_device(dev); | 60 | put_device(dev); |
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index 325962d80191..e8f0519f5dfa 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c | |||
| @@ -13,10 +13,10 @@ | |||
| 13 | static void runtime_resume(struct device * dev) | 13 | static void runtime_resume(struct device * dev) |
| 14 | { | 14 | { |
| 15 | dev_dbg(dev, "resuming\n"); | 15 | dev_dbg(dev, "resuming\n"); |
| 16 | if (!dev->power.power_state) | 16 | if (!dev->power.power_state.event) |
| 17 | return; | 17 | return; |
| 18 | if (!resume_device(dev)) | 18 | if (!resume_device(dev)) |
| 19 | dev->power.power_state = 0; | 19 | dev->power.power_state = PMSG_ON; |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | 22 | ||
| @@ -49,10 +49,10 @@ int dpm_runtime_suspend(struct device * dev, pm_message_t state) | |||
| 49 | int error = 0; | 49 | int error = 0; |
| 50 | 50 | ||
| 51 | down(&dpm_sem); | 51 | down(&dpm_sem); |
| 52 | if (dev->power.power_state == state) | 52 | if (dev->power.power_state.event == state.event) |
| 53 | goto Done; | 53 | goto Done; |
| 54 | 54 | ||
| 55 | if (dev->power.power_state) | 55 | if (dev->power.power_state.event) |
| 56 | runtime_resume(dev); | 56 | runtime_resume(dev); |
| 57 | 57 | ||
| 58 | if (!(error = suspend_device(dev, state))) | 58 | if (!(error = suspend_device(dev, state))) |
diff --git a/drivers/base/power/suspend.c b/drivers/base/power/suspend.c index 2ccee3763acf..50501764d050 100644 --- a/drivers/base/power/suspend.c +++ b/drivers/base/power/suspend.c | |||
| @@ -40,22 +40,22 @@ int suspend_device(struct device * dev, pm_message_t state) | |||
| 40 | int error = 0; | 40 | int error = 0; |
| 41 | 41 | ||
| 42 | down(&dev->sem); | 42 | down(&dev->sem); |
| 43 | if (dev->power.power_state) { | 43 | if (dev->power.power_state.event) { |
| 44 | dev_dbg(dev, "PM: suspend %d-->%d\n", | 44 | dev_dbg(dev, "PM: suspend %d-->%d\n", |
| 45 | dev->power.power_state, state); | 45 | dev->power.power_state.event, state.event); |
| 46 | } | 46 | } |
| 47 | if (dev->power.pm_parent | 47 | if (dev->power.pm_parent |
| 48 | && dev->power.pm_parent->power.power_state) { | 48 | && dev->power.pm_parent->power.power_state.event) { |
| 49 | dev_err(dev, | 49 | dev_err(dev, |
| 50 | "PM: suspend %d->%d, parent %s already %d\n", | 50 | "PM: suspend %d->%d, parent %s already %d\n", |
| 51 | dev->power.power_state, state, | 51 | dev->power.power_state.event, state.event, |
| 52 | dev->power.pm_parent->bus_id, | 52 | dev->power.pm_parent->bus_id, |
| 53 | dev->power.pm_parent->power.power_state); | 53 | dev->power.pm_parent->power.power_state.event); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | dev->power.prev_state = dev->power.power_state; | 56 | dev->power.prev_state = dev->power.power_state; |
| 57 | 57 | ||
| 58 | if (dev->bus && dev->bus->suspend && !dev->power.power_state) { | 58 | if (dev->bus && dev->bus->suspend && !dev->power.power_state.event) { |
| 59 | dev_dbg(dev, "suspending\n"); | 59 | dev_dbg(dev, "suspending\n"); |
| 60 | error = dev->bus->suspend(dev, state); | 60 | error = dev->bus->suspend(dev, state); |
| 61 | } | 61 | } |
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c index f82b3df9545f..8d04fb435c17 100644 --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c | |||
| @@ -26,19 +26,19 @@ | |||
| 26 | 26 | ||
| 27 | static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf) | 27 | static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf) |
| 28 | { | 28 | { |
| 29 | return sprintf(buf, "%u\n", dev->power.power_state); | 29 | return sprintf(buf, "%u\n", dev->power.power_state.event); |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | static ssize_t state_store(struct device * dev, struct device_attribute *attr, const char * buf, size_t n) | 32 | static ssize_t state_store(struct device * dev, struct device_attribute *attr, const char * buf, size_t n) |
| 33 | { | 33 | { |
| 34 | u32 state; | 34 | pm_message_t state; |
| 35 | char * rest; | 35 | char * rest; |
| 36 | int error = 0; | 36 | int error = 0; |
| 37 | 37 | ||
| 38 | state = simple_strtoul(buf, &rest, 10); | 38 | state.event = simple_strtoul(buf, &rest, 10); |
| 39 | if (*rest) | 39 | if (*rest) |
| 40 | return -EINVAL; | 40 | return -EINVAL; |
| 41 | if (state) | 41 | if (state.event) |
| 42 | error = dpm_runtime_suspend(dev, state); | 42 | error = dpm_runtime_suspend(dev, state); |
| 43 | else | 43 | else |
| 44 | dpm_runtime_resume(dev); | 44 | dpm_runtime_resume(dev); |
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index dae1bd5b8c3e..73ca8f73917d 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
| @@ -1229,7 +1229,7 @@ static int generic_ide_suspend(struct device *dev, pm_message_t state) | |||
| 1229 | rq.special = &args; | 1229 | rq.special = &args; |
| 1230 | rq.pm = &rqpm; | 1230 | rq.pm = &rqpm; |
| 1231 | rqpm.pm_step = ide_pm_state_start_suspend; | 1231 | rqpm.pm_step = ide_pm_state_start_suspend; |
| 1232 | rqpm.pm_state = state; | 1232 | rqpm.pm_state = state.event; |
| 1233 | 1233 | ||
| 1234 | return ide_do_drive_cmd(drive, &rq, ide_wait); | 1234 | return ide_do_drive_cmd(drive, &rq, ide_wait); |
| 1235 | } | 1235 | } |
| @@ -1248,7 +1248,7 @@ static int generic_ide_resume(struct device *dev) | |||
| 1248 | rq.special = &args; | 1248 | rq.special = &args; |
| 1249 | rq.pm = &rqpm; | 1249 | rq.pm = &rqpm; |
| 1250 | rqpm.pm_step = ide_pm_state_start_resume; | 1250 | rqpm.pm_step = ide_pm_state_start_resume; |
| 1251 | rqpm.pm_state = 0; | 1251 | rqpm.pm_state = PM_EVENT_ON; |
| 1252 | 1252 | ||
| 1253 | return ide_do_drive_cmd(drive, &rq, ide_head_wait); | 1253 | return ide_do_drive_cmd(drive, &rq, ide_head_wait); |
| 1254 | } | 1254 | } |
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c index 10592cec6c43..24e21b2838c1 100644 --- a/drivers/ide/pci/sc1200.c +++ b/drivers/ide/pci/sc1200.c | |||
| @@ -350,9 +350,9 @@ static int sc1200_suspend (struct pci_dev *dev, pm_message_t state) | |||
| 350 | { | 350 | { |
| 351 | ide_hwif_t *hwif = NULL; | 351 | ide_hwif_t *hwif = NULL; |
| 352 | 352 | ||
| 353 | printk("SC1200: suspend(%u)\n", state); | 353 | printk("SC1200: suspend(%u)\n", state.event); |
| 354 | 354 | ||
| 355 | if (state == 0) { | 355 | if (state.event == PM_EVENT_ON) { |
| 356 | // we only save state when going from full power to less | 356 | // we only save state when going from full power to less |
| 357 | 357 | ||
| 358 | // | 358 | // |
| @@ -386,8 +386,8 @@ static int sc1200_suspend (struct pci_dev *dev, pm_message_t state) | |||
| 386 | /* You don't need to iterate over disks -- sysfs should have done that for you already */ | 386 | /* You don't need to iterate over disks -- sysfs should have done that for you already */ |
| 387 | 387 | ||
| 388 | pci_disable_device(dev); | 388 | pci_disable_device(dev); |
| 389 | pci_set_power_state(dev,state); | 389 | pci_set_power_state(dev, pci_choose_state(dev, state)); |
| 390 | dev->current_state = state; | 390 | dev->current_state = state.event; |
| 391 | return 0; | 391 | return 0; |
| 392 | } | 392 | } |
| 393 | 393 | ||
| @@ -396,8 +396,8 @@ static int sc1200_resume (struct pci_dev *dev) | |||
| 396 | ide_hwif_t *hwif = NULL; | 396 | ide_hwif_t *hwif = NULL; |
| 397 | 397 | ||
| 398 | printk("SC1200: resume\n"); | 398 | printk("SC1200: resume\n"); |
| 399 | pci_set_power_state(dev,0); // bring chip back from sleep state | 399 | pci_set_power_state(dev, PCI_D0); // bring chip back from sleep state |
| 400 | dev->current_state = 0; | 400 | dev->current_state = PM_EVENT_ON; |
| 401 | pci_enable_device(dev); | 401 | pci_enable_device(dev); |
| 402 | // | 402 | // |
| 403 | // loop over all interfaces that are part of this pci device: | 403 | // loop over all interfaces that are part of this pci device: |
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c index d2760b8ca159..87d1f8a1f41e 100644 --- a/drivers/ide/ppc/pmac.c +++ b/drivers/ide/ppc/pmac.c | |||
| @@ -1509,7 +1509,7 @@ pmac_ide_macio_suspend(struct macio_dev *mdev, pm_message_t state) | |||
| 1509 | ide_hwif_t *hwif = (ide_hwif_t *)dev_get_drvdata(&mdev->ofdev.dev); | 1509 | ide_hwif_t *hwif = (ide_hwif_t *)dev_get_drvdata(&mdev->ofdev.dev); |
| 1510 | int rc = 0; | 1510 | int rc = 0; |
| 1511 | 1511 | ||
| 1512 | if (state != mdev->ofdev.dev.power.power_state && state >= 2) { | 1512 | if (state.event != mdev->ofdev.dev.power.power_state.event && state.event >= PM_EVENT_SUSPEND) { |
| 1513 | rc = pmac_ide_do_suspend(hwif); | 1513 | rc = pmac_ide_do_suspend(hwif); |
| 1514 | if (rc == 0) | 1514 | if (rc == 0) |
| 1515 | mdev->ofdev.dev.power.power_state = state; | 1515 | mdev->ofdev.dev.power.power_state = state; |
| @@ -1524,7 +1524,7 @@ pmac_ide_macio_resume(struct macio_dev *mdev) | |||
| 1524 | ide_hwif_t *hwif = (ide_hwif_t *)dev_get_drvdata(&mdev->ofdev.dev); | 1524 | ide_hwif_t *hwif = (ide_hwif_t *)dev_get_drvdata(&mdev->ofdev.dev); |
| 1525 | int rc = 0; | 1525 | int rc = 0; |
| 1526 | 1526 | ||
| 1527 | if (mdev->ofdev.dev.power.power_state != 0) { | 1527 | if (mdev->ofdev.dev.power.power_state.event != PM_EVENT_ON) { |
| 1528 | rc = pmac_ide_do_resume(hwif); | 1528 | rc = pmac_ide_do_resume(hwif); |
| 1529 | if (rc == 0) | 1529 | if (rc == 0) |
| 1530 | mdev->ofdev.dev.power.power_state = PMSG_ON; | 1530 | mdev->ofdev.dev.power.power_state = PMSG_ON; |
| @@ -1613,7 +1613,7 @@ pmac_ide_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 1613 | ide_hwif_t *hwif = (ide_hwif_t *)pci_get_drvdata(pdev); | 1613 | ide_hwif_t *hwif = (ide_hwif_t *)pci_get_drvdata(pdev); |
| 1614 | int rc = 0; | 1614 | int rc = 0; |
| 1615 | 1615 | ||
| 1616 | if (state != pdev->dev.power.power_state && state >= 2) { | 1616 | if (state.event != pdev->dev.power.power_state.event && state.event >= 2) { |
| 1617 | rc = pmac_ide_do_suspend(hwif); | 1617 | rc = pmac_ide_do_suspend(hwif); |
| 1618 | if (rc == 0) | 1618 | if (rc == 0) |
| 1619 | pdev->dev.power.power_state = state; | 1619 | pdev->dev.power.power_state = state; |
| @@ -1628,7 +1628,7 @@ pmac_ide_pci_resume(struct pci_dev *pdev) | |||
| 1628 | ide_hwif_t *hwif = (ide_hwif_t *)pci_get_drvdata(pdev); | 1628 | ide_hwif_t *hwif = (ide_hwif_t *)pci_get_drvdata(pdev); |
| 1629 | int rc = 0; | 1629 | int rc = 0; |
| 1630 | 1630 | ||
| 1631 | if (pdev->dev.power.power_state != 0) { | 1631 | if (pdev->dev.power.power_state.event != PM_EVENT_ON) { |
| 1632 | rc = pmac_ide_do_resume(hwif); | 1632 | rc = pmac_ide_do_resume(hwif); |
| 1633 | if (rc == 0) | 1633 | if (rc == 0) |
| 1634 | pdev->dev.power.power_state = PMSG_ON; | 1634 | pdev->dev.power.power_state = PMSG_ON; |
diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c index 7e1afca75e41..c0712a1ea5af 100644 --- a/drivers/macintosh/mediabay.c +++ b/drivers/macintosh/mediabay.c | |||
| @@ -708,7 +708,7 @@ static int __pmac media_bay_suspend(struct macio_dev *mdev, pm_message_t state) | |||
| 708 | { | 708 | { |
| 709 | struct media_bay_info *bay = macio_get_drvdata(mdev); | 709 | struct media_bay_info *bay = macio_get_drvdata(mdev); |
| 710 | 710 | ||
| 711 | if (state != mdev->ofdev.dev.power.power_state && state == PM_SUSPEND_MEM) { | 711 | if (state.event != mdev->ofdev.dev.power.power_state.event && state.event == PM_EVENT_SUSPEND) { |
| 712 | down(&bay->lock); | 712 | down(&bay->lock); |
| 713 | bay->sleeping = 1; | 713 | bay->sleeping = 1; |
| 714 | set_mb_power(bay, 0); | 714 | set_mb_power(bay, 0); |
| @@ -723,7 +723,7 @@ static int __pmac media_bay_resume(struct macio_dev *mdev) | |||
| 723 | { | 723 | { |
| 724 | struct media_bay_info *bay = macio_get_drvdata(mdev); | 724 | struct media_bay_info *bay = macio_get_drvdata(mdev); |
| 725 | 725 | ||
| 726 | if (mdev->ofdev.dev.power.power_state != 0) { | 726 | if (mdev->ofdev.dev.power.power_state.event != PM_EVENT_ON) { |
| 727 | mdev->ofdev.dev.power.power_state = PMSG_ON; | 727 | mdev->ofdev.dev.power.power_state = PMSG_ON; |
| 728 | 728 | ||
| 729 | /* We re-enable the bay using it's previous content | 729 | /* We re-enable the bay using it's previous content |
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index 4a0a0ad2d03c..645a2e5c70ab 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c | |||
| @@ -3065,7 +3065,7 @@ static int pmu_sys_suspended = 0; | |||
| 3065 | 3065 | ||
| 3066 | static int pmu_sys_suspend(struct sys_device *sysdev, pm_message_t state) | 3066 | static int pmu_sys_suspend(struct sys_device *sysdev, pm_message_t state) |
| 3067 | { | 3067 | { |
| 3068 | if (state != PM_SUSPEND_DISK || pmu_sys_suspended) | 3068 | if (state.event != PM_EVENT_SUSPEND || pmu_sys_suspended) |
| 3069 | return 0; | 3069 | return 0; |
| 3070 | 3070 | ||
| 3071 | /* Suspend PMU event interrupts */ | 3071 | /* Suspend PMU event interrupts */ |
diff --git a/drivers/media/dvb/cinergyT2/cinergyT2.c b/drivers/media/dvb/cinergyT2/cinergyT2.c index 7d8b3cad350b..9ea5747b1211 100644 --- a/drivers/media/dvb/cinergyT2/cinergyT2.c +++ b/drivers/media/dvb/cinergyT2/cinergyT2.c | |||
| @@ -888,7 +888,7 @@ static int cinergyt2_suspend (struct usb_interface *intf, pm_message_t state) | |||
| 888 | if (down_interruptible(&cinergyt2->sem)) | 888 | if (down_interruptible(&cinergyt2->sem)) |
| 889 | return -ERESTARTSYS; | 889 | return -ERESTARTSYS; |
| 890 | 890 | ||
| 891 | if (state > 0) { /* state 0 seems to mean DEVICE_PM_ON */ | 891 | if (state.event > PM_EVENT_ON) { |
| 892 | struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf); | 892 | struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf); |
| 893 | #ifdef ENABLE_RC | 893 | #ifdef ENABLE_RC |
| 894 | cancel_delayed_work(&cinergyt2->rc_query_work); | 894 | cancel_delayed_work(&cinergyt2->rc_query_work); |
diff --git a/drivers/net/irda/vlsi_ir.c b/drivers/net/irda/vlsi_ir.c index 4be95398bac4..6d9de626c967 100644 --- a/drivers/net/irda/vlsi_ir.c +++ b/drivers/net/irda/vlsi_ir.c | |||
| @@ -1757,12 +1757,12 @@ static int vlsi_irda_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 1757 | idev = ndev->priv; | 1757 | idev = ndev->priv; |
| 1758 | down(&idev->sem); | 1758 | down(&idev->sem); |
| 1759 | if (pdev->current_state != 0) { /* already suspended */ | 1759 | if (pdev->current_state != 0) { /* already suspended */ |
| 1760 | if (state > pdev->current_state) { /* simply go deeper */ | 1760 | if (state.event > pdev->current_state) { /* simply go deeper */ |
| 1761 | pci_set_power_state(pdev,state); | 1761 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); |
| 1762 | pdev->current_state = state; | 1762 | pdev->current_state = state.event; |
| 1763 | } | 1763 | } |
| 1764 | else | 1764 | else |
| 1765 | IRDA_ERROR("%s - %s: invalid suspend request %u -> %u\n", __FUNCTION__, PCIDEV_NAME(pdev), pdev->current_state, state); | 1765 | IRDA_ERROR("%s - %s: invalid suspend request %u -> %u\n", __FUNCTION__, PCIDEV_NAME(pdev), pdev->current_state, state.event); |
| 1766 | up(&idev->sem); | 1766 | up(&idev->sem); |
| 1767 | return 0; | 1767 | return 0; |
| 1768 | } | 1768 | } |
| @@ -1777,7 +1777,7 @@ static int vlsi_irda_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 1777 | } | 1777 | } |
| 1778 | 1778 | ||
| 1779 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | 1779 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); |
| 1780 | pdev->current_state = state; | 1780 | pdev->current_state = state.event; |
| 1781 | idev->resume_ok = 1; | 1781 | idev->resume_ok = 1; |
| 1782 | up(&idev->sem); | 1782 | up(&idev->sem); |
| 1783 | return 0; | 1783 | return 0; |
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index 6db1fb6461de..abac1e40154b 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c | |||
| @@ -2239,7 +2239,7 @@ static void airo_read_stats(struct airo_info *ai) { | |||
| 2239 | u32 *vals = stats_rid.vals; | 2239 | u32 *vals = stats_rid.vals; |
| 2240 | 2240 | ||
| 2241 | clear_bit(JOB_STATS, &ai->flags); | 2241 | clear_bit(JOB_STATS, &ai->flags); |
| 2242 | if (ai->power) { | 2242 | if (ai->power.event) { |
| 2243 | up(&ai->sem); | 2243 | up(&ai->sem); |
| 2244 | return; | 2244 | return; |
| 2245 | } | 2245 | } |
| @@ -2969,7 +2969,7 @@ static int airo_thread(void *data) { | |||
| 2969 | break; | 2969 | break; |
| 2970 | } | 2970 | } |
| 2971 | 2971 | ||
| 2972 | if (ai->power || test_bit(FLAG_FLASHING, &ai->flags)) { | 2972 | if (ai->power.event || test_bit(FLAG_FLASHING, &ai->flags)) { |
| 2973 | up(&ai->sem); | 2973 | up(&ai->sem); |
| 2974 | continue; | 2974 | continue; |
| 2975 | } | 2975 | } |
| @@ -5521,7 +5521,7 @@ static int airo_pci_resume(struct pci_dev *pdev) | |||
| 5521 | pci_restore_state(pdev); | 5521 | pci_restore_state(pdev); |
| 5522 | pci_enable_wake(pdev, pci_choose_state(pdev, ai->power), 0); | 5522 | pci_enable_wake(pdev, pci_choose_state(pdev, ai->power), 0); |
| 5523 | 5523 | ||
| 5524 | if (ai->power > 1) { | 5524 | if (ai->power.event > 1) { |
| 5525 | reset_card(dev, 0); | 5525 | reset_card(dev, 0); |
| 5526 | mpi_init_descriptors(ai); | 5526 | mpi_init_descriptors(ai); |
| 5527 | setup_card(ai, dev->dev_addr, 0); | 5527 | setup_card(ai, dev->dev_addr, 0); |
| @@ -7123,7 +7123,7 @@ static int airo_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
| 7123 | int rc = 0; | 7123 | int rc = 0; |
| 7124 | struct airo_info *ai = (struct airo_info *)dev->priv; | 7124 | struct airo_info *ai = (struct airo_info *)dev->priv; |
| 7125 | 7125 | ||
| 7126 | if (ai->power) | 7126 | if (ai->power.event) |
| 7127 | return 0; | 7127 | return 0; |
| 7128 | 7128 | ||
| 7129 | switch (cmd) { | 7129 | switch (cmd) { |
| @@ -7202,7 +7202,7 @@ static void airo_read_wireless_stats(struct airo_info *local) | |||
| 7202 | 7202 | ||
| 7203 | /* Get stats out of the card */ | 7203 | /* Get stats out of the card */ |
| 7204 | clear_bit(JOB_WSTATS, &local->flags); | 7204 | clear_bit(JOB_WSTATS, &local->flags); |
| 7205 | if (local->power) { | 7205 | if (local->power.event) { |
| 7206 | up(&local->sem); | 7206 | up(&local->sem); |
| 7207 | return; | 7207 | return; |
| 7208 | } | 7208 | } |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 1b34fc56067e..c62d2f043397 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
| @@ -333,13 +333,17 @@ pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state) | |||
| 333 | if (platform_pci_choose_state) { | 333 | if (platform_pci_choose_state) { |
| 334 | ret = platform_pci_choose_state(dev, state); | 334 | ret = platform_pci_choose_state(dev, state); |
| 335 | if (ret >= 0) | 335 | if (ret >= 0) |
| 336 | state = ret; | 336 | state.event = ret; |
| 337 | } | 337 | } |
| 338 | switch (state) { | 338 | |
| 339 | case 0: return PCI_D0; | 339 | switch (state.event) { |
| 340 | case 3: return PCI_D3hot; | 340 | case PM_EVENT_ON: |
| 341 | return PCI_D0; | ||
| 342 | case PM_EVENT_FREEZE: | ||
| 343 | case PM_EVENT_SUSPEND: | ||
| 344 | return PCI_D3hot; | ||
| 341 | default: | 345 | default: |
| 342 | printk("They asked me for state %d\n", state); | 346 | printk("They asked me for state %d\n", state.event); |
| 343 | BUG(); | 347 | BUG(); |
| 344 | } | 348 | } |
| 345 | return PCI_D0; | 349 | return PCI_D0; |
diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c index ff1933298da6..a4857db4f9b8 100644 --- a/drivers/scsi/mesh.c +++ b/drivers/scsi/mesh.c | |||
| @@ -1766,7 +1766,7 @@ static int mesh_suspend(struct macio_dev *mdev, pm_message_t state) | |||
| 1766 | struct mesh_state *ms = (struct mesh_state *)macio_get_drvdata(mdev); | 1766 | struct mesh_state *ms = (struct mesh_state *)macio_get_drvdata(mdev); |
| 1767 | unsigned long flags; | 1767 | unsigned long flags; |
| 1768 | 1768 | ||
| 1769 | if (state == mdev->ofdev.dev.power.power_state || state < 2) | 1769 | if (state.event == mdev->ofdev.dev.power.power_state.event || state.event < 2) |
| 1770 | return 0; | 1770 | return 0; |
| 1771 | 1771 | ||
| 1772 | scsi_block_requests(ms->host); | 1772 | scsi_block_requests(ms->host); |
| @@ -1791,7 +1791,7 @@ static int mesh_resume(struct macio_dev *mdev) | |||
| 1791 | struct mesh_state *ms = (struct mesh_state *)macio_get_drvdata(mdev); | 1791 | struct mesh_state *ms = (struct mesh_state *)macio_get_drvdata(mdev); |
| 1792 | unsigned long flags; | 1792 | unsigned long flags; |
| 1793 | 1793 | ||
| 1794 | if (mdev->ofdev.dev.power.power_state == 0) | 1794 | if (mdev->ofdev.dev.power.power_state.event == PM_EVENT_ON) |
| 1795 | return 0; | 1795 | return 0; |
| 1796 | 1796 | ||
| 1797 | set_mesh_power(ms, 1); | 1797 | set_mesh_power(ms, 1); |
| @@ -1802,7 +1802,7 @@ static int mesh_resume(struct macio_dev *mdev) | |||
| 1802 | enable_irq(ms->meshintr); | 1802 | enable_irq(ms->meshintr); |
| 1803 | scsi_unblock_requests(ms->host); | 1803 | scsi_unblock_requests(ms->host); |
| 1804 | 1804 | ||
| 1805 | mdev->ofdev.dev.power.power_state = 0; | 1805 | mdev->ofdev.dev.power.power_state.event = PM_EVENT_ON; |
| 1806 | 1806 | ||
| 1807 | return 0; | 1807 | return 0; |
| 1808 | } | 1808 | } |
diff --git a/drivers/serial/pmac_zilog.c b/drivers/serial/pmac_zilog.c index 5bfde99e245e..5ddd8ab1f108 100644 --- a/drivers/serial/pmac_zilog.c +++ b/drivers/serial/pmac_zilog.c | |||
| @@ -1600,7 +1600,7 @@ static int pmz_suspend(struct macio_dev *mdev, pm_message_t pm_state) | |||
| 1600 | return 0; | 1600 | return 0; |
| 1601 | } | 1601 | } |
| 1602 | 1602 | ||
| 1603 | if (pm_state == mdev->ofdev.dev.power.power_state || pm_state < 2) | 1603 | if (pm_state.event == mdev->ofdev.dev.power.power_state.event) |
| 1604 | return 0; | 1604 | return 0; |
| 1605 | 1605 | ||
| 1606 | pmz_debug("suspend, switching to state %d\n", pm_state); | 1606 | pmz_debug("suspend, switching to state %d\n", pm_state); |
| @@ -1660,7 +1660,7 @@ static int pmz_resume(struct macio_dev *mdev) | |||
| 1660 | if (uap == NULL) | 1660 | if (uap == NULL) |
| 1661 | return 0; | 1661 | return 0; |
| 1662 | 1662 | ||
| 1663 | if (mdev->ofdev.dev.power.power_state == 0) | 1663 | if (mdev->ofdev.dev.power.power_state.event == PM_EVENT_ON) |
| 1664 | return 0; | 1664 | return 0; |
| 1665 | 1665 | ||
| 1666 | pmz_debug("resume, switching to state 0\n"); | 1666 | pmz_debug("resume, switching to state 0\n"); |
| @@ -1713,7 +1713,7 @@ static int pmz_resume(struct macio_dev *mdev) | |||
| 1713 | 1713 | ||
| 1714 | pmz_debug("resume, switching complete\n"); | 1714 | pmz_debug("resume, switching complete\n"); |
| 1715 | 1715 | ||
| 1716 | mdev->ofdev.dev.power.power_state = 0; | 1716 | mdev->ofdev.dev.power.power_state.event = PM_EVENT_ON; |
| 1717 | 1717 | ||
| 1718 | return 0; | 1718 | return 0; |
| 1719 | } | 1719 | } |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index c3e46d24a37e..c9412daff682 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
| @@ -1570,7 +1570,7 @@ static int __usb_suspend_device (struct usb_device *udev, int port1, | |||
| 1570 | struct usb_driver *driver; | 1570 | struct usb_driver *driver; |
| 1571 | 1571 | ||
| 1572 | intf = udev->actconfig->interface[i]; | 1572 | intf = udev->actconfig->interface[i]; |
| 1573 | if (state <= intf->dev.power.power_state) | 1573 | if (state.event <= intf->dev.power.power_state.event) |
| 1574 | continue; | 1574 | continue; |
| 1575 | if (!intf->dev.driver) | 1575 | if (!intf->dev.driver) |
| 1576 | continue; | 1576 | continue; |
| @@ -1578,11 +1578,11 @@ static int __usb_suspend_device (struct usb_device *udev, int port1, | |||
| 1578 | 1578 | ||
| 1579 | if (driver->suspend) { | 1579 | if (driver->suspend) { |
| 1580 | status = driver->suspend(intf, state); | 1580 | status = driver->suspend(intf, state); |
| 1581 | if (intf->dev.power.power_state != state | 1581 | if (intf->dev.power.power_state.event != state.event |
| 1582 | || status) | 1582 | || status) |
| 1583 | dev_err(&intf->dev, | 1583 | dev_err(&intf->dev, |
| 1584 | "suspend %d fail, code %d\n", | 1584 | "suspend %d fail, code %d\n", |
| 1585 | state, status); | 1585 | state.event, status); |
| 1586 | } | 1586 | } |
| 1587 | 1587 | ||
| 1588 | /* only drivers with suspend() can ever resume(); | 1588 | /* only drivers with suspend() can ever resume(); |
| @@ -1595,7 +1595,7 @@ static int __usb_suspend_device (struct usb_device *udev, int port1, | |||
| 1595 | * since we know every driver's probe/disconnect works | 1595 | * since we know every driver's probe/disconnect works |
| 1596 | * even for drivers that can't suspend. | 1596 | * even for drivers that can't suspend. |
| 1597 | */ | 1597 | */ |
| 1598 | if (!driver->suspend || state > PM_SUSPEND_MEM) { | 1598 | if (!driver->suspend || state.event > PM_EVENT_FREEZE) { |
| 1599 | #if 1 | 1599 | #if 1 |
| 1600 | dev_warn(&intf->dev, "resume is unsafe!\n"); | 1600 | dev_warn(&intf->dev, "resume is unsafe!\n"); |
| 1601 | #else | 1601 | #else |
| @@ -1616,7 +1616,7 @@ static int __usb_suspend_device (struct usb_device *udev, int port1, | |||
| 1616 | * policies (when HNP doesn't apply) once we have mechanisms to | 1616 | * policies (when HNP doesn't apply) once we have mechanisms to |
| 1617 | * turn power back on! (Likely not before 2.7...) | 1617 | * turn power back on! (Likely not before 2.7...) |
| 1618 | */ | 1618 | */ |
| 1619 | if (state > PM_SUSPEND_MEM) { | 1619 | if (state.event > PM_EVENT_FREEZE) { |
| 1620 | dev_warn(&udev->dev, "no poweroff yet, suspending instead\n"); | 1620 | dev_warn(&udev->dev, "no poweroff yet, suspending instead\n"); |
| 1621 | } | 1621 | } |
| 1622 | 1622 | ||
| @@ -1733,7 +1733,7 @@ static int finish_port_resume(struct usb_device *udev) | |||
| 1733 | struct usb_driver *driver; | 1733 | struct usb_driver *driver; |
| 1734 | 1734 | ||
| 1735 | intf = udev->actconfig->interface[i]; | 1735 | intf = udev->actconfig->interface[i]; |
| 1736 | if (intf->dev.power.power_state == PMSG_ON) | 1736 | if (intf->dev.power.power_state.event == PM_EVENT_ON) |
| 1737 | continue; | 1737 | continue; |
| 1738 | if (!intf->dev.driver) { | 1738 | if (!intf->dev.driver) { |
| 1739 | /* FIXME maybe force to alt 0 */ | 1739 | /* FIXME maybe force to alt 0 */ |
| @@ -1747,11 +1747,11 @@ static int finish_port_resume(struct usb_device *udev) | |||
| 1747 | 1747 | ||
| 1748 | /* can we do better than just logging errors? */ | 1748 | /* can we do better than just logging errors? */ |
| 1749 | status = driver->resume(intf); | 1749 | status = driver->resume(intf); |
| 1750 | if (intf->dev.power.power_state != PMSG_ON | 1750 | if (intf->dev.power.power_state.event != PM_EVENT_ON |
| 1751 | || status) | 1751 | || status) |
| 1752 | dev_dbg(&intf->dev, | 1752 | dev_dbg(&intf->dev, |
| 1753 | "resume fail, state %d code %d\n", | 1753 | "resume fail, state %d code %d\n", |
| 1754 | intf->dev.power.power_state, status); | 1754 | intf->dev.power.power_state.event, status); |
| 1755 | } | 1755 | } |
| 1756 | status = 0; | 1756 | status = 0; |
| 1757 | 1757 | ||
| @@ -1934,7 +1934,7 @@ static int hub_resume(struct usb_interface *intf) | |||
| 1934 | unsigned port1; | 1934 | unsigned port1; |
| 1935 | int status; | 1935 | int status; |
| 1936 | 1936 | ||
| 1937 | if (intf->dev.power.power_state == PM_SUSPEND_ON) | 1937 | if (intf->dev.power.power_state.event == PM_EVENT_ON) |
| 1938 | return 0; | 1938 | return 0; |
| 1939 | 1939 | ||
| 1940 | for (port1 = 1; port1 <= hdev->maxchild; port1++) { | 1940 | for (port1 = 1; port1 <= hdev->maxchild; port1++) { |
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 99c85d2f92da..2cddd8a00437 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c | |||
| @@ -1400,7 +1400,7 @@ static int usb_generic_suspend(struct device *dev, pm_message_t message) | |||
| 1400 | driver = to_usb_driver(dev->driver); | 1400 | driver = to_usb_driver(dev->driver); |
| 1401 | 1401 | ||
| 1402 | /* there's only one USB suspend state */ | 1402 | /* there's only one USB suspend state */ |
| 1403 | if (intf->dev.power.power_state) | 1403 | if (intf->dev.power.power_state.event) |
| 1404 | return 0; | 1404 | return 0; |
| 1405 | 1405 | ||
| 1406 | if (driver->suspend) | 1406 | if (driver->suspend) |
diff --git a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c index b01efb6b36f6..65ac9fef3a7c 100644 --- a/drivers/usb/host/ehci-dbg.c +++ b/drivers/usb/host/ehci-dbg.c | |||
| @@ -641,7 +641,7 @@ show_registers (struct class_device *class_dev, char *buf) | |||
| 641 | 641 | ||
| 642 | spin_lock_irqsave (&ehci->lock, flags); | 642 | spin_lock_irqsave (&ehci->lock, flags); |
| 643 | 643 | ||
| 644 | if (bus->controller->power.power_state) { | 644 | if (bus->controller->power.power_state.event) { |
| 645 | size = scnprintf (next, size, | 645 | size = scnprintf (next, size, |
| 646 | "bus %s, device %s (driver " DRIVER_VERSION ")\n" | 646 | "bus %s, device %s (driver " DRIVER_VERSION ")\n" |
| 647 | "%s\n" | 647 | "%s\n" |
diff --git a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c index c58408c95c3d..447f488f5d93 100644 --- a/drivers/usb/host/ohci-dbg.c +++ b/drivers/usb/host/ohci-dbg.c | |||
| @@ -631,7 +631,7 @@ show_registers (struct class_device *class_dev, char *buf) | |||
| 631 | hcd->product_desc, | 631 | hcd->product_desc, |
| 632 | hcd_name); | 632 | hcd_name); |
| 633 | 633 | ||
| 634 | if (bus->controller->power.power_state) { | 634 | if (bus->controller->power.power_state.event) { |
| 635 | size -= scnprintf (next, size, | 635 | size -= scnprintf (next, size, |
| 636 | "SUSPENDED (no register access)\n"); | 636 | "SUSPENDED (no register access)\n"); |
| 637 | goto done; | 637 | goto done; |
diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c index 7a890a65f55d..80eaf659c198 100644 --- a/drivers/usb/host/sl811-hcd.c +++ b/drivers/usb/host/sl811-hcd.c | |||
| @@ -1781,9 +1781,9 @@ sl811h_suspend(struct device *dev, pm_message_t state, u32 phase) | |||
| 1781 | if (phase != SUSPEND_POWER_DOWN) | 1781 | if (phase != SUSPEND_POWER_DOWN) |
| 1782 | return retval; | 1782 | return retval; |
| 1783 | 1783 | ||
| 1784 | if (state <= PM_SUSPEND_MEM) | 1784 | if (state.event == PM_EVENT_FREEZE) |
| 1785 | retval = sl811h_hub_suspend(hcd); | 1785 | retval = sl811h_hub_suspend(hcd); |
| 1786 | else | 1786 | else if (state.event == PM_EVENT_SUSPEND) |
| 1787 | port_power(sl811, 0); | 1787 | port_power(sl811, 0); |
| 1788 | if (retval == 0) | 1788 | if (retval == 0) |
| 1789 | dev->power.power_state = state; | 1789 | dev->power.power_state = state; |
| @@ -1802,7 +1802,7 @@ sl811h_resume(struct device *dev, u32 phase) | |||
| 1802 | /* with no "check to see if VBUS is still powered" board hook, | 1802 | /* with no "check to see if VBUS is still powered" board hook, |
| 1803 | * let's assume it'd only be powered to enable remote wakeup. | 1803 | * let's assume it'd only be powered to enable remote wakeup. |
| 1804 | */ | 1804 | */ |
| 1805 | if (dev->power.power_state > PM_SUSPEND_MEM | 1805 | if (dev->power.power_state.event == PM_EVENT_SUSPEND |
| 1806 | || !hcd->can_wakeup) { | 1806 | || !hcd->can_wakeup) { |
| 1807 | sl811->port1 = 0; | 1807 | sl811->port1 = 0; |
| 1808 | port_power(sl811, 1); | 1808 | port_power(sl811, 1); |
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c index cda7249a90b2..fd7fb98e4b20 100644 --- a/drivers/usb/misc/usbtest.c +++ b/drivers/usb/misc/usbtest.c | |||
| @@ -1533,7 +1533,7 @@ usbtest_ioctl (struct usb_interface *intf, unsigned int code, void *buf) | |||
| 1533 | if (down_interruptible (&dev->sem)) | 1533 | if (down_interruptible (&dev->sem)) |
| 1534 | return -ERESTARTSYS; | 1534 | return -ERESTARTSYS; |
| 1535 | 1535 | ||
| 1536 | if (intf->dev.power.power_state != PMSG_ON) { | 1536 | if (intf->dev.power.power_state.event != PM_EVENT_ON) { |
| 1537 | up (&dev->sem); | 1537 | up (&dev->sem); |
| 1538 | return -EHOSTUNREACH; | 1538 | return -EHOSTUNREACH; |
| 1539 | } | 1539 | } |
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 | */ |
diff --git a/drivers/video/chipsfb.c b/drivers/video/chipsfb.c index e75a965ec760..4131243cfdf8 100644 --- a/drivers/video/chipsfb.c +++ b/drivers/video/chipsfb.c | |||
| @@ -462,9 +462,9 @@ static int chipsfb_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 462 | { | 462 | { |
| 463 | struct fb_info *p = pci_get_drvdata(pdev); | 463 | struct fb_info *p = pci_get_drvdata(pdev); |
| 464 | 464 | ||
| 465 | if (state == pdev->dev.power.power_state) | 465 | if (state.event == pdev->dev.power.power_state.event) |
| 466 | return 0; | 466 | return 0; |
| 467 | if (state != PM_SUSPEND_MEM) | 467 | if (state.event != PM_SUSPEND_MEM) |
| 468 | goto done; | 468 | goto done; |
| 469 | 469 | ||
| 470 | acquire_console_sem(); | 470 | acquire_console_sem(); |
diff --git a/drivers/video/i810/i810_main.c b/drivers/video/i810/i810_main.c index 7513fb9b19cf..6db183462b92 100644 --- a/drivers/video/i810/i810_main.c +++ b/drivers/video/i810/i810_main.c | |||
| @@ -1506,12 +1506,12 @@ static int i810fb_suspend(struct pci_dev *dev, pm_message_t state) | |||
| 1506 | struct i810fb_par *par = (struct i810fb_par *) info->par; | 1506 | struct i810fb_par *par = (struct i810fb_par *) info->par; |
| 1507 | int blank = 0, prev_state = par->cur_state; | 1507 | int blank = 0, prev_state = par->cur_state; |
| 1508 | 1508 | ||
| 1509 | if (state == prev_state) | 1509 | if (state.event == prev_state) |
| 1510 | return 0; | 1510 | return 0; |
| 1511 | 1511 | ||
| 1512 | par->cur_state = state; | 1512 | par->cur_state = state.event; |
| 1513 | 1513 | ||
| 1514 | switch (state) { | 1514 | switch (state.event) { |
| 1515 | case 1: | 1515 | case 1: |
| 1516 | blank = VESA_VSYNC_SUSPEND; | 1516 | blank = VESA_VSYNC_SUSPEND; |
| 1517 | break; | 1517 | break; |
diff --git a/include/linux/pm.h b/include/linux/pm.h index 7aeb208ed713..5cfb07648eca 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -186,7 +186,9 @@ extern int pm_suspend(suspend_state_t state); | |||
| 186 | 186 | ||
| 187 | struct device; | 187 | struct device; |
| 188 | 188 | ||
| 189 | typedef u32 __bitwise pm_message_t; | 189 | typedef struct pm_message { |
| 190 | int event; | ||
| 191 | } pm_message_t; | ||
| 190 | 192 | ||
| 191 | /* | 193 | /* |
| 192 | * There are 4 important states driver can be in: | 194 | * There are 4 important states driver can be in: |
| @@ -207,9 +209,13 @@ typedef u32 __bitwise pm_message_t; | |||
| 207 | * or something similar soon. | 209 | * or something similar soon. |
| 208 | */ | 210 | */ |
| 209 | 211 | ||
| 210 | #define PMSG_FREEZE ((__force pm_message_t) 3) | 212 | #define PM_EVENT_ON 0 |
| 211 | #define PMSG_SUSPEND ((__force pm_message_t) 3) | 213 | #define PM_EVENT_FREEZE 1 |
| 212 | #define PMSG_ON ((__force pm_message_t) 0) | 214 | #define PM_EVENT_SUSPEND 2 |
| 215 | |||
| 216 | #define PMSG_FREEZE ((struct pm_message){ .event = PM_EVENT_FREEZE, }) | ||
| 217 | #define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, }) | ||
| 218 | #define PMSG_ON ((struct pm_message){ .event = PM_EVENT_ON, }) | ||
| 213 | 219 | ||
| 214 | struct dev_pm_info { | 220 | struct dev_pm_info { |
| 215 | pm_message_t power_state; | 221 | pm_message_t power_state; |
