diff options
author | Greg KH <greg@press.(none)> | 2005-10-25 10:58:57 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-10-25 10:58:57 -0700 |
commit | 9d34c19812e9722c422c4986930ea36da950bd42 (patch) | |
tree | 3d43979871d5dd8baa27e16e2871e5620db0f9fa /driver | |
parent | ac7c0c9c9d1de1db3acbf3010cc87c8e22a47c77 (diff) | |
download | patches-9d34c19812e9722c422c4986930ea36da950bd42.tar.gz |
add rmk's patch
Diffstat (limited to 'driver')
-rw-r--r-- | driver/driver-model-get-rid-of-the-obsolete-tri-level-suspend-resume-callbacks.patch | 2344 |
1 files changed, 2344 insertions, 0 deletions
diff --git a/driver/driver-model-get-rid-of-the-obsolete-tri-level-suspend-resume-callbacks.patch b/driver/driver-model-get-rid-of-the-obsolete-tri-level-suspend-resume-callbacks.patch new file mode 100644 index 0000000000000..524e1a5433790 --- /dev/null +++ b/driver/driver-model-get-rid-of-the-obsolete-tri-level-suspend-resume-callbacks.patch @@ -0,0 +1,2344 @@ +From foo@baz Thu Sep 29 10:06:31 2005 +From: Russell King <rmk+kernel@arm.linux.org.uk> +Subject: DRIVER MODEL: Get rid of the obsolete tri-level suspend/resume callbacks + +In PM v1, all devices were called at SUSPEND_DISABLE level. Then +all devices were called at SUSPEND_SAVE_STATE level, and finally +SUSPEND_POWER_DOWN level. However, with PM v2, to maintain +compatibility for platform devices, I arranged for the PM v2 +suspend/resume callbacks to call the old PM v1 suspend/resume +callbacks three times with each level in order so that existing +drivers continued to work. + +Since this is obsolete infrastructure which is no longer necessary, +we can remove it. Here's an (untested) patch to do exactly that. + +Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + Documentation/driver-model/driver.txt | 60 +--------------------------------- + arch/arm/common/locomo.c | 10 +---- + arch/arm/common/sa1111.c | 11 +----- + arch/arm/common/scoop.c | 24 ++++++------- + arch/arm/mach-pxa/corgi_ssp.c | 24 ++++++------- + arch/arm/mach-sa1100/neponset.c | 28 ++++++--------- + drivers/base/platform.c | 20 +++-------- + drivers/char/s3c2410-rtc.c | 20 +++++------ + drivers/char/sonypi.c | 14 +++---- + drivers/char/watchdog/s3c2410_wdt.c | 34 ++++++++----------- + drivers/hwmon/hdaps.c | 6 +-- + drivers/i2c/busses/i2c-s3c2410.c | 8 +--- + drivers/i2c/i2c-core.c | 4 +- + drivers/ieee1394/nodemgr.c | 4 +- + drivers/input/keyboard/corgikbd.c | 22 +++++------- + drivers/input/keyboard/spitzkbd.c | 44 +++++++++++------------- + drivers/input/serio/i8042.c | 13 ++----- + drivers/input/touchscreen/corgi_ts.c | 38 ++++++++++----------- + drivers/media/video/msp3400.c | 8 ++-- + drivers/media/video/tda9887.c | 4 +- + drivers/media/video/tuner-core.c | 4 +- + drivers/mfd/mcp-sa11x0.c | 20 +++++------ + drivers/mmc/pxamci.c | 8 ++-- + drivers/mmc/wbsd.c | 4 +- + drivers/mtd/maps/sa1100-flash.c | 8 ++-- + drivers/net/dm9000.c | 8 ++-- + drivers/net/irda/sa1100_ir.c | 8 ++-- + drivers/net/irda/smsc-ircc2.c | 12 +++--- + drivers/net/phy/mdio_bus.c | 20 +++-------- + drivers/net/smc91x.c | 8 ++-- + drivers/pci/pcie/portdrv_core.c | 4 +- + drivers/pcmcia/au1000_generic.c | 21 +---------- + drivers/pcmcia/hd64465_ss.c | 20 +---------- + drivers/pcmcia/i82365.c | 20 +---------- + drivers/pcmcia/m32r_cfc.c | 21 +---------- + drivers/pcmcia/m32r_pcc.c | 21 +---------- + drivers/pcmcia/omap_cf.c | 18 +--------- + drivers/pcmcia/pxa2xx_base.c | 26 +++----------- + drivers/pcmcia/sa1100_generic.c | 20 +---------- + drivers/pcmcia/tcic.c | 20 +---------- + drivers/pcmcia/vrc4171_card.c | 24 +------------ + drivers/serial/8250.c | 10 +---- + drivers/serial/imx.c | 8 ++-- + drivers/serial/mpc52xx_uart.c | 8 ++-- + drivers/serial/pxa.c | 8 ++-- + drivers/serial/s3c2410.c | 9 ++--- + drivers/serial/sa1100.c | 8 ++-- + drivers/serial/vr41xx_siu.c | 10 +---- + drivers/usb/gadget/dummy_hcd.c | 22 ++---------- + drivers/usb/gadget/omap_udc.c | 9 +---- + drivers/usb/gadget/pxa2xx_udc.c | 17 ++++----- + drivers/usb/host/isp116x-hcd.c | 14 ++----- + drivers/usb/host/ohci-omap.c | 10 +---- + drivers/usb/host/ohci-pxa27x.c | 4 +- + drivers/usb/host/sl811-hcd.c | 10 +---- + drivers/video/backlight/corgi_bl.c | 10 ++--- + drivers/video/imxfb.c | 10 ++--- + drivers/video/pxafb.c | 10 ++--- + drivers/video/s1d13xxxfb.c | 7 +-- + drivers/video/s3c2410fb.c | 29 ++++++---------- + drivers/video/sa1100fb.c | 10 ++--- + drivers/video/w100fb.c | 48 +++++++++++++-------------- + include/linux/device.h | 17 +-------- + sound/arm/pxa2xx-ac97.c | 8 ++-- + sound/core/init.c | 14 ++----- + sound/pci/ac97/ac97_bus.c | 6 ++- + 66 files changed, 330 insertions(+), 697 deletions(-) + +--- gregkh-2.6.orig/Documentation/driver-model/driver.txt ++++ gregkh-2.6/Documentation/driver-model/driver.txt +@@ -196,67 +196,11 @@ it into a supported low-power state. + + int (*suspend) (struct device * dev, pm_message_t state, u32 level); + +-suspend is called to put the device in a low power state. There are +-several stages to successfully suspending a device, which is denoted in +-the @level parameter. Breaking the suspend transition into several +-stages affords the platform flexibility in performing device power +-management based on the requirements of the system and the +-user-defined policy. +- +-SUSPEND_NOTIFY notifies the device that a suspend transition is about +-to happen. This happens on system power state transitions to verify +-that all devices can successfully suspend. +- +-A driver may choose to fail on this call, which should cause the +-entire suspend transition to fail. A driver should fail only if it +-knows that the device will not be able to be resumed properly when the +-system wakes up again. It could also fail if it somehow determines it +-is in the middle of an operation too important to stop. +- +-SUSPEND_DISABLE tells the device to stop I/O transactions. When it +-stops transactions, or what it should do with unfinished transactions +-is a policy of the driver. After this call, the driver should not +-accept any other I/O requests. +- +-SUSPEND_SAVE_STATE tells the device to save the context of the +-hardware. This includes any bus-specific hardware state and +-device-specific hardware state. A pointer to this saved state can be +-stored in the device's saved_state field. +- +-SUSPEND_POWER_DOWN tells the driver to place the device in the low +-power state requested. +- +-Whether suspend is called with a given level is a policy of the +-platform. Some levels may be omitted; drivers must not assume the +-reception of any level. However, all levels must be called in the +-order above; i.e. notification will always come before disabling; +-disabling the device will come before suspending the device. +- +-All calls are made with interrupts enabled, except for the +-SUSPEND_POWER_DOWN level. ++suspend is called to put the device in a low power state. + + int (*resume) (struct device * dev, u32 level); + +-Resume is used to bring a device back from a low power state. Like the +-suspend transition, it happens in several stages. +- +-RESUME_POWER_ON tells the driver to set the power state to the state +-before the suspend call (The device could have already been in a low +-power state before the suspend call to put in a lower power state). +- +-RESUME_RESTORE_STATE tells the driver to restore the state saved by +-the SUSPEND_SAVE_STATE suspend call. +- +-RESUME_ENABLE tells the driver to start accepting I/O transactions +-again. Depending on driver policy, the device may already have pending +-I/O requests. +- +-RESUME_POWER_ON is called with interrupts disabled. The other resume +-levels are called with interrupts enabled. +- +-As with the various suspend stages, the driver must not assume that +-any other resume calls have been or will be made. Each call should be +-self-contained and not dependent on any external state. ++Resume is used to bring a device back from a low power state. + + + Attributes +--- gregkh-2.6.orig/arch/arm/common/locomo.c ++++ gregkh-2.6/arch/arm/common/locomo.c +@@ -550,15 +550,12 @@ struct locomo_save_data { + u16 LCM_SPIMD; + }; + +-static int locomo_suspend(struct device *dev, pm_message_t state, u32 level) ++static int locomo_suspend(struct device *dev, pm_message_t state) + { + struct locomo *lchip = dev_get_drvdata(dev); + struct locomo_save_data *save; + unsigned long flags; + +- if (level != SUSPEND_DISABLE) +- return 0; +- + save = kmalloc(sizeof(struct locomo_save_data), GFP_KERNEL); + if (!save) + return -ENOMEM; +@@ -597,16 +594,13 @@ static int locomo_suspend(struct device + return 0; + } + +-static int locomo_resume(struct device *dev, u32 level) ++static int locomo_resume(struct device *dev) + { + struct locomo *lchip = dev_get_drvdata(dev); + struct locomo_save_data *save; + unsigned long r; + unsigned long flags; + +- if (level != RESUME_ENABLE) +- return 0; +- + save = (struct locomo_save_data *) dev->power.saved_state; + if (!save) + return 0; +--- gregkh-2.6.orig/arch/arm/common/sa1111.c ++++ gregkh-2.6/arch/arm/common/sa1111.c +@@ -801,7 +801,7 @@ struct sa1111_save_data { + + #ifdef CONFIG_PM + +-static int sa1111_suspend(struct device *dev, pm_message_t state, u32 level) ++static int sa1111_suspend(struct device *dev, pm_message_t state) + { + struct sa1111 *sachip = dev_get_drvdata(dev); + struct sa1111_save_data *save; +@@ -809,9 +809,6 @@ static int sa1111_suspend(struct device + unsigned int val; + void __iomem *base; + +- if (level != SUSPEND_DISABLE) +- return 0; +- + save = kmalloc(sizeof(struct sa1111_save_data), GFP_KERNEL); + if (!save) + return -ENOMEM; +@@ -856,23 +853,19 @@ static int sa1111_suspend(struct device + /* + * sa1111_resume - Restore the SA1111 device state. + * @dev: device to restore +- * @level: resume level + * + * Restore the general state of the SA1111; clock control and + * interrupt controller. Other parts of the SA1111 must be + * restored by their respective drivers, and must be called + * via LDM after this function. + */ +-static int sa1111_resume(struct device *dev, u32 level) ++static int sa1111_resume(struct device *dev) + { + struct sa1111 *sachip = dev_get_drvdata(dev); + struct sa1111_save_data *save; + unsigned long flags, id; + void __iomem *base; + +- if (level != RESUME_ENABLE) +- return 0; +- + save = (struct sa1111_save_data *)dev->power.saved_state; + if (!save) + return 0; +--- gregkh-2.6.orig/arch/arm/common/scoop.c ++++ gregkh-2.6/arch/arm/common/scoop.c +@@ -102,26 +102,24 @@ static void check_scoop_reg(struct scoop + } + + #ifdef CONFIG_PM +-static int scoop_suspend(struct device *dev, pm_message_t state, uint32_t level) ++static int scoop_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_POWER_DOWN) { +- struct scoop_dev *sdev = dev_get_drvdata(dev); ++ struct scoop_dev *sdev = dev_get_drvdata(dev); ++ ++ check_scoop_reg(sdev); ++ sdev->scoop_gpwr = SCOOP_REG(sdev->base, SCOOP_GPWR); ++ SCOOP_REG(sdev->base, SCOOP_GPWR) = (sdev->scoop_gpwr & ~sdev->suspend_clr) | sdev->suspend_set; + +- check_scoop_reg(sdev); +- sdev->scoop_gpwr = SCOOP_REG(sdev->base, SCOOP_GPWR); +- SCOOP_REG(sdev->base, SCOOP_GPWR) = (sdev->scoop_gpwr & ~sdev->suspend_clr) | sdev->suspend_set; +- } + return 0; + } + +-static int scoop_resume(struct device *dev, uint32_t level) ++static int scoop_resume(struct device *dev) + { +- if (level == RESUME_POWER_ON) { +- struct scoop_dev *sdev = dev_get_drvdata(dev); ++ struct scoop_dev *sdev = dev_get_drvdata(dev); ++ ++ check_scoop_reg(sdev); ++ SCOOP_REG(sdev->base,SCOOP_GPWR) = sdev->scoop_gpwr; + +- check_scoop_reg(sdev); +- SCOOP_REG(sdev->base,SCOOP_GPWR) = sdev->scoop_gpwr; +- } + return 0; + } + #else +--- gregkh-2.6.orig/arch/arm/mach-pxa/corgi_ssp.c ++++ gregkh-2.6/arch/arm/mach-pxa/corgi_ssp.c +@@ -222,24 +222,22 @@ static int corgi_ssp_remove(struct devic + return 0; + } + +-static int corgi_ssp_suspend(struct device *dev, pm_message_t state, u32 level) ++static int corgi_ssp_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_POWER_DOWN) { +- ssp_flush(&corgi_ssp_dev); +- ssp_save_state(&corgi_ssp_dev,&corgi_ssp_state); +- } ++ ssp_flush(&corgi_ssp_dev); ++ ssp_save_state(&corgi_ssp_dev,&corgi_ssp_state); ++ + return 0; + } + +-static int corgi_ssp_resume(struct device *dev, u32 level) ++static int corgi_ssp_resume(struct device *dev) + { +- if (level == RESUME_POWER_ON) { +- GPSR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon); /* High - Disable LCD Control/Timing Gen */ +- GPSR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111); /* High - Disable MAX1111*/ +- GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846); /* High - Disable ADS7846*/ +- ssp_restore_state(&corgi_ssp_dev,&corgi_ssp_state); +- ssp_enable(&corgi_ssp_dev); +- } ++ GPSR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon); /* High - Disable LCD Control/Timing Gen */ ++ GPSR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111); /* High - Disable MAX1111*/ ++ GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846); /* High - Disable ADS7846*/ ++ ssp_restore_state(&corgi_ssp_dev,&corgi_ssp_state); ++ ssp_enable(&corgi_ssp_dev); ++ + return 0; + } + +--- gregkh-2.6.orig/arch/arm/mach-sa1100/neponset.c ++++ gregkh-2.6/arch/arm/mach-sa1100/neponset.c +@@ -178,33 +178,27 @@ static int neponset_probe(struct device + /* + * LDM power management. + */ +-static int neponset_suspend(struct device *dev, pm_message_t state, u32 level) ++static int neponset_suspend(struct device *dev, pm_message_t state) + { + /* + * Save state. + */ +- if (level == SUSPEND_SAVE_STATE || +- level == SUSPEND_DISABLE || +- level == SUSPEND_POWER_DOWN) { +- if (!dev->power.saved_state) +- dev->power.saved_state = kmalloc(sizeof(unsigned int), GFP_KERNEL); +- if (!dev->power.saved_state) +- return -ENOMEM; ++ if (!dev->power.saved_state) ++ dev->power.saved_state = kmalloc(sizeof(unsigned int), GFP_KERNEL); ++ if (!dev->power.saved_state) ++ return -ENOMEM; + +- *(unsigned int *)dev->power.saved_state = NCR_0; +- } ++ *(unsigned int *)dev->power.saved_state = NCR_0; + + return 0; + } + +-static int neponset_resume(struct device *dev, u32 level) ++static int neponset_resume(struct device *dev) + { +- if (level == RESUME_RESTORE_STATE || level == RESUME_ENABLE) { +- if (dev->power.saved_state) { +- NCR_0 = *(unsigned int *)dev->power.saved_state; +- kfree(dev->power.saved_state); +- dev->power.saved_state = NULL; +- } ++ if (dev->power.saved_state) { ++ NCR_0 = *(unsigned int *)dev->power.saved_state; ++ kfree(dev->power.saved_state); ++ dev->power.saved_state = NULL; + } + + return 0; +--- gregkh-2.6.orig/drivers/base/platform.c ++++ gregkh-2.6/drivers/base/platform.c +@@ -281,13 +281,9 @@ static int platform_suspend(struct devic + { + int ret = 0; + +- if (dev->driver && dev->driver->suspend) { +- ret = dev->driver->suspend(dev, state, SUSPEND_DISABLE); +- if (ret == 0) +- ret = dev->driver->suspend(dev, state, SUSPEND_SAVE_STATE); +- if (ret == 0) +- ret = dev->driver->suspend(dev, state, SUSPEND_POWER_DOWN); +- } ++ if (dev->driver && dev->driver->suspend) ++ ret = dev->driver->suspend(dev, state); ++ + return ret; + } + +@@ -295,13 +291,9 @@ static int platform_resume(struct device + { + int ret = 0; + +- if (dev->driver && dev->driver->resume) { +- ret = dev->driver->resume(dev, RESUME_POWER_ON); +- if (ret == 0) +- ret = dev->driver->resume(dev, RESUME_RESTORE_STATE); +- if (ret == 0) +- ret = dev->driver->resume(dev, RESUME_ENABLE); +- } ++ if (dev->driver && dev->driver->resume) ++ ret = dev->driver->resume(dev); ++ + return ret; + } + +--- gregkh-2.6.orig/drivers/char/s3c2410-rtc.c ++++ gregkh-2.6/drivers/char/s3c2410-rtc.c +@@ -519,30 +519,28 @@ static struct timespec s3c2410_rtc_delta + + static int ticnt_save; + +-static int s3c2410_rtc_suspend(struct device *dev, pm_message_t state, u32 level) ++static int s3c2410_rtc_suspend(struct device *dev, pm_message_t state) + { + struct rtc_time tm; + struct timespec time; + + time.tv_nsec = 0; + +- if (level == SUSPEND_POWER_DOWN) { +- /* save TICNT for anyone using periodic interrupts */ ++ /* save TICNT for anyone using periodic interrupts */ + +- ticnt_save = readb(S3C2410_TICNT); ++ ticnt_save = readb(S3C2410_TICNT); + +- /* calculate time delta for suspend */ ++ /* calculate time delta for suspend */ + +- s3c2410_rtc_gettime(&tm); +- rtc_tm_to_time(&tm, &time.tv_sec); +- save_time_delta(&s3c2410_rtc_delta, &time); +- s3c2410_rtc_enable(dev, 0); +- } ++ s3c2410_rtc_gettime(&tm); ++ rtc_tm_to_time(&tm, &time.tv_sec); ++ save_time_delta(&s3c2410_rtc_delta, &time); ++ s3c2410_rtc_enable(dev, 0); + + return 0; + } + +-static int s3c2410_rtc_resume(struct device *dev, u32 level) ++static int s3c2410_rtc_resume(struct device *dev) + { + struct rtc_time tm; + struct timespec time; +--- gregkh-2.6.orig/drivers/char/sonypi.c ++++ gregkh-2.6/drivers/char/sonypi.c +@@ -1167,19 +1167,17 @@ static int sonypi_disable(void) + #ifdef CONFIG_PM + static int old_camera_power; + +-static int sonypi_suspend(struct device *dev, pm_message_t state, u32 level) ++static int sonypi_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_DISABLE) { +- old_camera_power = sonypi_device.camera_power; +- sonypi_disable(); +- } ++ old_camera_power = sonypi_device.camera_power; ++ sonypi_disable(); ++ + return 0; + } + +-static int sonypi_resume(struct device *dev, u32 level) ++static int sonypi_resume(struct device *dev) + { +- if (level == RESUME_ENABLE) +- sonypi_enable(old_camera_power); ++ sonypi_enable(old_camera_power); + return 0; + } + #endif +--- gregkh-2.6.orig/drivers/char/watchdog/s3c2410_wdt.c ++++ gregkh-2.6/drivers/char/watchdog/s3c2410_wdt.c +@@ -464,32 +464,28 @@ static void s3c2410wdt_shutdown(struct d + static unsigned long wtcon_save; + static unsigned long wtdat_save; + +-static int s3c2410wdt_suspend(struct device *dev, pm_message_t state, u32 level) ++static int s3c2410wdt_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_POWER_DOWN) { +- /* Save watchdog state, and turn it off. */ +- wtcon_save = readl(wdt_base + S3C2410_WTCON); +- wtdat_save = readl(wdt_base + S3C2410_WTDAT); +- +- /* Note that WTCNT doesn't need to be saved. */ +- s3c2410wdt_stop(); +- } ++ /* Save watchdog state, and turn it off. */ ++ wtcon_save = readl(wdt_base + S3C2410_WTCON); ++ wtdat_save = readl(wdt_base + S3C2410_WTDAT); ++ ++ /* Note that WTCNT doesn't need to be saved. */ ++ s3c2410wdt_stop(); + + return 0; + } + +-static int s3c2410wdt_resume(struct device *dev, u32 level) ++static int s3c2410wdt_resume(struct device *dev) + { +- if (level == RESUME_POWER_ON) { +- /* Restore watchdog state. */ ++ /* Restore watchdog state. */ ++ ++ writel(wtdat_save, wdt_base + S3C2410_WTDAT); ++ writel(wtdat_save, wdt_base + S3C2410_WTCNT); /* Reset count */ ++ writel(wtcon_save, wdt_base + S3C2410_WTCON); + +- writel(wtdat_save, wdt_base + S3C2410_WTDAT); +- writel(wtdat_save, wdt_base + S3C2410_WTCNT); /* Reset count */ +- writel(wtcon_save, wdt_base + S3C2410_WTCON); +- +- printk(KERN_INFO PFX "watchdog %sabled\n", +- (wtcon_save & S3C2410_WTCON_ENABLE) ? "en" : "dis"); +- } ++ printk(KERN_INFO PFX "watchdog %sabled\n", ++ (wtcon_save & S3C2410_WTCON_ENABLE) ? "en" : "dis"); + + return 0; + } +--- gregkh-2.6.orig/drivers/hwmon/hdaps.c ++++ gregkh-2.6/drivers/hwmon/hdaps.c +@@ -296,11 +296,9 @@ static int hdaps_probe(struct device *de + return 0; + } + +-static int hdaps_resume(struct device *dev, u32 level) ++static int hdaps_resume(struct device *dev) + { +- if (level == RESUME_ENABLE) +- return hdaps_device_init(); +- return 0; ++ return hdaps_device_init(); + } + + static struct device_driver hdaps_driver = { +--- gregkh-2.6.orig/drivers/i2c/busses/i2c-s3c2410.c ++++ gregkh-2.6/drivers/i2c/busses/i2c-s3c2410.c +@@ -879,14 +879,12 @@ static int s3c24xx_i2c_remove(struct dev + } + + #ifdef CONFIG_PM +-static int s3c24xx_i2c_resume(struct device *dev, u32 level) ++static int s3c24xx_i2c_resume(struct device *dev) + { + struct s3c24xx_i2c *i2c = dev_get_drvdata(dev); +- +- if (i2c != NULL && level == RESUME_ENABLE) { +- dev_dbg(dev, "resume: level %d\n", level); ++ ++ if (i2c != NULL) + s3c24xx_i2c_init(i2c); +- } + + return 0; + } +--- gregkh-2.6.orig/drivers/i2c/i2c-core.c ++++ gregkh-2.6/drivers/i2c/i2c-core.c +@@ -48,7 +48,7 @@ static int i2c_bus_suspend(struct device + int rc = 0; + + if (dev->driver && dev->driver->suspend) +- rc = dev->driver->suspend(dev,state,0); ++ rc = dev->driver->suspend(dev, state); + return rc; + } + +@@ -57,7 +57,7 @@ static int i2c_bus_resume(struct device + int rc = 0; + + if (dev->driver && dev->driver->resume) +- rc = dev->driver->resume(dev,0); ++ rc = dev->driver->resume(dev); + return rc; + } + +--- gregkh-2.6.orig/drivers/ieee1394/nodemgr.c ++++ gregkh-2.6/drivers/ieee1394/nodemgr.c +@@ -1292,7 +1292,7 @@ static void nodemgr_suspend_ne(struct no + + if (ud->device.driver && + (!ud->device.driver->suspend || +- ud->device.driver->suspend(&ud->device, PMSG_SUSPEND, 0))) ++ ud->device.driver->suspend(&ud->device, PMSG_SUSPEND))) + device_release_driver(&ud->device); + } + up_write(&ne->device.bus->subsys.rwsem); +@@ -1315,7 +1315,7 @@ static void nodemgr_resume_ne(struct nod + continue; + + if (ud->device.driver && ud->device.driver->resume) +- ud->device.driver->resume(&ud->device, 0); ++ ud->device.driver->resume(&ud->device); + } + up_read(&ne->device.bus->subsys.rwsem); + +--- gregkh-2.6.orig/drivers/input/keyboard/corgikbd.c ++++ gregkh-2.6/drivers/input/keyboard/corgikbd.c +@@ -259,24 +259,22 @@ static void corgikbd_hinge_timer(unsigne + } + + #ifdef CONFIG_PM +-static int corgikbd_suspend(struct device *dev, pm_message_t state, uint32_t level) ++static int corgikbd_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_POWER_DOWN) { +- struct corgikbd *corgikbd = dev_get_drvdata(dev); +- corgikbd->suspended = 1; +- } ++ struct corgikbd *corgikbd = dev_get_drvdata(dev); ++ corgikbd->suspended = 1; ++ + return 0; + } + +-static int corgikbd_resume(struct device *dev, uint32_t level) ++static int corgikbd_resume(struct device *dev) + { +- if (level == RESUME_POWER_ON) { +- struct corgikbd *corgikbd = dev_get_drvdata(dev); ++ struct corgikbd *corgikbd = dev_get_drvdata(dev); ++ ++ /* Upon resume, ignore the suspend key for a short while */ ++ corgikbd->suspend_jiffies=jiffies; ++ corgikbd->suspended = 0; + +- /* Upon resume, ignore the suspend key for a short while */ +- corgikbd->suspend_jiffies=jiffies; +- corgikbd->suspended = 0; +- } + return 0; + } + #else +--- gregkh-2.6.orig/drivers/input/keyboard/spitzkbd.c ++++ gregkh-2.6/drivers/input/keyboard/spitzkbd.c +@@ -309,34 +309,32 @@ static void spitzkbd_hinge_timer(unsigne + } + + #ifdef CONFIG_PM +-static int spitzkbd_suspend(struct device *dev, pm_message_t state, uint32_t level) ++static int spitzkbd_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_POWER_DOWN) { +- int i; +- struct spitzkbd *spitzkbd = dev_get_drvdata(dev); +- spitzkbd->suspended = 1; +- +- /* Set Strobe lines as inputs - *except* strobe line 0 leave this +- enabled so we can detect a power button press for resume */ +- for (i = 1; i < SPITZ_KEY_STROBE_NUM; i++) +- pxa_gpio_mode(spitz_strobes[i] | GPIO_IN); +- } ++ int i; ++ struct spitzkbd *spitzkbd = dev_get_drvdata(dev); ++ spitzkbd->suspended = 1; ++ ++ /* Set Strobe lines as inputs - *except* strobe line 0 leave this ++ enabled so we can detect a power button press for resume */ ++ for (i = 1; i < SPITZ_KEY_STROBE_NUM; i++) ++ pxa_gpio_mode(spitz_strobes[i] | GPIO_IN); ++ + return 0; + } + +-static int spitzkbd_resume(struct device *dev, uint32_t level) ++static int spitzkbd_resume(struct device *dev) + { +- if (level == RESUME_POWER_ON) { +- int i; +- struct spitzkbd *spitzkbd = dev_get_drvdata(dev); +- +- for (i = 0; i < SPITZ_KEY_STROBE_NUM; i++) +- pxa_gpio_mode(spitz_strobes[i] | GPIO_OUT | GPIO_DFLT_HIGH); +- +- /* Upon resume, ignore the suspend key for a short while */ +- spitzkbd->suspend_jiffies = jiffies; +- spitzkbd->suspended = 0; +- } ++ int i; ++ struct spitzkbd *spitzkbd = dev_get_drvdata(dev); ++ ++ for (i = 0; i < SPITZ_KEY_STROBE_NUM; i++) ++ pxa_gpio_mode(spitz_strobes[i] | GPIO_OUT | GPIO_DFLT_HIGH); ++ ++ /* Upon resume, ignore the suspend key for a short while */ ++ spitzkbd->suspend_jiffies = jiffies; ++ spitzkbd->suspended = 0; ++ + return 0; + } + #else +--- gregkh-2.6.orig/drivers/input/serio/i8042.c ++++ gregkh-2.6/drivers/input/serio/i8042.c +@@ -911,12 +911,10 @@ static long i8042_panic_blink(long count + * Here we try to restore the original BIOS settings + */ + +-static int i8042_suspend(struct device *dev, pm_message_t state, u32 level) ++static int i8042_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_DISABLE) { +- del_timer_sync(&i8042_timer); +- i8042_controller_reset(); +- } ++ del_timer_sync(&i8042_timer); ++ i8042_controller_reset(); + + return 0; + } +@@ -926,13 +924,10 @@ static int i8042_suspend(struct device * + * Here we try to reset everything back to a state in which suspended + */ + +-static int i8042_resume(struct device *dev, u32 level) ++static int i8042_resume(struct device *dev) + { + int i; + +- if (level != RESUME_ENABLE) +- return 0; +- + if (i8042_ctl_test()) + return -1; + +--- gregkh-2.6.orig/drivers/input/touchscreen/corgi_ts.c ++++ gregkh-2.6/drivers/input/touchscreen/corgi_ts.c +@@ -231,34 +231,32 @@ static irqreturn_t ts_interrupt(int irq, + } + + #ifdef CONFIG_PM +-static int corgits_suspend(struct device *dev, pm_message_t state, uint32_t level) ++static int corgits_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_POWER_DOWN) { +- struct corgi_ts *corgi_ts = dev_get_drvdata(dev); +- +- if (corgi_ts->pendown) { +- del_timer_sync(&corgi_ts->timer); +- corgi_ts->tc.pressure = 0; +- new_data(corgi_ts, NULL); +- corgi_ts->pendown = 0; +- } +- corgi_ts->power_mode = PWR_MODE_SUSPEND; ++ struct corgi_ts *corgi_ts = dev_get_drvdata(dev); + +- corgi_ssp_ads7846_putget((1u << ADSCTRL_ADR_SH) | ADSCTRL_STS); ++ if (corgi_ts->pendown) { ++ del_timer_sync(&corgi_ts->timer); ++ corgi_ts->tc.pressure = 0; ++ new_data(corgi_ts, NULL); ++ corgi_ts->pendown = 0; + } ++ corgi_ts->power_mode = PWR_MODE_SUSPEND; ++ ++ corgi_ssp_ads7846_putget((1u << ADSCTRL_ADR_SH) | ADSCTRL_STS); ++ + return 0; + } + +-static int corgits_resume(struct device *dev, uint32_t level) ++static int corgits_resume(struct device *dev) + { +- if (level == RESUME_POWER_ON) { +- struct corgi_ts *corgi_ts = dev_get_drvdata(dev); ++ struct corgi_ts *corgi_ts = dev_get_drvdata(dev); ++ ++ corgi_ssp_ads7846_putget((4u << ADSCTRL_ADR_SH) | ADSCTRL_STS); ++ /* Enable Falling Edge */ ++ set_irq_type(corgi_ts->irq_gpio, IRQT_FALLING); ++ corgi_ts->power_mode = PWR_MODE_ACTIVE; + +- corgi_ssp_ads7846_putget((4u << ADSCTRL_ADR_SH) | ADSCTRL_STS); +- /* Enable Falling Edge */ +- set_irq_type(corgi_ts->irq_gpio, IRQT_FALLING); +- corgi_ts->power_mode = PWR_MODE_ACTIVE; +- } + return 0; + } + #else +--- gregkh-2.6.orig/drivers/media/video/msp3400.c ++++ gregkh-2.6/drivers/media/video/msp3400.c +@@ -1420,8 +1420,8 @@ static int msp_detach(struct i2c_client + static int msp_probe(struct i2c_adapter *adap); + static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg); + +-static int msp_suspend(struct device * dev, pm_message_t state, u32 level); +-static int msp_resume(struct device * dev, u32 level); ++static int msp_suspend(struct device * dev, pm_message_t state); ++static int msp_resume(struct device * dev); + + static void msp_wake_thread(struct i2c_client *client); + +@@ -1821,7 +1821,7 @@ static int msp_command(struct i2c_client + return 0; + } + +-static int msp_suspend(struct device * dev, pm_message_t state, u32 level) ++static int msp_suspend(struct device * dev, pm_message_t state) + { + struct i2c_client *c = container_of(dev, struct i2c_client, dev); + +@@ -1830,7 +1830,7 @@ static int msp_suspend(struct device * d + return 0; + } + +-static int msp_resume(struct device * dev, u32 level) ++static int msp_resume(struct device * dev) + { + struct i2c_client *c = container_of(dev, struct i2c_client, dev); + +--- gregkh-2.6.orig/drivers/media/video/tda9887.c ++++ gregkh-2.6/drivers/media/video/tda9887.c +@@ -784,13 +784,13 @@ tda9887_command(struct i2c_client *clien + return 0; + } + +-static int tda9887_suspend(struct device * dev, pm_message_t state, u32 level) ++static int tda9887_suspend(struct device * dev, pm_message_t state) + { + dprintk("tda9887: suspend\n"); + return 0; + } + +-static int tda9887_resume(struct device * dev, u32 level) ++static int tda9887_resume(struct device * dev) + { + struct i2c_client *c = container_of(dev, struct i2c_client, dev); + struct tda9887 *t = i2c_get_clientdata(c); +--- gregkh-2.6.orig/drivers/media/video/tuner-core.c ++++ gregkh-2.6/drivers/media/video/tuner-core.c +@@ -697,7 +697,7 @@ static int tuner_command(struct i2c_clie + return 0; + } + +-static int tuner_suspend(struct device *dev, pm_message_t state, u32 level) ++static int tuner_suspend(struct device *dev, pm_message_t state) + { + struct i2c_client *c = container_of (dev, struct i2c_client, dev); + struct tuner *t = i2c_get_clientdata (c); +@@ -707,7 +707,7 @@ static int tuner_suspend(struct device * + return 0; + } + +-static int tuner_resume(struct device *dev, u32 level) ++static int tuner_resume(struct device *dev) + { + struct i2c_client *c = container_of (dev, struct i2c_client, dev); + struct tuner *t = i2c_get_clientdata (c); +--- gregkh-2.6.orig/drivers/mfd/mcp-sa11x0.c ++++ gregkh-2.6/drivers/mfd/mcp-sa11x0.c +@@ -219,26 +219,24 @@ static int mcp_sa11x0_remove(struct devi + return 0; + } + +-static int mcp_sa11x0_suspend(struct device *dev, pm_message_t state, u32 level) ++static int mcp_sa11x0_suspend(struct device *dev, pm_message_t state) + { + struct mcp *mcp = dev_get_drvdata(dev); + +- if (level == SUSPEND_DISABLE) { +- priv(mcp)->mccr0 = Ser4MCCR0; +- priv(mcp)->mccr1 = Ser4MCCR1; +- Ser4MCCR0 &= ~MCCR0_MCE; +- } ++ priv(mcp)->mccr0 = Ser4MCCR0; ++ priv(mcp)->mccr1 = Ser4MCCR1; ++ Ser4MCCR0 &= ~MCCR0_MCE; ++ + return 0; + } + +-static int mcp_sa11x0_resume(struct device *dev, u32 level) ++static int mcp_sa11x0_resume(struct device *dev) + { + struct mcp *mcp = dev_get_drvdata(dev); + +- if (level == RESUME_RESTORE_STATE) { +- Ser4MCCR1 = priv(mcp)->mccr1; +- Ser4MCCR0 = priv(mcp)->mccr0; +- } ++ Ser4MCCR1 = priv(mcp)->mccr1; ++ Ser4MCCR0 = priv(mcp)->mccr0; ++ + return 0; + } + +--- gregkh-2.6.orig/drivers/mmc/pxamci.c ++++ gregkh-2.6/drivers/mmc/pxamci.c +@@ -571,23 +571,23 @@ static int pxamci_remove(struct device * + } + + #ifdef CONFIG_PM +-static int pxamci_suspend(struct device *dev, pm_message_t state, u32 level) ++static int pxamci_suspend(struct device *dev, pm_message_t state) + { + struct mmc_host *mmc = dev_get_drvdata(dev); + int ret = 0; + +- if (mmc && level == SUSPEND_DISABLE) ++ if (mmc) + ret = mmc_suspend_host(mmc, state); + + return ret; + } + +-static int pxamci_resume(struct device *dev, u32 level) ++static int pxamci_resume(struct device *dev) + { + struct mmc_host *mmc = dev_get_drvdata(dev); + int ret = 0; + +- if (mmc && level == RESUME_ENABLE) ++ if (mmc) + ret = mmc_resume_host(mmc); + + return ret; +--- gregkh-2.6.orig/drivers/mmc/wbsd.c ++++ gregkh-2.6/drivers/mmc/wbsd.c +@@ -1955,14 +1955,14 @@ static void __devexit wbsd_pnp_remove(st + */ + + #ifdef CONFIG_PM +-static int wbsd_suspend(struct device *dev, pm_message_t state, u32 level) ++static int wbsd_suspend(struct device *dev, pm_message_t state) + { + DBGF("Not yet supported\n"); + + return 0; + } + +-static int wbsd_resume(struct device *dev, u32 level) ++static int wbsd_resume(struct device *dev) + { + DBGF("Not yet supported\n"); + +--- gregkh-2.6.orig/drivers/mtd/maps/sa1100-flash.c ++++ gregkh-2.6/drivers/mtd/maps/sa1100-flash.c +@@ -402,21 +402,21 @@ static int __exit sa1100_mtd_remove(stru + } + + #ifdef CONFIG_PM +-static int sa1100_mtd_suspend(struct device *dev, pm_message_t state, u32 level) ++static int sa1100_mtd_suspend(struct device *dev, pm_message_t state) + { + struct sa_info *info = dev_get_drvdata(dev); + int ret = 0; + +- if (info && level == SUSPEND_SAVE_STATE) ++ if (info) + ret = info->mtd->suspend(info->mtd); + + return ret; + } + +-static int sa1100_mtd_resume(struct device *dev, u32 level) ++static int sa1100_mtd_resume(struct device *dev) + { + struct sa_info *info = dev_get_drvdata(dev); +- if (info && level == RESUME_RESTORE_STATE) ++ if (info) + info->mtd->resume(info->mtd); + return 0; + } +--- gregkh-2.6.orig/drivers/net/dm9000.c ++++ gregkh-2.6/drivers/net/dm9000.c +@@ -1140,11 +1140,11 @@ dm9000_phy_write(struct net_device *dev, + } + + static int +-dm9000_drv_suspend(struct device *dev, pm_message_t state, u32 level) ++dm9000_drv_suspend(struct device *dev, pm_message_t state) + { + struct net_device *ndev = dev_get_drvdata(dev); + +- if (ndev && level == SUSPEND_DISABLE) { ++ if (ndev) { + if (netif_running(ndev)) { + netif_device_detach(ndev); + dm9000_shutdown(ndev); +@@ -1154,12 +1154,12 @@ dm9000_drv_suspend(struct device *dev, p + } + + static int +-dm9000_drv_resume(struct device *dev, u32 level) ++dm9000_drv_resume(struct device *dev) + { + struct net_device *ndev = dev_get_drvdata(dev); + board_info_t *db = (board_info_t *) ndev->priv; + +- if (ndev && level == RESUME_ENABLE) { ++ if (ndev) { + + if (netif_running(ndev)) { + dm9000_reset(db); +--- gregkh-2.6.orig/drivers/net/irda/sa1100_ir.c ++++ gregkh-2.6/drivers/net/irda/sa1100_ir.c +@@ -291,12 +291,12 @@ static void sa1100_irda_shutdown(struct + /* + * Suspend the IrDA interface. + */ +-static int sa1100_irda_suspend(struct device *_dev, pm_message_t state, u32 level) ++static int sa1100_irda_suspend(struct device *_dev, pm_message_t state) + { + struct net_device *dev = dev_get_drvdata(_dev); + struct sa1100_irda *si; + +- if (!dev || level != SUSPEND_DISABLE) ++ if (!dev) + return 0; + + si = dev->priv; +@@ -316,12 +316,12 @@ static int sa1100_irda_suspend(struct de + /* + * Resume the IrDA interface. + */ +-static int sa1100_irda_resume(struct device *_dev, u32 level) ++static int sa1100_irda_resume(struct device *_dev) + { + struct net_device *dev = dev_get_drvdata(_dev); + struct sa1100_irda *si; + +- if (!dev || level != RESUME_ENABLE) ++ if (!dev) + return 0; + + si = dev->priv; +--- gregkh-2.6.orig/drivers/net/irda/smsc-ircc2.c ++++ gregkh-2.6/drivers/net/irda/smsc-ircc2.c +@@ -213,8 +213,8 @@ static int smsc_ircc_probe_transceiver_ + + /* Power Management */ + +-static int smsc_ircc_suspend(struct device *dev, pm_message_t state, u32 level); +-static int smsc_ircc_resume(struct device *dev, u32 level); ++static int smsc_ircc_suspend(struct device *dev, pm_message_t state); ++static int smsc_ircc_resume(struct device *dev); + + static struct device_driver smsc_ircc_driver = { + .name = SMSC_IRCC2_DRIVER_NAME, +@@ -1646,13 +1646,13 @@ static int smsc_ircc_net_close(struct ne + return 0; + } + +-static int smsc_ircc_suspend(struct device *dev, pm_message_t state, u32 level) ++static int smsc_ircc_suspend(struct device *dev, pm_message_t state) + { + struct smsc_ircc_cb *self = dev_get_drvdata(dev); + + IRDA_MESSAGE("%s, Suspending\n", driver_name); + +- if (level == SUSPEND_DISABLE && !self->io.suspended) { ++ if (!self->io.suspended) { + smsc_ircc_net_close(self->netdev); + self->io.suspended = 1; + } +@@ -1660,11 +1660,11 @@ static int smsc_ircc_suspend(struct devi + return 0; + } + +-static int smsc_ircc_resume(struct device *dev, u32 level) ++static int smsc_ircc_resume(struct device *dev) + { + struct smsc_ircc_cb *self = dev_get_drvdata(dev); + +- if (level == RESUME_ENABLE && self->io.suspended) { ++ if (self->io.suspended) { + + smsc_ircc_net_open(self->netdev); + self->io.suspended = 0; +--- gregkh-2.6.orig/drivers/net/phy/mdio_bus.c ++++ gregkh-2.6/drivers/net/phy/mdio_bus.c +@@ -133,13 +133,9 @@ static int mdio_bus_suspend(struct devic + int ret = 0; + struct device_driver *drv = dev->driver; + +- if (drv && drv->suspend) { +- ret = drv->suspend(dev, state, SUSPEND_DISABLE); +- if (ret == 0) +- ret = drv->suspend(dev, state, SUSPEND_SAVE_STATE); +- if (ret == 0) +- ret = drv->suspend(dev, state, SUSPEND_POWER_DOWN); +- } ++ if (drv && drv->suspend) ++ ret = drv->suspend(dev, state); ++ + return ret; + } + +@@ -148,13 +144,9 @@ static int mdio_bus_resume(struct device + int ret = 0; + struct device_driver *drv = dev->driver; + +- if (drv && drv->resume) { +- ret = drv->resume(dev, RESUME_POWER_ON); +- if (ret == 0) +- ret = drv->resume(dev, RESUME_RESTORE_STATE); +- if (ret == 0) +- ret = drv->resume(dev, RESUME_ENABLE); +- } ++ if (drv && drv->resume) ++ ret = drv->resume(dev); ++ + return ret; + } + +--- gregkh-2.6.orig/drivers/net/smc91x.c ++++ gregkh-2.6/drivers/net/smc91x.c +@@ -2291,11 +2291,11 @@ static int smc_drv_remove(struct device + return 0; + } + +-static int smc_drv_suspend(struct device *dev, pm_message_t state, u32 level) ++static int smc_drv_suspend(struct device *dev, pm_message_t state) + { + struct net_device *ndev = dev_get_drvdata(dev); + +- if (ndev && level == SUSPEND_DISABLE) { ++ if (ndev) { + if (netif_running(ndev)) { + netif_device_detach(ndev); + smc_shutdown(ndev); +@@ -2305,12 +2305,12 @@ static int smc_drv_suspend(struct device + return 0; + } + +-static int smc_drv_resume(struct device *dev, u32 level) ++static int smc_drv_resume(struct device *dev) + { + struct platform_device *pdev = to_platform_device(dev); + struct net_device *ndev = dev_get_drvdata(dev); + +- if (ndev && level == RESUME_ENABLE) { ++ if (ndev) { + struct smc_local *lp = netdev_priv(ndev); + smc_enable_device(pdev); + if (netif_running(ndev)) { +--- gregkh-2.6.orig/drivers/pci/pcie/portdrv_core.c ++++ gregkh-2.6/drivers/pci/pcie/portdrv_core.c +@@ -61,7 +61,7 @@ static int pcie_port_remove_service(stru + + static void pcie_port_shutdown_service(struct device *dev) {} + +-static int pcie_port_suspend_service(struct device *dev, pm_message_t state, u32 level) ++static int pcie_port_suspend_service(struct device *dev, pm_message_t state) + { + struct pcie_device *pciedev; + struct pcie_port_service_driver *driver; +@@ -76,7 +76,7 @@ static int pcie_port_suspend_service(str + return 0; + } + +-static int pcie_port_resume_service(struct device *dev, u32 level) ++static int pcie_port_resume_service(struct device *dev) + { + struct pcie_device *pciedev; + struct pcie_port_service_driver *driver; +--- gregkh-2.6.orig/drivers/pcmcia/au1000_generic.c ++++ gregkh-2.6/drivers/pcmcia/au1000_generic.c +@@ -519,30 +519,13 @@ static int au1x00_drv_pcmcia_probe(struc + } + + +-static int au1x00_drv_pcmcia_suspend(struct device *dev, pm_message_t state, u32 level) +-{ +- int ret = 0; +- if (level == SUSPEND_SAVE_STATE) +- ret = pcmcia_socket_dev_suspend(dev, state); +- return ret; +-} +- +-static int au1x00_drv_pcmcia_resume(struct device *dev, u32 level) +-{ +- int ret = 0; +- if (level == RESUME_RESTORE_STATE) +- ret = pcmcia_socket_dev_resume(dev); +- return ret; +-} +- +- + static struct device_driver au1x00_pcmcia_driver = { + .probe = au1x00_drv_pcmcia_probe, + .remove = au1x00_drv_pcmcia_remove, + .name = "au1x00-pcmcia", + .bus = &platform_bus_type, +- .suspend = au1x00_drv_pcmcia_suspend, +- .resume = au1x00_drv_pcmcia_resume ++ .suspend = pcmcia_socket_dev_suspend, ++ .resume = pcmcia_socket_dev_resume, + }; + + static struct platform_device au1x00_device = { +--- gregkh-2.6.orig/drivers/pcmcia/hd64465_ss.c ++++ gregkh-2.6/drivers/pcmcia/hd64465_ss.c +@@ -844,27 +844,11 @@ static void hs_exit_socket(hs_socket_t * + local_irq_restore(flags); + } + +-static int hd64465_suspend(struct device *dev, pm_message_t state, u32 level) +-{ +- int ret = 0; +- if (level == SUSPEND_SAVE_STATE) +- ret = pcmcia_socket_dev_suspend(dev, state); +- return ret; +-} +- +-static int hd64465_resume(struct device *dev, u32 level) +-{ +- int ret = 0; +- if (level == RESUME_RESTORE_STATE) +- ret = pcmcia_socket_dev_resume(dev); +- return ret; +-} +- + static struct device_driver hd64465_driver = { + .name = "hd64465-pcmcia", + .bus = &platform_bus_type, +- .suspend = hd64465_suspend, +- .resume = hd64465_resume, ++ .suspend = pcmcia_socket_dev_suspend, ++ .resume = pcmcia_socket_dev_resume, + }; + + static struct platform_device hd64465_device = { +--- gregkh-2.6.orig/drivers/pcmcia/i82365.c ++++ gregkh-2.6/drivers/pcmcia/i82365.c +@@ -1332,27 +1332,11 @@ static struct pccard_operations pcic_ope + + /*====================================================================*/ + +-static int i82365_suspend(struct device *dev, pm_message_t state, u32 level) +-{ +- int ret = 0; +- if (level == SUSPEND_SAVE_STATE) +- ret = pcmcia_socket_dev_suspend(dev, state); +- return ret; +-} +- +-static int i82365_resume(struct device *dev, u32 level) +-{ +- int ret = 0; +- if (level == RESUME_RESTORE_STATE) +- ret = pcmcia_socket_dev_resume(dev); +- return ret; +-} +- + static struct device_driver i82365_driver = { + .name = "i82365", + .bus = &platform_bus_type, +- .suspend = i82365_suspend, +- .resume = i82365_resume, ++ .suspend = pcmcia_socket_dev_suspend, ++ .resume = pcmcia_socket_dev_resume, + }; + + static struct platform_device i82365_device = { +--- gregkh-2.6.orig/drivers/pcmcia/m32r_cfc.c ++++ gregkh-2.6/drivers/pcmcia/m32r_cfc.c +@@ -731,28 +731,11 @@ static struct pccard_operations pcc_oper + + /*====================================================================*/ + +-static int m32r_pcc_suspend(struct device *dev, pm_message_t state, u32 level) +-{ +- int ret = 0; +- if (level == SUSPEND_SAVE_STATE) +- ret = pcmcia_socket_dev_suspend(dev, state); +- return ret; +-} +- +-static int m32r_pcc_resume(struct device *dev, u32 level) +-{ +- int ret = 0; +- if (level == RESUME_RESTORE_STATE) +- ret = pcmcia_socket_dev_resume(dev); +- return ret; +-} +- +- + static struct device_driver pcc_driver = { + .name = "cfc", + .bus = &platform_bus_type, +- .suspend = m32r_pcc_suspend, +- .resume = m32r_pcc_resume, ++ .suspend = pcmcia_socket_dev_suspend, ++ .resume = pcmcia_socket_dev_resume, + }; + + static struct platform_device pcc_device = { +--- gregkh-2.6.orig/drivers/pcmcia/m32r_pcc.c ++++ gregkh-2.6/drivers/pcmcia/m32r_pcc.c +@@ -695,28 +695,11 @@ static struct pccard_operations pcc_oper + + /*====================================================================*/ + +-static int m32r_pcc_suspend(struct device *dev, pm_message_t state, u32 level) +-{ +- int ret = 0; +- if (level == SUSPEND_SAVE_STATE) +- ret = pcmcia_socket_dev_suspend(dev, state); +- return ret; +-} +- +-static int m32r_pcc_resume(struct device *dev, u32 level) +-{ +- int ret = 0; +- if (level == RESUME_RESTORE_STATE) +- ret = pcmcia_socket_dev_resume(dev); +- return ret; +-} +- +- + static struct device_driver pcc_driver = { + .name = "pcc", + .bus = &platform_bus_type, +- .suspend = m32r_pcc_suspend, +- .resume = m32r_pcc_resume, ++ .suspend = pcmcia_socket_dev_suspend, ++ .resume = pcmcia_socket_dev_resume, + }; + + static struct platform_device pcc_device = { +--- gregkh-2.6.orig/drivers/pcmcia/omap_cf.c ++++ gregkh-2.6/drivers/pcmcia/omap_cf.c +@@ -329,27 +329,13 @@ static int __devexit omap_cf_remove(stru + return 0; + } + +-static int omap_cf_suspend(struct device *dev, pm_message_t mesg, u32 level) +-{ +- if (level != SUSPEND_SAVE_STATE) +- return 0; +- return pcmcia_socket_dev_suspend(dev, mesg); +-} +- +-static int omap_cf_resume(struct device *dev, u32 level) +-{ +- if (level != RESUME_RESTORE_STATE) +- return 0; +- return pcmcia_socket_dev_resume(dev); +-} +- + static struct device_driver omap_cf_driver = { + .name = (char *) driver_name, + .bus = &platform_bus_type, + .probe = omap_cf_probe, + .remove = __devexit_p(omap_cf_remove), +- .suspend = omap_cf_suspend, +- .resume = omap_cf_resume, ++ .suspend = pcmcia_socket_dev_suspend, ++ .resume = pcmcia_socket_dev_resume, + }; + + static int __init omap_cf_init(void) +--- gregkh-2.6.orig/drivers/pcmcia/pxa2xx_base.c ++++ gregkh-2.6/drivers/pcmcia/pxa2xx_base.c +@@ -205,32 +205,20 @@ int pxa2xx_drv_pcmcia_probe(struct devic + } + EXPORT_SYMBOL(pxa2xx_drv_pcmcia_probe); + +-static int pxa2xx_drv_pcmcia_suspend(struct device *dev, pm_message_t state, u32 level) ++static int pxa2xx_drv_pcmcia_resume(struct device *dev) + { +- int ret = 0; +- if (level == SUSPEND_SAVE_STATE) +- ret = pcmcia_socket_dev_suspend(dev, state); +- return ret; +-} ++ struct pcmcia_low_level *ops = dev->platform_data; ++ int nr = ops ? ops->nr : 0; + +-static int pxa2xx_drv_pcmcia_resume(struct device *dev, u32 level) +-{ +- int ret = 0; +- if (level == RESUME_RESTORE_STATE) +- { +- struct pcmcia_low_level *ops = dev->platform_data; +- int nr = ops ? ops->nr : 0; +- +- MECR = nr > 1 ? MECR_CIT | MECR_NOS : (nr > 0 ? MECR_CIT : 0); +- ret = pcmcia_socket_dev_resume(dev); +- } +- return ret; ++ MECR = nr > 1 ? MECR_CIT | MECR_NOS : (nr > 0 ? MECR_CIT : 0); ++ ++ return pcmcia_socket_dev_resume(dev); + } + + static struct device_driver pxa2xx_pcmcia_driver = { + .probe = pxa2xx_drv_pcmcia_probe, + .remove = soc_common_drv_pcmcia_remove, +- .suspend = pxa2xx_drv_pcmcia_suspend, ++ .suspend = pcmcia_socket_dev_suspend, + .resume = pxa2xx_drv_pcmcia_resume, + .name = "pxa2xx-pcmcia", + .bus = &platform_bus_type, +--- gregkh-2.6.orig/drivers/pcmcia/sa1100_generic.c ++++ gregkh-2.6/drivers/pcmcia/sa1100_generic.c +@@ -74,29 +74,13 @@ static int sa11x0_drv_pcmcia_probe(struc + return ret; + } + +-static int sa11x0_drv_pcmcia_suspend(struct device *dev, pm_message_t state, u32 level) +-{ +- int ret = 0; +- if (level == SUSPEND_SAVE_STATE) +- ret = pcmcia_socket_dev_suspend(dev, state); +- return ret; +-} +- +-static int sa11x0_drv_pcmcia_resume(struct device *dev, u32 level) +-{ +- int ret = 0; +- if (level == RESUME_RESTORE_STATE) +- ret = pcmcia_socket_dev_resume(dev); +- return ret; +-} +- + static struct device_driver sa11x0_pcmcia_driver = { + .probe = sa11x0_drv_pcmcia_probe, + .remove = soc_common_drv_pcmcia_remove, + .name = "sa11x0-pcmcia", + .bus = &platform_bus_type, +- .suspend = sa11x0_drv_pcmcia_suspend, +- .resume = sa11x0_drv_pcmcia_resume, ++ .suspend = pcmcia_socket_dev_suspend, ++ .resume = pcmcia_socket_dev_resume, + }; + + /* sa11x0_pcmcia_init() +--- gregkh-2.6.orig/drivers/pcmcia/tcic.c ++++ gregkh-2.6/drivers/pcmcia/tcic.c +@@ -372,27 +372,11 @@ static int __init get_tcic_id(void) + + /*====================================================================*/ + +-static int tcic_drv_suspend(struct device *dev, pm_message_t state, u32 level) +-{ +- int ret = 0; +- if (level == SUSPEND_SAVE_STATE) +- ret = pcmcia_socket_dev_suspend(dev, state); +- return ret; +-} +- +-static int tcic_drv_resume(struct device *dev, u32 level) +-{ +- int ret = 0; +- if (level == RESUME_RESTORE_STATE) +- ret = pcmcia_socket_dev_resume(dev); +- return ret; +-} +- + static struct device_driver tcic_driver = { + .name = "tcic-pcmcia", + .bus = &platform_bus_type, +- .suspend = tcic_drv_suspend, +- .resume = tcic_drv_resume, ++ .suspend = pcmcia_socket_dev_suspend, ++ .resume = pcmcia_socket_dev_resume, + }; + + static struct platform_device tcic_device = { +--- gregkh-2.6.orig/drivers/pcmcia/vrc4171_card.c ++++ gregkh-2.6/drivers/pcmcia/vrc4171_card.c +@@ -774,31 +774,11 @@ static int __devinit vrc4171_card_setup( + + __setup("vrc4171_card=", vrc4171_card_setup); + +-static int vrc4171_card_suspend(struct device *dev, pm_message_t state, u32 level) +-{ +- int retval = 0; +- +- if (level == SUSPEND_SAVE_STATE) +- retval = pcmcia_socket_dev_suspend(dev, state); +- +- return retval; +-} +- +-static int vrc4171_card_resume(struct device *dev, u32 level) +-{ +- int retval = 0; +- +- if (level == RESUME_RESTORE_STATE) +- retval = pcmcia_socket_dev_resume(dev); +- +- return retval; +-} +- + static struct device_driver vrc4171_card_driver = { + .name = vrc4171_card_name, + .bus = &platform_bus_type, +- .suspend = vrc4171_card_suspend, +- .resume = vrc4171_card_resume, ++ .suspend = pcmcia_socket_dev_suspend, ++ .resume = pcmcia_socket_dev_resume, + }; + + static int __devinit vrc4171_card_init(void) +--- gregkh-2.6.orig/drivers/serial/8250.c ++++ gregkh-2.6/drivers/serial/8250.c +@@ -2358,13 +2358,10 @@ static int __devexit serial8250_remove(s + return 0; + } + +-static int serial8250_suspend(struct device *dev, pm_message_t state, u32 level) ++static int serial8250_suspend(struct device *dev, pm_message_t state) + { + int i; + +- if (level != SUSPEND_DISABLE) +- return 0; +- + for (i = 0; i < UART_NR; i++) { + struct uart_8250_port *up = &serial8250_ports[i]; + +@@ -2375,13 +2372,10 @@ static int serial8250_suspend(struct dev + return 0; + } + +-static int serial8250_resume(struct device *dev, u32 level) ++static int serial8250_resume(struct device *dev) + { + int i; + +- if (level != RESUME_ENABLE) +- return 0; +- + for (i = 0; i < UART_NR; i++) { + struct uart_8250_port *up = &serial8250_ports[i]; + +--- gregkh-2.6.orig/drivers/serial/imx.c ++++ gregkh-2.6/drivers/serial/imx.c +@@ -921,21 +921,21 @@ static struct uart_driver imx_reg = { + .cons = IMX_CONSOLE, + }; + +-static int serial_imx_suspend(struct device *_dev, pm_message_t state, u32 level) ++static int serial_imx_suspend(struct device *_dev, pm_message_t state) + { + struct imx_port *sport = dev_get_drvdata(_dev); + +- if (sport && level == SUSPEND_DISABLE) ++ if (sport) + uart_suspend_port(&imx_reg, &sport->port); + + return 0; + } + +-static int serial_imx_resume(struct device *_dev, u32 level) ++static int serial_imx_resume(struct device *_dev) + { + struct imx_port *sport = dev_get_drvdata(_dev); + +- if (sport && level == RESUME_ENABLE) ++ if (sport) + uart_resume_port(&imx_reg, &sport->port); + + return 0; +--- gregkh-2.6.orig/drivers/serial/mpc52xx_uart.c ++++ gregkh-2.6/drivers/serial/mpc52xx_uart.c +@@ -781,22 +781,22 @@ mpc52xx_uart_remove(struct device *dev) + + #ifdef CONFIG_PM + static int +-mpc52xx_uart_suspend(struct device *dev, pm_message_t state, u32 level) ++mpc52xx_uart_suspend(struct device *dev, pm_message_t state) + { + struct uart_port *port = (struct uart_port *) dev_get_drvdata(dev); + +- if (sport && level == SUSPEND_DISABLE) ++ if (sport) + uart_suspend_port(&mpc52xx_uart_driver, port); + + return 0; + } + + static int +-mpc52xx_uart_resume(struct device *dev, u32 level) ++mpc52xx_uart_resume(struct device *dev) + { + struct uart_port *port = (struct uart_port *) dev_get_drvdata(dev); + +- if (port && level == RESUME_ENABLE) ++ if (port) + uart_resume_port(&mpc52xx_uart_driver, port); + + return 0; +--- gregkh-2.6.orig/drivers/serial/pxa.c ++++ gregkh-2.6/drivers/serial/pxa.c +@@ -786,21 +786,21 @@ static struct uart_driver serial_pxa_reg + .cons = PXA_CONSOLE, + }; + +-static int serial_pxa_suspend(struct device *_dev, pm_message_t state, u32 level) ++static int serial_pxa_suspend(struct device *_dev, pm_message_t state) + { + struct uart_pxa_port *sport = dev_get_drvdata(_dev); + +- if (sport && level == SUSPEND_DISABLE) ++ if (sport) + uart_suspend_port(&serial_pxa_reg, &sport->port); + + return 0; + } + +-static int serial_pxa_resume(struct device *_dev, u32 level) ++static int serial_pxa_resume(struct device *_dev) + { + struct uart_pxa_port *sport = dev_get_drvdata(_dev); + +- if (sport && level == RESUME_ENABLE) ++ if (sport) + uart_resume_port(&serial_pxa_reg, &sport->port); + + return 0; +--- gregkh-2.6.orig/drivers/serial/s3c2410.c ++++ gregkh-2.6/drivers/serial/s3c2410.c +@@ -1134,23 +1134,22 @@ static int s3c24xx_serial_remove(struct + + #ifdef CONFIG_PM + +-static int s3c24xx_serial_suspend(struct device *dev, pm_message_t state, +- u32 level) ++static int s3c24xx_serial_suspend(struct device *dev, pm_message_t state) + { + struct uart_port *port = s3c24xx_dev_to_port(dev); + +- if (port && level == SUSPEND_DISABLE) ++ if (port) + uart_suspend_port(&s3c24xx_uart_drv, port); + + return 0; + } + +-static int s3c24xx_serial_resume(struct device *dev, u32 level) ++static int s3c24xx_serial_resume(struct device *dev) + { + struct uart_port *port = s3c24xx_dev_to_port(dev); + struct s3c24xx_uart_port *ourport = to_ourport(port); + +- if (port && level == RESUME_ENABLE) { ++ if (port) { + clk_enable(ourport->clk); + s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port)); + clk_disable(ourport->clk); +--- gregkh-2.6.orig/drivers/serial/sa1100.c ++++ gregkh-2.6/drivers/serial/sa1100.c +@@ -834,21 +834,21 @@ static struct uart_driver sa1100_reg = { + .cons = SA1100_CONSOLE, + }; + +-static int sa1100_serial_suspend(struct device *_dev, pm_message_t state, u32 level) ++static int sa1100_serial_suspend(struct device *_dev, pm_message_t state) + { + struct sa1100_port *sport = dev_get_drvdata(_dev); + +- if (sport && level == SUSPEND_DISABLE) ++ if (sport) + uart_suspend_port(&sa1100_reg, &sport->port); + + return 0; + } + +-static int sa1100_serial_resume(struct device *_dev, u32 level) ++static int sa1100_serial_resume(struct device *_dev) + { + struct sa1100_port *sport = dev_get_drvdata(_dev); + +- if (sport && level == RESUME_ENABLE) ++ if (sport) + uart_resume_port(&sa1100_reg, &sport->port); + + return 0; +--- gregkh-2.6.orig/drivers/serial/vr41xx_siu.c ++++ gregkh-2.6/drivers/serial/vr41xx_siu.c +@@ -976,14 +976,11 @@ static int siu_remove(struct device *dev + return 0; + } + +-static int siu_suspend(struct device *dev, pm_message_t state, u32 level) ++static int siu_suspend(struct device *dev, pm_message_t state) + { + struct uart_port *port; + int i; + +- if (level != SUSPEND_DISABLE) +- return 0; +- + for (i = 0; i < siu_uart_driver.nr; i++) { + port = &siu_uart_ports[i]; + if ((port->type == PORT_VR41XX_SIU || +@@ -995,14 +992,11 @@ static int siu_suspend(struct device *de + return 0; + } + +-static int siu_resume(struct device *dev, u32 level) ++static int siu_resume(struct device *dev) + { + struct uart_port *port; + int i; + +- if (level != RESUME_ENABLE) +- return 0; +- + for (i = 0; i < siu_uart_driver.nr; i++) { + port = &siu_uart_ports[i]; + if ((port->type == PORT_VR41XX_SIU || +--- gregkh-2.6.orig/drivers/usb/gadget/dummy_hcd.c ++++ gregkh-2.6/drivers/usb/gadget/dummy_hcd.c +@@ -935,14 +935,10 @@ static int dummy_udc_remove (struct devi + return 0; + } + +-static int dummy_udc_suspend (struct device *dev, pm_message_t state, +- u32 level) ++static int dummy_udc_suspend (struct device *dev, pm_message_t state) + { + struct dummy *dum = dev_get_drvdata(dev); + +- if (level != SUSPEND_DISABLE) +- return 0; +- + dev_dbg (dev, "%s\n", __FUNCTION__); + spin_lock_irq (&dum->lock); + dum->udc_suspended = 1; +@@ -954,13 +950,10 @@ static int dummy_udc_suspend (struct dev + return 0; + } + +-static int dummy_udc_resume (struct device *dev, u32 level) ++static int dummy_udc_resume (struct device *dev) + { + struct dummy *dum = dev_get_drvdata(dev); + +- if (level != RESUME_ENABLE) +- return 0; +- + dev_dbg (dev, "%s\n", __FUNCTION__); + spin_lock_irq (&dum->lock); + dum->udc_suspended = 0; +@@ -1936,14 +1929,10 @@ static int dummy_hcd_remove (struct devi + return 0; + } + +-static int dummy_hcd_suspend (struct device *dev, pm_message_t state, +- u32 level) ++static int dummy_hcd_suspend (struct device *dev, pm_message_t state) + { + struct usb_hcd *hcd; + +- if (level != SUSPEND_DISABLE) +- return 0; +- + dev_dbg (dev, "%s\n", __FUNCTION__); + hcd = dev_get_drvdata (dev); + +@@ -1958,13 +1947,10 @@ static int dummy_hcd_suspend (struct dev + return 0; + } + +-static int dummy_hcd_resume (struct device *dev, u32 level) ++static int dummy_hcd_resume (struct device *dev) + { + struct usb_hcd *hcd; + +- if (level != RESUME_ENABLE) +- return 0; +- + dev_dbg (dev, "%s\n", __FUNCTION__); + hcd = dev_get_drvdata (dev); + hcd->state = HC_STATE_RUNNING; +--- gregkh-2.6.orig/drivers/usb/gadget/omap_udc.c ++++ gregkh-2.6/drivers/usb/gadget/omap_udc.c +@@ -2909,12 +2909,10 @@ static int __exit omap_udc_remove(struct + * may involve talking to an external transceiver (e.g. isp1301). + */ + +-static int omap_udc_suspend(struct device *dev, pm_message_t message, u32 level) ++static int omap_udc_suspend(struct device *dev, pm_message_t message) + { + u32 devstat; + +- if (level != SUSPEND_POWER_DOWN) +- return 0; + devstat = UDC_DEVSTAT_REG; + + /* we're requesting 48 MHz clock if the pullup is enabled +@@ -2931,11 +2929,8 @@ static int omap_udc_suspend(struct devic + return 0; + } + +-static int omap_udc_resume(struct device *dev, u32 level) ++static int omap_udc_resume(struct device *dev) + { +- if (level != RESUME_POWER_ON) +- return 0; +- + DBG("resume + wakeup/SRP\n"); + omap_pullup(&udc->gadget, 1); + +--- gregkh-2.6.orig/drivers/usb/gadget/pxa2xx_udc.c ++++ gregkh-2.6/drivers/usb/gadget/pxa2xx_udc.c +@@ -2602,24 +2602,23 @@ static int __exit pxa2xx_udc_remove(stru + * VBUS IRQs should probably be ignored so that the PXA device just acts + * "dead" to USB hosts until system resume. + */ +-static int pxa2xx_udc_suspend(struct device *dev, pm_message_t state, u32 level) ++static int pxa2xx_udc_suspend(struct device *dev, pm_message_t state) + { + struct pxa2xx_udc *udc = dev_get_drvdata(dev); + +- if (level == SUSPEND_POWER_DOWN) { +- if (!udc->mach->udc_command) +- WARN("USB host won't detect disconnect!\n"); +- pullup(udc, 0); +- } ++ if (!udc->mach->udc_command) ++ WARN("USB host won't detect disconnect!\n"); ++ pullup(udc, 0); ++ + return 0; + } + +-static int pxa2xx_udc_resume(struct device *dev, u32 level) ++static int pxa2xx_udc_resume(struct device *dev) + { + struct pxa2xx_udc *udc = dev_get_drvdata(dev); + +- if (level == RESUME_POWER_ON) +- pullup(udc, 1); ++ pullup(udc, 1); ++ + return 0; + } + +--- gregkh-2.6.orig/drivers/usb/host/isp116x-hcd.c ++++ gregkh-2.6/drivers/usb/host/isp116x-hcd.c +@@ -1774,15 +1774,12 @@ static int __init isp116x_probe(struct d + /* + Suspend of platform device + */ +-static int isp116x_suspend(struct device *dev, pm_message_t state, u32 phase) ++static int isp116x_suspend(struct device *dev, pm_message_t state) + { + int ret = 0; + struct usb_hcd *hcd = dev_get_drvdata(dev); + +- VDBG("%s: state %x, phase %x\n", __func__, state, phase); +- +- if (phase != SUSPEND_DISABLE && phase != SUSPEND_POWER_DOWN) +- return 0; ++ VDBG("%s: state %x\n", __func__, state); + + ret = usb_suspend_device(hcd->self.root_hub, state); + if (!ret) { +@@ -1797,15 +1794,12 @@ static int isp116x_suspend(struct device + /* + Resume platform device + */ +-static int isp116x_resume(struct device *dev, u32 phase) ++static int isp116x_resume(struct device *dev) + { + int ret = 0; + struct usb_hcd *hcd = dev_get_drvdata(dev); + +- VDBG("%s: state %x, phase %x\n", __func__, dev->power.power_state, +- phase); +- if (phase != RESUME_POWER_ON) +- return 0; ++ VDBG("%s: state %x\n", __func__, dev->power.power_state); + + ret = usb_resume_device(hcd->self.root_hub); + if (!ret) { +--- gregkh-2.6.orig/drivers/usb/host/ohci-omap.c ++++ gregkh-2.6/drivers/usb/host/ohci-omap.c +@@ -455,14 +455,11 @@ static int ohci_hcd_omap_drv_remove(stru + + #ifdef CONFIG_PM + +-static int ohci_omap_suspend(struct device *dev, pm_message_t message, u32 level) ++static int ohci_omap_suspend(struct device *dev, pm_message_t message) + { + struct ohci_hcd *ohci = hcd_to_ohci(dev_get_drvdata(dev)); + int status = -EINVAL; + +- if (level != SUSPEND_POWER_DOWN) +- return 0; +- + down(&ohci_to_hcd(ohci)->self.root_hub->serialize); + status = ohci_hub_suspend(ohci_to_hcd(ohci)); + if (status == 0) { +@@ -476,14 +473,11 @@ static int ohci_omap_suspend(struct devi + return status; + } + +-static int ohci_omap_resume(struct device *dev, u32 level) ++static int ohci_omap_resume(struct device *dev) + { + struct ohci_hcd *ohci = hcd_to_ohci(dev_get_drvdata(dev)); + int status = 0; + +- if (level != RESUME_POWER_ON) +- return 0; +- + if (time_before(jiffies, ohci->next_statechange)) + msleep(5); + ohci->next_statechange = jiffies; +--- gregkh-2.6.orig/drivers/usb/host/ohci-pxa27x.c ++++ gregkh-2.6/drivers/usb/host/ohci-pxa27x.c +@@ -309,7 +309,7 @@ static int ohci_hcd_pxa27x_drv_remove(st + return 0; + } + +-static int ohci_hcd_pxa27x_drv_suspend(struct device *dev, pm_message_t state, u32 level) ++static int ohci_hcd_pxa27x_drv_suspend(struct device *dev, pm_message_t state) + { + // struct platform_device *pdev = to_platform_device(dev); + // struct usb_hcd *hcd = dev_get_drvdata(dev); +@@ -318,7 +318,7 @@ static int ohci_hcd_pxa27x_drv_suspend(s + return 0; + } + +-static int ohci_hcd_pxa27x_drv_resume(struct device *dev, u32 level) ++static int ohci_hcd_pxa27x_drv_resume(struct device *dev) + { + // struct platform_device *pdev = to_platform_device(dev); + // struct usb_hcd *hcd = dev_get_drvdata(dev); +--- gregkh-2.6.orig/drivers/usb/host/sl811-hcd.c ++++ gregkh-2.6/drivers/usb/host/sl811-hcd.c +@@ -1784,15 +1784,12 @@ sl811h_probe(struct device *dev) + */ + + static int +-sl811h_suspend(struct device *dev, pm_message_t state, u32 phase) ++sl811h_suspend(struct device *dev, pm_message_t state) + { + struct usb_hcd *hcd = dev_get_drvdata(dev); + struct sl811 *sl811 = hcd_to_sl811(hcd); + int retval = 0; + +- if (phase != SUSPEND_POWER_DOWN) +- return retval; +- + if (state.event == PM_EVENT_FREEZE) + retval = sl811h_hub_suspend(hcd); + else if (state.event == PM_EVENT_SUSPEND) +@@ -1803,14 +1800,11 @@ sl811h_suspend(struct device *dev, pm_me + } + + static int +-sl811h_resume(struct device *dev, u32 phase) ++sl811h_resume(struct device *dev) + { + struct usb_hcd *hcd = dev_get_drvdata(dev); + struct sl811 *sl811 = hcd_to_sl811(hcd); + +- if (phase != RESUME_POWER_ON) +- return 0; +- + /* with no "check to see if VBUS is still powered" board hook, + * let's assume it'd only be powered to enable remote wakeup. + */ +--- gregkh-2.6.orig/drivers/video/backlight/corgi_bl.c ++++ gregkh-2.6/drivers/video/backlight/corgi_bl.c +@@ -73,17 +73,15 @@ static void corgibl_blank(int blank) + } + + #ifdef CONFIG_PM +-static int corgibl_suspend(struct device *dev, pm_message_t state, u32 level) ++static int corgibl_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_POWER_DOWN) +- corgibl_blank(FB_BLANK_POWERDOWN); ++ corgibl_blank(FB_BLANK_POWERDOWN); + return 0; + } + +-static int corgibl_resume(struct device *dev, u32 level) ++static int corgibl_resume(struct device *dev) + { +- if (level == RESUME_POWER_ON) +- corgibl_blank(FB_BLANK_UNBLANK); ++ corgibl_blank(FB_BLANK_UNBLANK); + return 0; + } + #else +--- gregkh-2.6.orig/drivers/video/imxfb.c ++++ gregkh-2.6/drivers/video/imxfb.c +@@ -424,23 +424,21 @@ static void imxfb_setup_gpio(struct imxf + * Power management hooks. Note that we won't be called from IRQ context, + * unlike the blank functions above, so we may sleep. + */ +-static int imxfb_suspend(struct device *dev, pm_message_t state, u32 level) ++static int imxfb_suspend(struct device *dev, pm_message_t state) + { + struct imxfb_info *fbi = dev_get_drvdata(dev); + pr_debug("%s\n",__FUNCTION__); + +- if (level == SUSPEND_DISABLE || level == SUSPEND_POWER_DOWN) +- imxfb_disable_controller(fbi); ++ imxfb_disable_controller(fbi); + return 0; + } + +-static int imxfb_resume(struct device *dev, u32 level) ++static int imxfb_resume(struct device *dev) + { + struct imxfb_info *fbi = dev_get_drvdata(dev); + pr_debug("%s\n",__FUNCTION__); + +- if (level == RESUME_ENABLE) +- imxfb_enable_controller(fbi); ++ imxfb_enable_controller(fbi); + return 0; + } + #else +--- gregkh-2.6.orig/drivers/video/pxafb.c ++++ gregkh-2.6/drivers/video/pxafb.c +@@ -981,21 +981,19 @@ pxafb_freq_policy(struct notifier_block + * Power management hooks. Note that we won't be called from IRQ context, + * unlike the blank functions above, so we may sleep. + */ +-static int pxafb_suspend(struct device *dev, pm_message_t state, u32 level) ++static int pxafb_suspend(struct device *dev, pm_message_t state) + { + struct pxafb_info *fbi = dev_get_drvdata(dev); + +- if (level == SUSPEND_DISABLE || level == SUSPEND_POWER_DOWN) +- set_ctrlr_state(fbi, C_DISABLE_PM); ++ set_ctrlr_state(fbi, C_DISABLE_PM); + return 0; + } + +-static int pxafb_resume(struct device *dev, u32 level) ++static int pxafb_resume(struct device *dev) + { + struct pxafb_info *fbi = dev_get_drvdata(dev); + +- if (level == RESUME_ENABLE) +- set_ctrlr_state(fbi, C_ENABLE_PM); ++ set_ctrlr_state(fbi, C_ENABLE_PM); + return 0; + } + #else +--- gregkh-2.6.orig/drivers/video/s1d13xxxfb.c ++++ gregkh-2.6/drivers/video/s1d13xxxfb.c +@@ -655,7 +655,7 @@ bail: + } + + #ifdef CONFIG_PM +-static int s1d13xxxfb_suspend(struct device *dev, pm_message_t state, u32 level) ++static int s1d13xxxfb_suspend(struct device *dev, pm_message_t state) + { + struct fb_info *info = dev_get_drvdata(dev); + struct s1d13xxxfb_par *s1dfb = info->par; +@@ -702,15 +702,12 @@ static int s1d13xxxfb_suspend(struct dev + return 0; + } + +-static int s1d13xxxfb_resume(struct device *dev, u32 level) ++static int s1d13xxxfb_resume(struct device *dev) + { + struct fb_info *info = dev_get_drvdata(dev); + struct s1d13xxxfb_par *s1dfb = info->par; + struct s1d13xxxfb_pdata *pdata = NULL; + +- if (level != RESUME_ENABLE) +- return 0; +- + /* awaken the chip */ + s1d13xxxfb_writereg(s1dfb, S1DREG_PS_CNF, 0x10); + +--- gregkh-2.6.orig/drivers/video/s3c2410fb.c ++++ gregkh-2.6/drivers/video/s3c2410fb.c +@@ -847,37 +847,32 @@ static int s3c2410fb_remove(struct devic + + /* suspend and resume support for the lcd controller */ + +-static int s3c2410fb_suspend(struct device *dev, pm_message_t state, u32 level) ++static int s3c2410fb_suspend(struct device *dev, pm_message_t state) + { + struct fb_info *fbinfo = dev_get_drvdata(dev); + struct s3c2410fb_info *info = fbinfo->par; + +- if (level == SUSPEND_DISABLE || level == SUSPEND_POWER_DOWN) { +- s3c2410fb_stop_lcd(); ++ s3c2410fb_stop_lcd(); + +- /* sleep before disabling the clock, we need to ensure +- * the LCD DMA engine is not going to get back on the bus +- * before the clock goes off again (bjd) */ +- +- msleep(1); +- clk_disable(info->clk); +- } ++ /* sleep before disabling the clock, we need to ensure ++ * the LCD DMA engine is not going to get back on the bus ++ * before the clock goes off again (bjd) */ ++ ++ msleep(1); ++ clk_disable(info->clk); + + return 0; + } + +-static int s3c2410fb_resume(struct device *dev, u32 level) ++static int s3c2410fb_resume(struct device *dev) + { + struct fb_info *fbinfo = dev_get_drvdata(dev); + struct s3c2410fb_info *info = fbinfo->par; + +- if (level == RESUME_ENABLE) { +- clk_enable(info->clk); +- msleep(1); +- +- s3c2410fb_init_registers(info); ++ clk_enable(info->clk); ++ msleep(1); + +- } ++ s3c2410fb_init_registers(info); + + return 0; + } +--- gregkh-2.6.orig/drivers/video/sa1100fb.c ++++ gregkh-2.6/drivers/video/sa1100fb.c +@@ -1309,21 +1309,19 @@ sa1100fb_freq_policy(struct notifier_blo + * Power management hooks. Note that we won't be called from IRQ context, + * unlike the blank functions above, so we may sleep. + */ +-static int sa1100fb_suspend(struct device *dev, pm_message_t state, u32 level) ++static int sa1100fb_suspend(struct device *dev, pm_message_t state) + { + struct sa1100fb_info *fbi = dev_get_drvdata(dev); + +- if (level == SUSPEND_DISABLE || level == SUSPEND_POWER_DOWN) +- set_ctrlr_state(fbi, C_DISABLE_PM); ++ set_ctrlr_state(fbi, C_DISABLE_PM); + return 0; + } + +-static int sa1100fb_resume(struct device *dev, u32 level) ++static int sa1100fb_resume(struct device *dev) + { + struct sa1100fb_info *fbi = dev_get_drvdata(dev); + +- if (level == RESUME_ENABLE) +- set_ctrlr_state(fbi, C_ENABLE_PM); ++ set_ctrlr_state(fbi, C_ENABLE_PM); + return 0; + } + #else +--- gregkh-2.6.orig/drivers/video/w100fb.c ++++ gregkh-2.6/drivers/video/w100fb.c +@@ -438,36 +438,34 @@ static void w100fb_restore_vidmem(struct + } + } + +-static int w100fb_suspend(struct device *dev, pm_message_t state, uint32_t level) ++static int w100fb_suspend(struct device *dev, pm_message_t state) + { +- if (level == SUSPEND_POWER_DOWN) { +- struct fb_info *info = dev_get_drvdata(dev); +- struct w100fb_par *par=info->par; +- struct w100_tg_info *tg = par->mach->tg; +- +- w100fb_save_vidmem(par); +- if(tg && tg->suspend) +- tg->suspend(par); +- w100_suspend(W100_SUSPEND_ALL); +- par->blanked = 1; +- } ++ struct fb_info *info = dev_get_drvdata(dev); ++ struct w100fb_par *par=info->par; ++ struct w100_tg_info *tg = par->mach->tg; ++ ++ w100fb_save_vidmem(par); ++ if(tg && tg->suspend) ++ tg->suspend(par); ++ w100_suspend(W100_SUSPEND_ALL); ++ par->blanked = 1; ++ + return 0; + } + +-static int w100fb_resume(struct device *dev, uint32_t level) ++static int w100fb_resume(struct device *dev) + { +- if (level == RESUME_POWER_ON) { +- struct fb_info *info = dev_get_drvdata(dev); +- struct w100fb_par *par=info->par; +- struct w100_tg_info *tg = par->mach->tg; +- +- w100_hw_init(par); +- w100fb_activate_var(par); +- w100fb_restore_vidmem(par); +- if(tg && tg->resume) +- tg->resume(par); +- par->blanked = 0; +- } ++ struct fb_info *info = dev_get_drvdata(dev); ++ struct w100fb_par *par=info->par; ++ struct w100_tg_info *tg = par->mach->tg; ++ ++ w100_hw_init(par); ++ w100fb_activate_var(par); ++ w100fb_restore_vidmem(par); ++ if(tg && tg->resume) ++ tg->resume(par); ++ par->blanked = 0; ++ + return 0; + } + #else +--- gregkh-2.6.orig/include/linux/device.h ++++ gregkh-2.6/include/linux/device.h +@@ -28,19 +28,6 @@ + #define BUS_ID_SIZE KOBJ_NAME_LEN + + +-enum { +- SUSPEND_NOTIFY, +- SUSPEND_SAVE_STATE, +- SUSPEND_DISABLE, +- SUSPEND_POWER_DOWN, +-}; +- +-enum { +- RESUME_POWER_ON, +- RESUME_RESTORE_STATE, +- RESUME_ENABLE, +-}; +- + struct device; + struct device_driver; + struct class; +@@ -115,8 +102,8 @@ struct device_driver { + int (*probe) (struct device * dev); + int (*remove) (struct device * dev); + void (*shutdown) (struct device * dev); +- int (*suspend) (struct device * dev, pm_message_t state, u32 level); +- int (*resume) (struct device * dev, u32 level); ++ int (*suspend) (struct device * dev, pm_message_t state); ++ int (*resume) (struct device * dev); + }; + + +--- gregkh-2.6.orig/sound/arm/pxa2xx-ac97.c ++++ gregkh-2.6/sound/arm/pxa2xx-ac97.c +@@ -275,23 +275,23 @@ static int pxa2xx_ac97_do_resume(snd_car + return 0; + } + +-static int pxa2xx_ac97_suspend(struct device *_dev, pm_message_t state, u32 level) ++static int pxa2xx_ac97_suspend(struct device *_dev, pm_message_t state) + { + snd_card_t *card = dev_get_drvdata(_dev); + int ret = 0; + +- if (card && level == SUSPEND_DISABLE) ++ if (card) + ret = pxa2xx_ac97_do_suspend(card, PMSG_SUSPEND); + + return ret; + } + +-static int pxa2xx_ac97_resume(struct device *_dev, u32 level) ++static int pxa2xx_ac97_resume(struct device *_dev) + { + snd_card_t *card = dev_get_drvdata(_dev); + int ret = 0; + +- if (card && level == RESUME_ENABLE) ++ if (card) + ret = pxa2xx_ac97_do_resume(card); + + return ret; +--- gregkh-2.6.orig/sound/core/init.c ++++ gregkh-2.6/sound/core/init.c +@@ -676,8 +676,8 @@ struct snd_generic_device { + #define SND_GENERIC_NAME "snd_generic" + + #ifdef CONFIG_PM +-static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level); +-static int snd_generic_resume(struct device *dev, u32 level); ++static int snd_generic_suspend(struct device *dev, pm_message_t state); ++static int snd_generic_resume(struct device *dev); + #endif + + /* initialized in sound.c */ +@@ -818,13 +818,10 @@ int snd_card_set_pm_callback(snd_card_t + + #ifdef CONFIG_SND_GENERIC_DRIVER + /* suspend/resume callbacks for snd_generic platform device */ +-static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level) ++static int snd_generic_suspend(struct device *dev, pm_message_t state) + { + snd_card_t *card; + +- if (level != SUSPEND_DISABLE) +- return 0; +- + card = get_snd_generic_card(dev); + if (card->power_state == SNDRV_CTL_POWER_D3hot) + return 0; +@@ -833,13 +830,10 @@ static int snd_generic_suspend(struct de + return 0; + } + +-static int snd_generic_resume(struct device *dev, u32 level) ++static int snd_generic_resume(struct device *dev) + { + snd_card_t *card; + +- if (level != RESUME_ENABLE) +- return 0; +- + card = get_snd_generic_card(dev); + if (card->power_state == SNDRV_CTL_POWER_D0) + return 0; +--- gregkh-2.6.orig/sound/pci/ac97/ac97_bus.c ++++ gregkh-2.6/sound/pci/ac97/ac97_bus.c +@@ -31,7 +31,8 @@ static int ac97_bus_suspend(struct devic + int ret = 0; + + if (dev->driver && dev->driver->suspend) +- ret = dev->driver->suspend(dev, state, SUSPEND_POWER_DOWN); ++ ret = dev->driver->suspend(dev, state); ++ + return ret; + } + +@@ -40,7 +41,8 @@ static int ac97_bus_resume(struct device + int ret = 0; + + if (dev->driver && dev->driver->resume) +- ret = dev->driver->resume(dev, RESUME_POWER_ON); ++ ret = dev->driver->resume(dev); ++ + return ret; + } + |