Re: [PATCH] thinkpad-acpi: setup hotkey polling after changinghotkey_driver_mask

From: Thadeu Lima de Souza Cascardo
Date: Tue Feb 09 2010 - 19:22:20 EST


On Mon, Feb 08, 2010 at 11:37:36PM -0200, Henrique de Moraes Holschuh wrote:
> Thadeu, thanks for the detailed analysis of the problem.
>
> Please test the commit below, it should fix things cleanly. I am quite
> tired right now, so I might have missed some details, but it survived a fast
> testing and compiled without warnings both with and without poll support
> compiled in.
>
> Tested in a T43 by crippling the input device open handle to not start the
> poller, and by crippling hotkey_mask support to force the driver to think it
> needs to default to poll mode. Both volume and brightness reporting worked
> fine in the test.
>
> If it does fixes the issues you observed, I will add the tested-by, and send
> it to Len.
>

Sorry for the delay. Takes a while to build a kernel in my old notebook
with a not-so-large config.

It works nice for me. This was a fix that has crossed my mind, but since
other init was doing the other way (hotkey_init), I did prefer that too.
Anyway, your way is cleaner and the right way. :-)

Tested-by: Thadeu Lima de Souza Cascardo <cascardo@xxxxxxxxxxxxxx>

Thanks and my best regards,
Cascardo.

>
> commit 8e05920a6cb236b21f31391b4479ec29ce65ccdf
> Author: Henrique de Moraes Holschuh <hmh@xxxxxxxxxx>
> Date: Mon Feb 8 22:40:28 2010 -0200
>
> thinkpad-acpi: make driver events work in NVRAM poll mode
>
> Thadeu Lima de Souza Cascardo reports this:
>
> 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.
>
> Fix tpacpi_hotkey_driver_mask_set() to call hotkey_poll_setup(), so
> that the poller kthread will be started when needed.
>
> Reported-by: Thadeu Lima de Souza Cascardo <cascardo@xxxxxxxxxxxxxx>
> Signed-off-by: Henrique de Moraes Holschuh <hmh@xxxxxxxxxx>
> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
>
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index d12b61b..09c1fe6 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -2086,6 +2086,7 @@ static struct attribute_set *hotkey_dev_attributes;
>
> static void tpacpi_driver_event(const unsigned int hkey_event);
> static void hotkey_driver_event(const unsigned int scancode);
> +static void hotkey_poll_setup(const bool may_warn);
>
> /* HKEY.MHKG() return bits */
> #define TP_HOTKEY_TABLET_MASK (1 << 3)
> @@ -2268,6 +2269,8 @@ static int tpacpi_hotkey_driver_mask_set(const u32 mask)
>
> rc = hotkey_mask_set((hotkey_acpi_mask | hotkey_driver_mask) &
> ~hotkey_source_mask);
> + hotkey_poll_setup(true);
> +
> mutex_unlock(&hotkey_mutex);
>
> return rc;
> @@ -2552,7 +2555,7 @@ static void hotkey_poll_stop_sync(void)
> }
>
> /* call with hotkey_mutex held */
> -static void hotkey_poll_setup(bool may_warn)
> +static void hotkey_poll_setup(const bool may_warn)
> {
> const u32 poll_driver_mask = hotkey_driver_mask & hotkey_source_mask;
> const u32 poll_user_mask = hotkey_user_mask & hotkey_source_mask;
> @@ -2583,7 +2586,7 @@ static void hotkey_poll_setup(bool may_warn)
> }
> }
>
> -static void hotkey_poll_setup_safe(bool may_warn)
> +static void hotkey_poll_setup_safe(const bool may_warn)
> {
> mutex_lock(&hotkey_mutex);
> hotkey_poll_setup(may_warn);
> @@ -2601,7 +2604,11 @@ static void hotkey_poll_set_freq(unsigned int freq)
>
> #else /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
>
> -static void hotkey_poll_setup_safe(bool __unused)
> +static void hotkey_poll_setup(const bool __unused)
> +{
> +}
> +
> +static void hotkey_poll_setup_safe(const bool __unused)
> {
> }
>
>
> --
> "One disk to rule them all, One disk to find them. One disk to bring
> them all and in the darkness grind them. In the Land of Redmond
> where the shadows lie." -- The Silicon Valley Tarot
> Henrique Holschuh

Attachment: signature.asc
Description: Digital signature