Commit e4e139be authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'pm-for-3.6-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull power management fixes from Rafael J. Wysocki:

 - Fix for two recent regressions in the generic PM domains framework.

 - Revert of a commit that introduced a resume regression and is
   conceptually incorrect in my opinion.

 - Fix for a return value in pcc-cpufreq.c from Julia Lawall.

 - RTC wakeup signaling fix from Neil Brown.

 - Suppression of compiler warnings for CONFIG_PM_SLEEP unset in ACPI,
   platform/x86 and TPM drivers.

* tag 'pm-for-3.6-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  tpm_tis / PM: Fix unused function warning for CONFIG_PM_SLEEP
  platform / x86 / PM: Fix unused function warnings for CONFIG_PM_SLEEP
  ACPI / PM: Fix unused function warnings for CONFIG_PM_SLEEP
  Revert "NMI watchdog: fix for lockup detector breakage on resume"
  PM: Make dev_pm_get_subsys_data() always return 0 on success
  drivers/cpufreq/pcc-cpufreq.c: fix error return code
  RTC: Avoid races between RTC alarm wakeup and suspend.
parents 88de3d0d 07368d32
...@@ -69,7 +69,9 @@ static const struct acpi_device_id ac_device_ids[] = { ...@@ -69,7 +69,9 @@ static const struct acpi_device_id ac_device_ids[] = {
}; };
MODULE_DEVICE_TABLE(acpi, ac_device_ids); MODULE_DEVICE_TABLE(acpi, ac_device_ids);
#ifdef CONFIG_PM_SLEEP
static int acpi_ac_resume(struct device *dev); static int acpi_ac_resume(struct device *dev);
#endif
static SIMPLE_DEV_PM_OPS(acpi_ac_pm, NULL, acpi_ac_resume); static SIMPLE_DEV_PM_OPS(acpi_ac_pm, NULL, acpi_ac_resume);
static struct acpi_driver acpi_ac_driver = { static struct acpi_driver acpi_ac_driver = {
...@@ -313,6 +315,7 @@ static int acpi_ac_add(struct acpi_device *device) ...@@ -313,6 +315,7 @@ static int acpi_ac_add(struct acpi_device *device)
return result; return result;
} }
#ifdef CONFIG_PM_SLEEP
static int acpi_ac_resume(struct device *dev) static int acpi_ac_resume(struct device *dev)
{ {
struct acpi_ac *ac; struct acpi_ac *ac;
...@@ -332,6 +335,7 @@ static int acpi_ac_resume(struct device *dev) ...@@ -332,6 +335,7 @@ static int acpi_ac_resume(struct device *dev)
kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE);
return 0; return 0;
} }
#endif
static int acpi_ac_remove(struct acpi_device *device, int type) static int acpi_ac_remove(struct acpi_device *device, int type)
{ {
......
...@@ -1052,6 +1052,7 @@ static int acpi_battery_remove(struct acpi_device *device, int type) ...@@ -1052,6 +1052,7 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
return 0; return 0;
} }
#ifdef CONFIG_PM_SLEEP
/* this is needed to learn about changes made in suspended state */ /* this is needed to learn about changes made in suspended state */
static int acpi_battery_resume(struct device *dev) static int acpi_battery_resume(struct device *dev)
{ {
...@@ -1068,6 +1069,7 @@ static int acpi_battery_resume(struct device *dev) ...@@ -1068,6 +1069,7 @@ static int acpi_battery_resume(struct device *dev)
acpi_battery_update(battery); acpi_battery_update(battery);
return 0; return 0;
} }
#endif
static SIMPLE_DEV_PM_OPS(acpi_battery_pm, NULL, acpi_battery_resume); static SIMPLE_DEV_PM_OPS(acpi_battery_pm, NULL, acpi_battery_resume);
......
...@@ -78,7 +78,9 @@ static int acpi_button_add(struct acpi_device *device); ...@@ -78,7 +78,9 @@ static int acpi_button_add(struct acpi_device *device);
static int acpi_button_remove(struct acpi_device *device, int type); static int acpi_button_remove(struct acpi_device *device, int type);
static void acpi_button_notify(struct acpi_device *device, u32 event); static void acpi_button_notify(struct acpi_device *device, u32 event);
#ifdef CONFIG_PM_SLEEP
static int acpi_button_resume(struct device *dev); static int acpi_button_resume(struct device *dev);
#endif
static SIMPLE_DEV_PM_OPS(acpi_button_pm, NULL, acpi_button_resume); static SIMPLE_DEV_PM_OPS(acpi_button_pm, NULL, acpi_button_resume);
static struct acpi_driver acpi_button_driver = { static struct acpi_driver acpi_button_driver = {
...@@ -310,6 +312,7 @@ static void acpi_button_notify(struct acpi_device *device, u32 event) ...@@ -310,6 +312,7 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
} }
} }
#ifdef CONFIG_PM_SLEEP
static int acpi_button_resume(struct device *dev) static int acpi_button_resume(struct device *dev)
{ {
struct acpi_device *device = to_acpi_device(dev); struct acpi_device *device = to_acpi_device(dev);
...@@ -319,6 +322,7 @@ static int acpi_button_resume(struct device *dev) ...@@ -319,6 +322,7 @@ static int acpi_button_resume(struct device *dev)
return acpi_lid_send_state(device); return acpi_lid_send_state(device);
return 0; return 0;
} }
#endif
static int acpi_button_add(struct acpi_device *device) static int acpi_button_add(struct acpi_device *device)
{ {
......
...@@ -53,8 +53,10 @@ static const struct acpi_device_id fan_device_ids[] = { ...@@ -53,8 +53,10 @@ static const struct acpi_device_id fan_device_ids[] = {
}; };
MODULE_DEVICE_TABLE(acpi, fan_device_ids); MODULE_DEVICE_TABLE(acpi, fan_device_ids);
#ifdef CONFIG_PM_SLEEP
static int acpi_fan_suspend(struct device *dev); static int acpi_fan_suspend(struct device *dev);
static int acpi_fan_resume(struct device *dev); static int acpi_fan_resume(struct device *dev);
#endif
static SIMPLE_DEV_PM_OPS(acpi_fan_pm, acpi_fan_suspend, acpi_fan_resume); static SIMPLE_DEV_PM_OPS(acpi_fan_pm, acpi_fan_suspend, acpi_fan_resume);
static struct acpi_driver acpi_fan_driver = { static struct acpi_driver acpi_fan_driver = {
...@@ -184,6 +186,7 @@ static int acpi_fan_remove(struct acpi_device *device, int type) ...@@ -184,6 +186,7 @@ static int acpi_fan_remove(struct acpi_device *device, int type)
return 0; return 0;
} }
#ifdef CONFIG_PM_SLEEP
static int acpi_fan_suspend(struct device *dev) static int acpi_fan_suspend(struct device *dev)
{ {
if (!dev) if (!dev)
...@@ -207,6 +210,7 @@ static int acpi_fan_resume(struct device *dev) ...@@ -207,6 +210,7 @@ static int acpi_fan_resume(struct device *dev)
return result; return result;
} }
#endif
static int __init acpi_fan_init(void) static int __init acpi_fan_init(void)
{ {
......
...@@ -67,7 +67,9 @@ static const struct acpi_device_id power_device_ids[] = { ...@@ -67,7 +67,9 @@ static const struct acpi_device_id power_device_ids[] = {
}; };
MODULE_DEVICE_TABLE(acpi, power_device_ids); MODULE_DEVICE_TABLE(acpi, power_device_ids);
#ifdef CONFIG_PM_SLEEP
static int acpi_power_resume(struct device *dev); static int acpi_power_resume(struct device *dev);
#endif
static SIMPLE_DEV_PM_OPS(acpi_power_pm, NULL, acpi_power_resume); static SIMPLE_DEV_PM_OPS(acpi_power_pm, NULL, acpi_power_resume);
static struct acpi_driver acpi_power_driver = { static struct acpi_driver acpi_power_driver = {
...@@ -775,6 +777,7 @@ static int acpi_power_remove(struct acpi_device *device, int type) ...@@ -775,6 +777,7 @@ static int acpi_power_remove(struct acpi_device *device, int type)
return 0; return 0;
} }
#ifdef CONFIG_PM_SLEEP
static int acpi_power_resume(struct device *dev) static int acpi_power_resume(struct device *dev)
{ {
int result = 0, state; int result = 0, state;
...@@ -803,6 +806,7 @@ static int acpi_power_resume(struct device *dev) ...@@ -803,6 +806,7 @@ static int acpi_power_resume(struct device *dev)
return result; return result;
} }
#endif
int __init acpi_power_init(void) int __init acpi_power_init(void)
{ {
......
...@@ -988,6 +988,7 @@ static void acpi_sbs_rmdirs(void) ...@@ -988,6 +988,7 @@ static void acpi_sbs_rmdirs(void)
#endif #endif
} }
#ifdef CONFIG_PM_SLEEP
static int acpi_sbs_resume(struct device *dev) static int acpi_sbs_resume(struct device *dev)
{ {
struct acpi_sbs *sbs; struct acpi_sbs *sbs;
...@@ -997,6 +998,7 @@ static int acpi_sbs_resume(struct device *dev) ...@@ -997,6 +998,7 @@ static int acpi_sbs_resume(struct device *dev)
acpi_sbs_callback(sbs); acpi_sbs_callback(sbs);
return 0; return 0;
} }
#endif
static SIMPLE_DEV_PM_OPS(acpi_sbs_pm, NULL, acpi_sbs_resume); static SIMPLE_DEV_PM_OPS(acpi_sbs_pm, NULL, acpi_sbs_resume);
......
...@@ -106,7 +106,9 @@ static const struct acpi_device_id thermal_device_ids[] = { ...@@ -106,7 +106,9 @@ static const struct acpi_device_id thermal_device_ids[] = {
}; };
MODULE_DEVICE_TABLE(acpi, thermal_device_ids); MODULE_DEVICE_TABLE(acpi, thermal_device_ids);
#ifdef CONFIG_PM_SLEEP
static int acpi_thermal_resume(struct device *dev); static int acpi_thermal_resume(struct device *dev);
#endif
static SIMPLE_DEV_PM_OPS(acpi_thermal_pm, NULL, acpi_thermal_resume); static SIMPLE_DEV_PM_OPS(acpi_thermal_pm, NULL, acpi_thermal_resume);
static struct acpi_driver acpi_thermal_driver = { static struct acpi_driver acpi_thermal_driver = {
...@@ -1041,6 +1043,7 @@ static int acpi_thermal_remove(struct acpi_device *device, int type) ...@@ -1041,6 +1043,7 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
return 0; return 0;
} }
#ifdef CONFIG_PM_SLEEP
static int acpi_thermal_resume(struct device *dev) static int acpi_thermal_resume(struct device *dev)
{ {
struct acpi_thermal *tz; struct acpi_thermal *tz;
...@@ -1075,6 +1078,7 @@ static int acpi_thermal_resume(struct device *dev) ...@@ -1075,6 +1078,7 @@ static int acpi_thermal_resume(struct device *dev)
return AE_OK; return AE_OK;
} }
#endif
static int thermal_act(const struct dmi_system_id *d) { static int thermal_act(const struct dmi_system_id *d) {
......
...@@ -169,8 +169,7 @@ void pm_clk_init(struct device *dev) ...@@ -169,8 +169,7 @@ void pm_clk_init(struct device *dev)
*/ */
int pm_clk_create(struct device *dev) int pm_clk_create(struct device *dev)
{ {
int ret = dev_pm_get_subsys_data(dev); return dev_pm_get_subsys_data(dev);
return ret < 0 ? ret : 0;
} }
/** /**
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
int dev_pm_get_subsys_data(struct device *dev) int dev_pm_get_subsys_data(struct device *dev)
{ {
struct pm_subsys_data *psd; struct pm_subsys_data *psd;
int ret = 0;
psd = kzalloc(sizeof(*psd), GFP_KERNEL); psd = kzalloc(sizeof(*psd), GFP_KERNEL);
if (!psd) if (!psd)
...@@ -40,7 +39,6 @@ int dev_pm_get_subsys_data(struct device *dev) ...@@ -40,7 +39,6 @@ int dev_pm_get_subsys_data(struct device *dev)
dev->power.subsys_data = psd; dev->power.subsys_data = psd;
pm_clk_init(dev); pm_clk_init(dev);
psd = NULL; psd = NULL;
ret = 1;
} }
spin_unlock_irq(&dev->power.lock); spin_unlock_irq(&dev->power.lock);
...@@ -48,7 +46,7 @@ int dev_pm_get_subsys_data(struct device *dev) ...@@ -48,7 +46,7 @@ int dev_pm_get_subsys_data(struct device *dev)
/* kfree() verifies that its argument is nonzero. */ /* kfree() verifies that its argument is nonzero. */
kfree(psd); kfree(psd);
return ret; return 0;
} }
EXPORT_SYMBOL_GPL(dev_pm_get_subsys_data); EXPORT_SYMBOL_GPL(dev_pm_get_subsys_data);
......
...@@ -807,6 +807,7 @@ module_param_string(hid, tpm_pnp_tbl[TIS_HID_USR_IDX].id, ...@@ -807,6 +807,7 @@ module_param_string(hid, tpm_pnp_tbl[TIS_HID_USR_IDX].id,
MODULE_PARM_DESC(hid, "Set additional specific HID for this driver to probe"); MODULE_PARM_DESC(hid, "Set additional specific HID for this driver to probe");
#endif #endif
#ifdef CONFIG_PM_SLEEP
static int tpm_tis_resume(struct device *dev) static int tpm_tis_resume(struct device *dev)
{ {
struct tpm_chip *chip = dev_get_drvdata(dev); struct tpm_chip *chip = dev_get_drvdata(dev);
...@@ -816,6 +817,7 @@ static int tpm_tis_resume(struct device *dev) ...@@ -816,6 +817,7 @@ static int tpm_tis_resume(struct device *dev)
return tpm_pm_resume(dev); return tpm_pm_resume(dev);
} }
#endif
static SIMPLE_DEV_PM_OPS(tpm_tis_pm, tpm_pm_suspend, tpm_tis_resume); static SIMPLE_DEV_PM_OPS(tpm_tis_pm, tpm_pm_suspend, tpm_tis_resume);
......
...@@ -454,6 +454,7 @@ static int __init pcc_cpufreq_probe(void) ...@@ -454,6 +454,7 @@ static int __init pcc_cpufreq_probe(void)
mem_resource->address_length); mem_resource->address_length);
if (pcch_virt_addr == NULL) { if (pcch_virt_addr == NULL) {
pr_debug("probe: could not map shared mem region\n"); pr_debug("probe: could not map shared mem region\n");
ret = -ENOMEM;
goto out_free; goto out_free;
} }
pcch_hdr = pcch_virt_addr; pcch_hdr = pcch_virt_addr;
......
...@@ -350,6 +350,7 @@ static void cmpc_accel_idev_init_v4(struct input_dev *inputdev) ...@@ -350,6 +350,7 @@ static void cmpc_accel_idev_init_v4(struct input_dev *inputdev)
inputdev->close = cmpc_accel_close_v4; inputdev->close = cmpc_accel_close_v4;
} }
#ifdef CONFIG_PM_SLEEP
static int cmpc_accel_suspend_v4(struct device *dev) static int cmpc_accel_suspend_v4(struct device *dev)
{ {
struct input_dev *inputdev; struct input_dev *inputdev;
...@@ -384,6 +385,7 @@ static int cmpc_accel_resume_v4(struct device *dev) ...@@ -384,6 +385,7 @@ static int cmpc_accel_resume_v4(struct device *dev)
return 0; return 0;
} }
#endif
static int cmpc_accel_add_v4(struct acpi_device *acpi) static int cmpc_accel_add_v4(struct acpi_device *acpi)
{ {
...@@ -752,6 +754,7 @@ static int cmpc_tablet_remove(struct acpi_device *acpi, int type) ...@@ -752,6 +754,7 @@ static int cmpc_tablet_remove(struct acpi_device *acpi, int type)
return cmpc_remove_acpi_notify_device(acpi); return cmpc_remove_acpi_notify_device(acpi);
} }
#ifdef CONFIG_PM_SLEEP
static int cmpc_tablet_resume(struct device *dev) static int cmpc_tablet_resume(struct device *dev)
{ {
struct input_dev *inputdev = dev_get_drvdata(dev); struct input_dev *inputdev = dev_get_drvdata(dev);
...@@ -761,6 +764,7 @@ static int cmpc_tablet_resume(struct device *dev) ...@@ -761,6 +764,7 @@ static int cmpc_tablet_resume(struct device *dev)
input_report_switch(inputdev, SW_TABLET_MODE, !val); input_report_switch(inputdev, SW_TABLET_MODE, !val);
return 0; return 0;
} }
#endif
static SIMPLE_DEV_PM_OPS(cmpc_tablet_pm, NULL, cmpc_tablet_resume); static SIMPLE_DEV_PM_OPS(cmpc_tablet_pm, NULL, cmpc_tablet_resume);
......
...@@ -440,11 +440,13 @@ static int __devexit acpi_fujitsu_remove(struct acpi_device *adev, int type) ...@@ -440,11 +440,13 @@ static int __devexit acpi_fujitsu_remove(struct acpi_device *adev, int type)
return 0; return 0;
} }
#ifdef CONFIG_PM_SLEEP
static int acpi_fujitsu_resume(struct device *dev) static int acpi_fujitsu_resume(struct device *dev)
{ {
fujitsu_reset(); fujitsu_reset();
return 0; return 0;
} }
#endif
static SIMPLE_DEV_PM_OPS(acpi_fujitsu_pm, NULL, acpi_fujitsu_resume); static SIMPLE_DEV_PM_OPS(acpi_fujitsu_pm, NULL, acpi_fujitsu_resume);
......
...@@ -305,10 +305,12 @@ static int hdaps_probe(struct platform_device *dev) ...@@ -305,10 +305,12 @@ static int hdaps_probe(struct platform_device *dev)
return 0; return 0;
} }
#ifdef CONFIG_PM_SLEEP
static int hdaps_resume(struct device *dev) static int hdaps_resume(struct device *dev)
{ {
return hdaps_device_init(); return hdaps_device_init();
} }
#endif
static SIMPLE_DEV_PM_OPS(hdaps_pm, NULL, hdaps_resume); static SIMPLE_DEV_PM_OPS(hdaps_pm, NULL, hdaps_resume);
......
...@@ -352,7 +352,7 @@ static int lis3lv02d_remove(struct acpi_device *device, int type) ...@@ -352,7 +352,7 @@ static int lis3lv02d_remove(struct acpi_device *device, int type)
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM_SLEEP
static int lis3lv02d_suspend(struct device *dev) static int lis3lv02d_suspend(struct device *dev)
{ {
/* make sure the device is off when we suspend */ /* make sure the device is off when we suspend */
......
...@@ -85,7 +85,9 @@ ...@@ -85,7 +85,9 @@
#define MSI_STANDARD_EC_TOUCHPAD_ADDRESS 0xe4 #define MSI_STANDARD_EC_TOUCHPAD_ADDRESS 0xe4
#define MSI_STANDARD_EC_TOUCHPAD_MASK (1 << 4) #define MSI_STANDARD_EC_TOUCHPAD_MASK (1 << 4)
#ifdef CONFIG_PM_SLEEP
static int msi_laptop_resume(struct device *device); static int msi_laptop_resume(struct device *device);
#endif
static SIMPLE_DEV_PM_OPS(msi_laptop_pm, NULL, msi_laptop_resume); static SIMPLE_DEV_PM_OPS(msi_laptop_pm, NULL, msi_laptop_resume);
#define MSI_STANDARD_EC_DEVICES_EXISTS_ADDRESS 0x2f #define MSI_STANDARD_EC_DEVICES_EXISTS_ADDRESS 0x2f
...@@ -753,6 +755,7 @@ static int rfkill_init(struct platform_device *sdev) ...@@ -753,6 +755,7 @@ static int rfkill_init(struct platform_device *sdev)
return retval; return retval;
} }
#ifdef CONFIG_PM_SLEEP
static int msi_laptop_resume(struct device *device) static int msi_laptop_resume(struct device *device)
{ {
u8 data; u8 data;
...@@ -773,6 +776,7 @@ static int msi_laptop_resume(struct device *device) ...@@ -773,6 +776,7 @@ static int msi_laptop_resume(struct device *device)
return 0; return 0;
} }
#endif
static int __init msi_laptop_input_setup(void) static int __init msi_laptop_input_setup(void)
{ {
......
...@@ -188,7 +188,9 @@ static const struct acpi_device_id pcc_device_ids[] = { ...@@ -188,7 +188,9 @@ static const struct acpi_device_id pcc_device_ids[] = {
}; };
MODULE_DEVICE_TABLE(acpi, pcc_device_ids); MODULE_DEVICE_TABLE(acpi, pcc_device_ids);
#ifdef CONFIG_PM_SLEEP
static int acpi_pcc_hotkey_resume(struct device *dev); static int acpi_pcc_hotkey_resume(struct device *dev);
#endif
static SIMPLE_DEV_PM_OPS(acpi_pcc_hotkey_pm, NULL, acpi_pcc_hotkey_resume); static SIMPLE_DEV_PM_OPS(acpi_pcc_hotkey_pm, NULL, acpi_pcc_hotkey_resume);
static struct acpi_driver acpi_pcc_driver = { static struct acpi_driver acpi_pcc_driver = {
...@@ -540,6 +542,7 @@ static void acpi_pcc_destroy_input(struct pcc_acpi *pcc) ...@@ -540,6 +542,7 @@ static void acpi_pcc_destroy_input(struct pcc_acpi *pcc)
/* kernel module interface */ /* kernel module interface */
#ifdef CONFIG_PM_SLEEP
static int acpi_pcc_hotkey_resume(struct device *dev) static int acpi_pcc_hotkey_resume(struct device *dev)
{ {
struct pcc_acpi *pcc; struct pcc_acpi *pcc;
...@@ -556,6 +559,7 @@ static int acpi_pcc_hotkey_resume(struct device *dev) ...@@ -556,6 +559,7 @@ static int acpi_pcc_hotkey_resume(struct device *dev)
return acpi_pcc_write_sset(pcc, SINF_STICKY_KEY, pcc->sticky_mode); return acpi_pcc_write_sset(pcc, SINF_STICKY_KEY, pcc->sticky_mode);
} }
#endif
static int acpi_pcc_hotkey_add(struct acpi_device *device) static int acpi_pcc_hotkey_add(struct acpi_device *device)
{ {
......
...@@ -140,7 +140,10 @@ MODULE_PARM_DESC(kbd_backlight_timeout, ...@@ -140,7 +140,10 @@ MODULE_PARM_DESC(kbd_backlight_timeout,
"1 for 30 seconds, 2 for 60 seconds and 3 to disable timeout " "1 for 30 seconds, 2 for 60 seconds and 3 to disable timeout "
"(default: 0)"); "(default: 0)");
#ifdef CONFIG_PM_SLEEP
static void sony_nc_kbd_backlight_resume(void); static void sony_nc_kbd_backlight_resume(void);
static void sony_nc_thermal_resume(void);
#endif
static int sony_nc_kbd_backlight_setup(struct platform_device *pd, static int sony_nc_kbd_backlight_setup(struct platform_device *pd,
unsigned int handle); unsigned int handle);
static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd); static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd);
...@@ -151,7 +154,6 @@ static void sony_nc_battery_care_cleanup(struct platform_device *pd); ...@@ -151,7 +154,6 @@ static void sony_nc_battery_care_cleanup(struct platform_device *pd);
static int sony_nc_thermal_setup(struct platform_device *pd); static int sony_nc_thermal_setup(struct platform_device *pd);
static void sony_nc_thermal_cleanup(struct platform_device *pd); static void sony_nc_thermal_cleanup(struct platform_device *pd);
static void sony_nc_thermal_resume(void);
static int sony_nc_lid_resume_setup(struct platform_device *pd); static int sony_nc_lid_resume_setup(struct platform_device *pd);
static void sony_nc_lid_resume_cleanup(struct platform_device *pd); static void sony_nc_lid_resume_cleanup(struct platform_device *pd);
...@@ -1431,6 +1433,7 @@ static void sony_nc_function_cleanup(struct platform_device *pd) ...@@ -1431,6 +1433,7 @@ static void sony_nc_function_cleanup(struct platform_device *pd)
sony_nc_handles_cleanup(pd); sony_nc_handles_cleanup(pd);
} }
#ifdef CONFIG_PM_SLEEP
static void sony_nc_function_resume(void) static void sony_nc_function_resume(void)
{ {
unsigned int i, result, bitmask, arg; unsigned int i, result, bitmask, arg;
...@@ -1508,6 +1511,7 @@ static int sony_nc_resume(struct device *dev) ...@@ -1508,6 +1511,7 @@ static int sony_nc_resume(struct device *dev)
return 0; return 0;
} }
#endif
static SIMPLE_DEV_PM_OPS(sony_nc_pm, NULL, sony_nc_resume); static SIMPLE_DEV_PM_OPS(sony_nc_pm, NULL, sony_nc_resume);
...@@ -1872,6 +1876,7 @@ static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd) ...@@ -1872,6 +1876,7 @@ static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd)
} }
} }
#ifdef CONFIG_PM_SLEEP
static void sony_nc_kbd_backlight_resume(void) static void sony_nc_kbd_backlight_resume(void)
{ {
int ignore = 0; int ignore = 0;
...@@ -1888,6 +1893,7 @@ static void sony_nc_kbd_backlight_resume(void) ...@@ -1888,6 +1893,7 @@ static void sony_nc_kbd_backlight_resume(void)
(kbdbl_ctl->base + 0x200) | (kbdbl_ctl->base + 0x200) |
(kbdbl_ctl->timeout << 0x10), &ignore); (kbdbl_ctl->timeout << 0x10), &ignore);
} }
#endif
struct battery_care_control { struct battery_care_control {
struct device_attribute attrs[2]; struct device_attribute attrs[2];
...@@ -2210,6 +2216,7 @@ static void sony_nc_thermal_cleanup(struct platform_device *pd) ...@@ -2210,6 +2216,7 @@ static void sony_nc_thermal_cleanup(struct platform_device *pd)
} }
} }
#ifdef CONFIG_PM_SLEEP
static void sony_nc_thermal_resume(void) static void sony_nc_thermal_resume(void)
{ {
unsigned int status = sony_nc_thermal_mode_get(); unsigned int status = sony_nc_thermal_mode_get();
...@@ -2217,6 +2224,7 @@ static void sony_nc_thermal_resume(void) ...@@ -2217,6 +2224,7 @@ static void sony_nc_thermal_resume(void)
if (status != th_handle->mode) if (status != th_handle->mode)
sony_nc_thermal_mode_set(th_handle->mode); sony_nc_thermal_mode_set(th_handle->mode);
} }
#endif
/* resume on LID open */ /* resume on LID open */
struct snc_lid_resume_control { struct snc_lid_resume_control {
...@@ -4287,6 +4295,7 @@ static int sony_pic_add(struct acpi_device *device) ...@@ -4287,6 +4295,7 @@ static int sony_pic_add(struct acpi_device *device)
return result; return result;
} }
#ifdef CONFIG_PM_SLEEP
static int sony_pic_suspend(struct device *dev) static int sony_pic_suspend(struct device *dev)
{ {
if (sony_pic_disable(to_acpi_device(dev))) if (sony_pic_disable(to_acpi_device(dev)))
...@@ -4300,6 +4309,7 @@ static int sony_pic_resume(struct device *dev) ...@@ -4300,6 +4309,7 @@ static int sony_pic_resume(struct device *dev)
spic_dev.cur_ioport, spic_dev.cur_irq); spic_dev.cur_ioport, spic_dev.cur_irq);
return 0; return 0;
} }
#endif
static SIMPLE_DEV_PM_OPS(sony_pic_pm, sony_pic_suspend, sony_pic_resume); static SIMPLE_DEV_PM_OPS(sony_pic_pm, sony_pic_suspend, sony_pic_resume);
......
...@@ -922,6 +922,7 @@ static struct input_dev *tpacpi_inputdev; ...@@ -922,6 +922,7 @@ static struct input_dev *tpacpi_inputdev;
static struct mutex tpacpi_inputdev_send_mutex; static struct mutex tpacpi_inputdev_send_mutex;
static LIST_HEAD(tpacpi_all_drivers); static LIST_HEAD(tpacpi_all_drivers);
#ifdef CONFIG_PM_SLEEP
static int tpacpi_suspend_handler(struct device *dev) static int tpacpi_suspend_handler(struct device *dev)
{ {
struct ibm_struct *ibm, *itmp; struct ibm_struct *ibm, *itmp;
...@@ -949,6 +950,7 @@ static int tpacpi_resume_handler(struct device *dev) ...@@ -949,6 +950,7 @@ static int tpacpi_resume_handler(struct device *dev)
return 0; return 0;
} }
#endif
static SIMPLE_DEV_PM_OPS(tpacpi_pm, static SIMPLE_DEV_PM_OPS(tpacpi_pm,
tpacpi_suspend_handler, tpacpi_resume_handler); tpacpi_suspend_handler, tpacpi_resume_handler);
......
...@@ -1296,6 +1296,7 @@ static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event) ...@@ -1296,6 +1296,7 @@ static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event)
} }
} }
#ifdef CONFIG_PM_SLEEP
static int toshiba_acpi_suspend(struct device *device) static int toshiba_acpi_suspend(struct device *device)
{ {
struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device)); struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
...@@ -1317,6 +1318,7 @@ static int toshiba_acpi_resume(struct device *device) ...@@ -1317,6 +1318,7 @@ static int toshiba_acpi_resume(struct device *device)
return 0; return 0;
} }
#endif
static SIMPLE_DEV_PM_OPS(toshiba_acpi_pm, static SIMPLE_DEV_PM_OPS(toshiba_acpi_pm,
toshiba_acpi_suspend, toshiba_acpi_resume); toshiba_acpi_suspend, toshiba_acpi_resume);
......
...@@ -41,7 +41,9 @@ static const struct acpi_device_id bt_device_ids[] = { ...@@ -41,7 +41,9 @@ static const struct acpi_device_id bt_device_ids[] = {
}; };
MODULE_DEVICE_TABLE(acpi, bt_device_ids); MODULE_DEVICE_TABLE(acpi, bt_device_ids);
#ifdef CONFIG_PM_SLEEP
static int toshiba_bt_resume(struct device *dev); static int toshiba_bt_resume(struct device *dev);
#endif
static SIMPLE_DEV_PM_OPS(toshiba_bt_pm, NULL, toshiba_bt_resume); static SIMPLE_DEV_PM_OPS(toshiba_bt_pm, NULL, toshiba_bt_resume);
static struct acpi_driver toshiba_bt_rfkill_driver = { static struct acpi_driver toshiba_bt_rfkill_driver = {
...@@ -90,10 +92,12 @@ static void toshiba_bt_rfkill_notify(struct acpi_device *device, u32 event) ...@@ -90,10 +92,12 @@ static void toshiba_bt_rfkill_notify(struct acpi_device *device, u32 event)
toshiba_bluetooth_enable(device->handle); toshiba_bluetooth_enable(device->handle);
} }
#ifdef CONFIG_PM_SLEEP
static int toshiba_bt_resume(struct device *dev) static int toshiba_bt_resume(struct device *dev)
{ {
return toshiba_bluetooth_enable(to_acpi_device(dev)->handle); return toshiba_bluetooth_enable(to_acpi_device(dev)->handle);
} }
#endif
static int toshiba_bt_rfkill_add(struct acpi_device *device) static int toshiba_bt_rfkill_add(struct acpi_device *device)
{ {
......
...@@ -77,10 +77,12 @@ static void ebook_switch_notify(struct acpi_device *device, u32 event) ...@@ -77,10 +77,12 @@ static void ebook_switch_notify(struct acpi_device *device, u32 event)
} }
} }
#ifdef CONFIG_PM_SLEEP
static int ebook_switch_resume(struct device *dev) static int ebook_switch_resume(struct device *dev)
{ {
return ebook_send_state(to_acpi_device(dev)); return ebook_send_state(to_acpi_device(dev));
} }
#endif
static SIMPLE_DEV_PM_OPS(ebook_switch_pm, NULL, ebook_switch_resume); static SIMPLE_DEV_PM_OPS(ebook_switch_pm, NULL, ebook_switch_resume);
......
...@@ -582,6 +582,7 @@ enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer) ...@@ -582,6 +582,7 @@ enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer)
void rtc_update_irq(struct rtc_device *rtc, void rtc_update_irq(struct rtc_device *rtc,
unsigned long num, unsigned long events) unsigned long num, unsigned long events)
{ {
pm_stay_awake(rtc->dev.parent);
schedule_work(&rtc->irqwork); schedule_work(&rtc->irqwork);
} }
EXPORT_SYMBOL_GPL(rtc_update_irq); EXPORT_SYMBOL_GPL(rtc_update_irq);
...@@ -844,6 +845,7 @@ void rtc_timer_do_work(struct work_struct *work) ...@@ -844,6 +845,7 @@ void rtc_timer_do_work(struct work_struct *work)
mutex_lock(&rtc->ops_lock); mutex_lock(&rtc->ops_lock);
again: again:
pm_relax(rtc->dev.parent);
__rtc_read_time(rtc, &tm); __rtc_read_time(rtc, &tm);
now = rtc_tm_to_ktime(tm); now = rtc_tm_to_ktime(tm);
while ((next = timerqueue_getnext(&rtc->timerqueue))) { while ((next = timerqueue_getnext(&rtc->timerqueue))) {
......
...@@ -568,7 +568,6 @@ static irqreturn_t cmos_interrupt(int irq, void *p) ...@@ -568,7 +568,6 @@ static irqreturn_t cmos_interrupt(int irq, void *p)
hpet_mask_rtc_irq_bit(RTC_AIE); hpet_mask_rtc_irq_bit(RTC_AIE);
CMOS_READ(RTC_INTR_FLAGS); CMOS_READ(RTC_INTR_FLAGS);
pm_wakeup_event(cmos_rtc.dev, 0);
} }
spin_unlock(&rtc_lock); spin_unlock(&rtc_lock);
......
...@@ -334,14 +334,6 @@ static inline void lockup_detector_init(void) ...@@ -334,14 +334,6 @@ static inline void lockup_detector_init(void)
} }
#endif #endif
#if defined(CONFIG_LOCKUP_DETECTOR) && defined(CONFIG_SUSPEND)
void lockup_detector_bootcpu_resume(void);
#else
static inline void lockup_detector_bootcpu_resume(void)
{
}
#endif
#ifdef CONFIG_DETECT_HUNG_TASK #ifdef CONFIG_DETECT_HUNG_TASK
extern unsigned int sysctl_hung_task_panic; extern unsigned int sysctl_hung_task_panic;
extern unsigned long sysctl_hung_task_check_count; extern unsigned long sysctl_hung_task_check_count;
......
...@@ -178,9 +178,6 @@ static int suspend_enter(suspend_state_t state, bool *wakeup) ...@@ -178,9 +178,6 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
arch_suspend_enable_irqs(); arch_suspend_enable_irqs();
BUG_ON(irqs_disabled()); BUG_ON(irqs_disabled());
/* Kick the lockup detector */
lockup_detector_bootcpu_resume();
Enable_cpus: Enable_cpus:
enable_nonboot_cpus(); enable_nonboot_cpus();
......
...@@ -575,7 +575,7 @@ int proc_dowatchdog(struct ctl_table *table, int write, ...@@ -575,7 +575,7 @@ int proc_dowatchdog(struct ctl_table *table, int write,
/* /*
* Create/destroy watchdog threads as CPUs come and go: * Create/destroy watchdog threads as CPUs come and go:
*/ */
static int static int __cpuinit
cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
{ {
int hotcpu = (unsigned long)hcpu; int hotcpu = (unsigned long)hcpu;
...@@ -610,27 +610,10 @@ cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) ...@@ -610,27 +610,10 @@ cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
return NOTIFY_OK; return NOTIFY_OK;
} }
static struct notifier_block cpu_nfb = { static struct notifier_block __cpuinitdata cpu_nfb = {
.notifier_call = cpu_callback .notifier_call = cpu_callback
}; };
#ifdef CONFIG_SUSPEND
/*
* On exit from suspend we force an offline->online transition on the boot CPU
* so that the PMU state that was lost while in suspended state gets set up
* properly for the boot CPU. This information is required for restarting the
* NMI watchdog.
*/
void lockup_detector_bootcpu_resume(void)
{
void *cpu = (void *)(long)smp_processor_id();
cpu_callback(&cpu_nfb, CPU_DEAD_FROZEN, cpu);
cpu_callback(&cpu_nfb, CPU_UP_PREPARE_FROZEN, cpu);
cpu_callback(&cpu_nfb, CPU_ONLINE_FROZEN, cpu);
}
#endif
void __init lockup_detector_init(void) void __init lockup_detector_init(void)
{ {
void *cpu = (void *)(long)smp_processor_id(); void *cpu = (void *)(long)smp_processor_id();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment