Power management fixes for 3.6-rc2
* 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. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) iQIcBAABAgAGBQJQJWxZAAoJEKhOf7ml8uNs1EcP/ApgCk1SfMo779Lcq8OQVVqq 2jbtoqnsuPMs/rl4VrW1adJspEkWb39KgE5XIlfg6tIKm5nuIauFtJEGskMq00w7 8PT7bQOSJdLKIOjsBEUugUtp+HZO0iUuGahciQf4V11eOAZKODqxtomL8Ry2mY3P gDohYBa3J+xnkvRqKUY0k0OkSNDDlI3+y+WPr+tamjDzT5uqjWLR9LJ1+1eGtmou 6DrgjD3eOus/r53OXKlNldXc9HbzVdnmoZwMNtswlNTaCL7HkdpRnPClSWt+NvVi cOviJ6F4d6FRmYRFvatFEaXmSAfpB9v/dt1C9VYtoLyZsZWs1sRGd/bxgCofYWnE GZckKl8pI80u14345P9R+QF3CculV2itfbKBiXxWunmOeokBYIz5sWdTh4mNg/vy VZdeO9jJy2542aF8P9Up9EE3IjkrEz7gEL0Sv4hfmEoHI1jKJDdAn/9/lmfrujPh e3vpBeqlBmSTU0rKj97x/G8zwWhPscqJDPkDUEEe+wfS3oPvhymYesV1bF7OCNwr WMMcFoDuSRzZ1lvEY7w4IWAKRDCqjaJ1kkBZvzoOEIC4gi4i3pAehpYEZMNFtFrf RB2z5Jx1Z1w0LOgcz69TTMY274kZ8N/v7/SVUBk5+tSs1VNHo/p+WYGqW/8ExSvH D4H8kQvz8uBK23g7ekVR =lo6A -----END PGP SIGNATURE----- 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.
This commit is contained in:
Коммит
e4e139bebd
|
@ -69,7 +69,9 @@ static const struct acpi_device_id ac_device_ids[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(acpi, ac_device_ids);
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_ac_resume(struct device *dev);
|
||||
#endif
|
||||
static SIMPLE_DEV_PM_OPS(acpi_ac_pm, NULL, acpi_ac_resume);
|
||||
|
||||
static struct acpi_driver acpi_ac_driver = {
|
||||
|
@ -313,6 +315,7 @@ static int acpi_ac_add(struct acpi_device *device)
|
|||
return result;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_ac_resume(struct device *dev)
|
||||
{
|
||||
struct acpi_ac *ac;
|
||||
|
@ -332,6 +335,7 @@ static int acpi_ac_resume(struct device *dev)
|
|||
kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
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)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
/* this is needed to learn about changes made in suspended state */
|
||||
static int acpi_battery_resume(struct device *dev)
|
||||
{
|
||||
|
@ -1068,6 +1069,7 @@ static int acpi_battery_resume(struct device *dev)
|
|||
acpi_battery_update(battery);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
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);
|
|||
static int acpi_button_remove(struct acpi_device *device, int type);
|
||||
static void acpi_button_notify(struct acpi_device *device, u32 event);
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_button_resume(struct device *dev);
|
||||
#endif
|
||||
static SIMPLE_DEV_PM_OPS(acpi_button_pm, NULL, acpi_button_resume);
|
||||
|
||||
static struct acpi_driver acpi_button_driver = {
|
||||
|
@ -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)
|
||||
{
|
||||
struct acpi_device *device = to_acpi_device(dev);
|
||||
|
@ -319,6 +322,7 @@ static int acpi_button_resume(struct device *dev)
|
|||
return acpi_lid_send_state(device);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int acpi_button_add(struct acpi_device *device)
|
||||
{
|
||||
|
|
|
@ -53,8 +53,10 @@ static const struct acpi_device_id 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_resume(struct device *dev);
|
||||
#endif
|
||||
static SIMPLE_DEV_PM_OPS(acpi_fan_pm, acpi_fan_suspend, acpi_fan_resume);
|
||||
|
||||
static struct acpi_driver acpi_fan_driver = {
|
||||
|
@ -184,6 +186,7 @@ static int acpi_fan_remove(struct acpi_device *device, int type)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_fan_suspend(struct device *dev)
|
||||
{
|
||||
if (!dev)
|
||||
|
@ -207,6 +210,7 @@ static int acpi_fan_resume(struct device *dev)
|
|||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int __init acpi_fan_init(void)
|
||||
{
|
||||
|
|
|
@ -67,7 +67,9 @@ static const struct acpi_device_id power_device_ids[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(acpi, power_device_ids);
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_power_resume(struct device *dev);
|
||||
#endif
|
||||
static SIMPLE_DEV_PM_OPS(acpi_power_pm, NULL, acpi_power_resume);
|
||||
|
||||
static struct acpi_driver acpi_power_driver = {
|
||||
|
@ -775,6 +777,7 @@ static int acpi_power_remove(struct acpi_device *device, int type)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_power_resume(struct device *dev)
|
||||
{
|
||||
int result = 0, state;
|
||||
|
@ -803,6 +806,7 @@ static int acpi_power_resume(struct device *dev)
|
|||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
int __init acpi_power_init(void)
|
||||
{
|
||||
|
|
|
@ -988,6 +988,7 @@ static void acpi_sbs_rmdirs(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_sbs_resume(struct device *dev)
|
||||
{
|
||||
struct acpi_sbs *sbs;
|
||||
|
@ -997,6 +998,7 @@ static int acpi_sbs_resume(struct device *dev)
|
|||
acpi_sbs_callback(sbs);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
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[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(acpi, thermal_device_ids);
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_thermal_resume(struct device *dev);
|
||||
#endif
|
||||
static SIMPLE_DEV_PM_OPS(acpi_thermal_pm, NULL, acpi_thermal_resume);
|
||||
|
||||
static struct acpi_driver acpi_thermal_driver = {
|
||||
|
@ -1041,6 +1043,7 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_thermal_resume(struct device *dev)
|
||||
{
|
||||
struct acpi_thermal *tz;
|
||||
|
@ -1075,6 +1078,7 @@ static int acpi_thermal_resume(struct device *dev)
|
|||
|
||||
return AE_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int thermal_act(const struct dmi_system_id *d) {
|
||||
|
||||
|
|
|
@ -169,8 +169,7 @@ void pm_clk_init(struct device *dev)
|
|||
*/
|
||||
int pm_clk_create(struct device *dev)
|
||||
{
|
||||
int ret = dev_pm_get_subsys_data(dev);
|
||||
return ret < 0 ? ret : 0;
|
||||
return dev_pm_get_subsys_data(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
int dev_pm_get_subsys_data(struct device *dev)
|
||||
{
|
||||
struct pm_subsys_data *psd;
|
||||
int ret = 0;
|
||||
|
||||
psd = kzalloc(sizeof(*psd), GFP_KERNEL);
|
||||
if (!psd)
|
||||
|
@ -40,7 +39,6 @@ int dev_pm_get_subsys_data(struct device *dev)
|
|||
dev->power.subsys_data = psd;
|
||||
pm_clk_init(dev);
|
||||
psd = NULL;
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
spin_unlock_irq(&dev->power.lock);
|
||||
|
@ -48,7 +46,7 @@ int dev_pm_get_subsys_data(struct device *dev)
|
|||
/* kfree() verifies that its argument is nonzero. */
|
||||
kfree(psd);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dev_pm_get_subsys_data);
|
||||
|
||||
|
|
|
@ -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");
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int tpm_tis_resume(struct device *dev)
|
||||
{
|
||||
struct tpm_chip *chip = dev_get_drvdata(dev);
|
||||
|
@ -816,6 +817,7 @@ static int tpm_tis_resume(struct device *dev)
|
|||
|
||||
return tpm_pm_resume(dev);
|
||||
}
|
||||
#endif
|
||||
|
||||
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)
|
|||
mem_resource->address_length);
|
||||
if (pcch_virt_addr == NULL) {
|
||||
pr_debug("probe: could not map shared mem region\n");
|
||||
ret = -ENOMEM;
|
||||
goto out_free;
|
||||
}
|
||||
pcch_hdr = pcch_virt_addr;
|
||||
|
|
|
@ -350,6 +350,7 @@ static void cmpc_accel_idev_init_v4(struct input_dev *inputdev)
|
|||
inputdev->close = cmpc_accel_close_v4;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int cmpc_accel_suspend_v4(struct device *dev)
|
||||
{
|
||||
struct input_dev *inputdev;
|
||||
|
@ -384,6 +385,7 @@ static int cmpc_accel_resume_v4(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
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)
|
|||
return cmpc_remove_acpi_notify_device(acpi);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int cmpc_tablet_resume(struct device *dev)
|
||||
{
|
||||
struct input_dev *inputdev = dev_get_drvdata(dev);
|
||||
|
@ -761,6 +764,7 @@ static int cmpc_tablet_resume(struct device *dev)
|
|||
input_report_switch(inputdev, SW_TABLET_MODE, !val);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
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)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_fujitsu_resume(struct device *dev)
|
||||
{
|
||||
fujitsu_reset();
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(acpi_fujitsu_pm, NULL, acpi_fujitsu_resume);
|
||||
|
||||
|
|
|
@ -305,10 +305,12 @@ static int hdaps_probe(struct platform_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int hdaps_resume(struct device *dev)
|
||||
{
|
||||
return hdaps_device_init();
|
||||
}
|
||||
#endif
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(hdaps_pm, NULL, hdaps_resume);
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
/* make sure the device is off when we suspend */
|
||||
|
|
|
@ -85,7 +85,9 @@
|
|||
#define MSI_STANDARD_EC_TOUCHPAD_ADDRESS 0xe4
|
||||
#define MSI_STANDARD_EC_TOUCHPAD_MASK (1 << 4)
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int msi_laptop_resume(struct device *device);
|
||||
#endif
|
||||
static SIMPLE_DEV_PM_OPS(msi_laptop_pm, NULL, msi_laptop_resume);
|
||||
|
||||
#define MSI_STANDARD_EC_DEVICES_EXISTS_ADDRESS 0x2f
|
||||
|
@ -753,6 +755,7 @@ err_bluetooth:
|
|||
return retval;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int msi_laptop_resume(struct device *device)
|
||||
{
|
||||
u8 data;
|
||||
|
@ -773,6 +776,7 @@ static int msi_laptop_resume(struct device *device)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int __init msi_laptop_input_setup(void)
|
||||
{
|
||||
|
|
|
@ -188,7 +188,9 @@ static const struct acpi_device_id pcc_device_ids[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(acpi, pcc_device_ids);
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
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 struct acpi_driver acpi_pcc_driver = {
|
||||
|
@ -540,6 +542,7 @@ static void acpi_pcc_destroy_input(struct pcc_acpi *pcc)
|
|||
|
||||
/* kernel module interface */
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_pcc_hotkey_resume(struct device *dev)
|
||||
{
|
||||
struct pcc_acpi *pcc;
|
||||
|
@ -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);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int acpi_pcc_hotkey_add(struct acpi_device *device)
|
||||
{
|
||||
|
|
|
@ -140,7 +140,10 @@ MODULE_PARM_DESC(kbd_backlight_timeout,
|
|||
"1 for 30 seconds, 2 for 60 seconds and 3 to disable timeout "
|
||||
"(default: 0)");
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
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,
|
||||
unsigned int handle);
|
||||
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);
|
|||
|
||||
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_resume(void);
|
||||
|
||||
static int sony_nc_lid_resume_setup(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)
|
|||
sony_nc_handles_cleanup(pd);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static void sony_nc_function_resume(void)
|
||||
{
|
||||
unsigned int i, result, bitmask, arg;
|
||||
|
@ -1508,6 +1511,7 @@ static int sony_nc_resume(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
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)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static void sony_nc_kbd_backlight_resume(void)
|
||||
{
|
||||
int ignore = 0;
|
||||
|
@ -1888,6 +1893,7 @@ static void sony_nc_kbd_backlight_resume(void)
|
|||
(kbdbl_ctl->base + 0x200) |
|
||||
(kbdbl_ctl->timeout << 0x10), &ignore);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct battery_care_control {
|
||||
struct device_attribute attrs[2];
|
||||
|
@ -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)
|
||||
{
|
||||
unsigned int status = sony_nc_thermal_mode_get();
|
||||
|
@ -2217,6 +2224,7 @@ static void sony_nc_thermal_resume(void)
|
|||
if (status != th_handle->mode)
|
||||
sony_nc_thermal_mode_set(th_handle->mode);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* resume on LID open */
|
||||
struct snc_lid_resume_control {
|
||||
|
@ -4287,6 +4295,7 @@ err_free_resources:
|
|||
return result;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int sony_pic_suspend(struct device *dev)
|
||||
{
|
||||
if (sony_pic_disable(to_acpi_device(dev)))
|
||||
|
@ -4300,6 +4309,7 @@ static int sony_pic_resume(struct device *dev)
|
|||
spic_dev.cur_ioport, spic_dev.cur_irq);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(sony_pic_pm, sony_pic_suspend, sony_pic_resume);
|
||||
|
||||
|
|
|
@ -922,6 +922,7 @@ static struct input_dev *tpacpi_inputdev;
|
|||
static struct mutex tpacpi_inputdev_send_mutex;
|
||||
static LIST_HEAD(tpacpi_all_drivers);
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int tpacpi_suspend_handler(struct device *dev)
|
||||
{
|
||||
struct ibm_struct *ibm, *itmp;
|
||||
|
@ -949,6 +950,7 @@ static int tpacpi_resume_handler(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(tpacpi_pm,
|
||||
tpacpi_suspend_handler, tpacpi_resume_handler);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
|
||||
|
@ -1317,6 +1318,7 @@ static int toshiba_acpi_resume(struct device *device)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(toshiba_acpi_pm,
|
||||
toshiba_acpi_suspend, toshiba_acpi_resume);
|
||||
|
|
|
@ -41,7 +41,9 @@ static const struct acpi_device_id bt_device_ids[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(acpi, bt_device_ids);
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int toshiba_bt_resume(struct device *dev);
|
||||
#endif
|
||||
static SIMPLE_DEV_PM_OPS(toshiba_bt_pm, NULL, toshiba_bt_resume);
|
||||
|
||||
static struct acpi_driver toshiba_bt_rfkill_driver = {
|
||||
|
@ -90,10 +92,12 @@ static void toshiba_bt_rfkill_notify(struct acpi_device *device, u32 event)
|
|||
toshiba_bluetooth_enable(device->handle);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int toshiba_bt_resume(struct device *dev)
|
||||
{
|
||||
return toshiba_bluetooth_enable(to_acpi_device(dev)->handle);
|
||||
}
|
||||
#endif
|
||||
|
||||
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)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int ebook_switch_resume(struct device *dev)
|
||||
{
|
||||
return ebook_send_state(to_acpi_device(dev));
|
||||
}
|
||||
#endif
|
||||
|
||||
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)
|
|||
void rtc_update_irq(struct rtc_device *rtc,
|
||||
unsigned long num, unsigned long events)
|
||||
{
|
||||
pm_stay_awake(rtc->dev.parent);
|
||||
schedule_work(&rtc->irqwork);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rtc_update_irq);
|
||||
|
@ -844,6 +845,7 @@ void rtc_timer_do_work(struct work_struct *work)
|
|||
|
||||
mutex_lock(&rtc->ops_lock);
|
||||
again:
|
||||
pm_relax(rtc->dev.parent);
|
||||
__rtc_read_time(rtc, &tm);
|
||||
now = rtc_tm_to_ktime(tm);
|
||||
while ((next = timerqueue_getnext(&rtc->timerqueue))) {
|
||||
|
|
|
@ -568,7 +568,6 @@ static irqreturn_t cmos_interrupt(int irq, void *p)
|
|||
hpet_mask_rtc_irq_bit(RTC_AIE);
|
||||
|
||||
CMOS_READ(RTC_INTR_FLAGS);
|
||||
pm_wakeup_event(cmos_rtc.dev, 0);
|
||||
}
|
||||
spin_unlock(&rtc_lock);
|
||||
|
||||
|
|
|
@ -334,14 +334,6 @@ static inline void lockup_detector_init(void)
|
|||
}
|
||||
#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
|
||||
extern unsigned int sysctl_hung_task_panic;
|
||||
extern unsigned long sysctl_hung_task_check_count;
|
||||
|
|
|
@ -178,9 +178,6 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
|
|||
arch_suspend_enable_irqs();
|
||||
BUG_ON(irqs_disabled());
|
||||
|
||||
/* Kick the lockup detector */
|
||||
lockup_detector_bootcpu_resume();
|
||||
|
||||
Enable_cpus:
|
||||
enable_nonboot_cpus();
|
||||
|
||||
|
|
|
@ -575,7 +575,7 @@ out:
|
|||
/*
|
||||
* 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)
|
||||
{
|
||||
int hotcpu = (unsigned long)hcpu;
|
||||
|
@ -610,27 +610,10 @@ cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
|
|||
return NOTIFY_OK;
|
||||
}
|
||||
|
||||
static struct notifier_block cpu_nfb = {
|
||||
static struct notifier_block __cpuinitdata cpu_nfb = {
|
||||
.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 *cpu = (void *)(long)smp_processor_id();
|
||||
|
|
Загрузка…
Ссылка в новой задаче