On Sun, 7 Feb 2010 16:32:07 -0200 Thadeu Lima de Souza Cascardo <cascardo@xxxxxxxxxxxxxx> wrote: > Brightness notification does not work until the user writes to > hotkey_mask attribute. That's because the polling thread will only run > if hotkey_user_mask is set and someone is reading the input device or if > hotkey_driver_mask is set. In this second case, this condition is not > tested after the mask is changed, because the brightness and volume > drivers are started after the hotkey drivers. > > This fix test for the polling condition that ends up starting the > polling thread after hotkey_driver_mask is set in brightness and volume > init functions. > > Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@xxxxxxxxxxxxxx> > --- > drivers/platform/x86/thinkpad_acpi.c | 9 +++++++++ > 1 files changed, 9 insertions(+), 0 deletions(-) > > diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c > index e67e4fe..d69749d 100644 > --- a/drivers/platform/x86/thinkpad_acpi.c > +++ b/drivers/platform/x86/thinkpad_acpi.c > @@ -6272,6 +6272,11 @@ static int __init brightness_init(struct ibm_init_struct *iibm) > tpacpi_hotkey_driver_mask_set(hotkey_driver_mask > | TP_ACPI_HKEY_BRGHTUP_MASK > | TP_ACPI_HKEY_BRGHTDWN_MASK);; > + > +#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL > + hotkey_poll_setup(true); > +#endif > + > return 0; > } > > @@ -6903,6 +6908,10 @@ static int __init volume_init(struct ibm_init_struct *iibm) > | TP_ACPI_HKEY_VOLDWN_MASK > | TP_ACPI_HKEY_MUTE_MASK); > > +#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL > + hotkey_poll_setup(true); > +#endif > + > return 0; > } Something like this is needed, methinks: - Avoid ifdefs - Make sure that hotkey_mutex is held when calling hotkey_poll_setup: use hotkey_poll_setup_safe. Doesn't matter much in __init code. --- a/drivers/platform/x86/thinkpad_acpi.c~thinkpad-acpi-setup-hotkey-polling-after-changing-hotkey_driver_mask-fix +++ a/drivers/platform/x86/thinkpad_acpi.c @@ -2597,6 +2597,10 @@ static void hotkey_poll_set_freq(unsigne #else /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */ +static void hotkey_poll_setup(bool __unused) +{ +} + static void hotkey_poll_setup_safe(bool __unused) { } @@ -2694,9 +2698,7 @@ static ssize_t hotkey_mask_store(struct res = hotkey_user_mask_set(t); -#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL hotkey_poll_setup(true); -#endif mutex_unlock(&hotkey_mutex); @@ -6273,9 +6275,7 @@ static int __init brightness_init(struct | TP_ACPI_HKEY_BRGHTUP_MASK | TP_ACPI_HKEY_BRGHTDWN_MASK);; -#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL - hotkey_poll_setup(true); -#endif + hotkey_poll_setup_safe(true); return 0; } _ -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html