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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux