From: Shem Multinymous This patch stops the hdaps driver's polling timer when the module is suspended. Accessing a shut-down accelerometer is not harmful, but let's avoid it anyway. Signed-off-by: Shem Multinymous Signed-off-by: Pavel Machek Acked-by: Robert Love Signed-off-by: Andrew Morton --- drivers/hwmon/hdaps.c | 17 +++++++++++------ 1 files changed, 11 insertions(+), 6 deletions(-) diff -puN drivers/hwmon/hdaps.c~hdaps-stop-polling-timer-when-suspended drivers/hwmon/hdaps.c --- a/drivers/hwmon/hdaps.c~hdaps-stop-polling-timer-when-suspended +++ a/drivers/hwmon/hdaps.c @@ -407,13 +407,19 @@ static int hdaps_probe(struct platform_d static int hdaps_suspend(struct platform_device *dev, pm_message_t state) { + /* Don't do hdaps polls until resume re-initializes the sensor. */ + del_timer_sync(&hdaps_timer); hdaps_device_shutdown(); /* ignore errors, effect is negligible */ return 0; } static int hdaps_resume(struct platform_device *dev) { - return hdaps_device_init(); + int ret = hdaps_device_init(); + if (ret) + return ret; + mod_timer(&hdaps_timer, jiffies + HZ/sampling_rate); + return 0; } static struct platform_driver hdaps_driver = { @@ -751,6 +757,9 @@ static int __init hdaps_init(void) goto out; } + /* Init timer before platform_driver_register, in case of suspend */ + init_timer(&hdaps_timer); + hdaps_timer.function = hdaps_mousedev_poll; ret = platform_driver_register(&hdaps_driver); if (ret) goto out; @@ -787,11 +796,7 @@ static int __init hdaps_init(void) if (ret) goto out_idev; - /* start up our timer for the input device */ - init_timer(&hdaps_timer); - hdaps_timer.function = hdaps_mousedev_poll; - hdaps_timer.expires = jiffies + HZ/sampling_rate; - add_timer(&hdaps_timer); + mod_timer(&hdaps_timer, jiffies + HZ/sampling_rate); printk(KERN_INFO "hdaps: driver successfully loaded.\n"); return 0; _