| From b589ea4c44170d3f7a845684e2d1b3b9571663af Mon Sep 17 00:00:00 2001 |
| From: Henrique de Moraes Holschuh <hmh@hmh.eng.br> |
| Date: Thu, 25 Feb 2010 21:28:58 -0300 |
| Subject: thinkpad-acpi: fix poll thread auto-start |
| |
| From: Henrique de Moraes Holschuh <hmh@hmh.eng.br> |
| |
| commit b589ea4c44170d3f7a845684e2d1b3b9571663af upstream. |
| |
| The driver was not starting the NVRAM polling thread if the input |
| device was bound immediately after registration. |
| |
| This fixes: |
| http://bugzilla.kernel.org/show_bug.cgi?id=15118 |
| |
| Reported-by: Florian Zumbiehl <florz@florz.de> |
| Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/platform/x86/thinkpad_acpi.c | 15 ++++++--------- |
| 1 file changed, 6 insertions(+), 9 deletions(-) |
| |
| --- a/drivers/platform/x86/thinkpad_acpi.c |
| +++ b/drivers/platform/x86/thinkpad_acpi.c |
| @@ -2597,16 +2597,11 @@ static int hotkey_inputdev_open(struct i |
| { |
| switch (tpacpi_lifecycle) { |
| case TPACPI_LIFE_INIT: |
| - /* |
| - * hotkey_init will call hotkey_poll_setup_safe |
| - * at the appropriate moment |
| - */ |
| - return 0; |
| - case TPACPI_LIFE_EXITING: |
| - return -EBUSY; |
| case TPACPI_LIFE_RUNNING: |
| hotkey_poll_setup_safe(false); |
| return 0; |
| + case TPACPI_LIFE_EXITING: |
| + return -EBUSY; |
| } |
| |
| /* Should only happen if tpacpi_lifecycle is corrupt */ |
| @@ -2617,7 +2612,7 @@ static int hotkey_inputdev_open(struct i |
| static void hotkey_inputdev_close(struct input_dev *dev) |
| { |
| /* disable hotkey polling when possible */ |
| - if (tpacpi_lifecycle == TPACPI_LIFE_RUNNING && |
| + if (tpacpi_lifecycle != TPACPI_LIFE_EXITING && |
| !(hotkey_source_mask & hotkey_driver_mask)) |
| hotkey_poll_setup_safe(false); |
| } |
| @@ -8362,6 +8357,9 @@ static int __init thinkpad_acpi_module_i |
| return ret; |
| } |
| } |
| + |
| + tpacpi_lifecycle = TPACPI_LIFE_RUNNING; |
| + |
| ret = input_register_device(tpacpi_inputdev); |
| if (ret < 0) { |
| printk(TPACPI_ERR "unable to register input device\n"); |
| @@ -8371,7 +8369,6 @@ static int __init thinkpad_acpi_module_i |
| tp_features.input_device_registered = 1; |
| } |
| |
| - tpacpi_lifecycle = TPACPI_LIFE_RUNNING; |
| return 0; |
| } |
| |