diff mbox

[5/6] thinkpad-acpi: add internal hotkey event API

Message ID 1253466567-4285-6-git-send-email-hmh@hmh.eng.br (mailing list archive)
State Accepted
Delegated to: Len Brown
Headers show

Commit Message

Henrique de Moraes Holschuh Sept. 20, 2009, 5:09 p.m. UTC
Add an internal API to the driver, to allow subdrivers to request and
receive HKEY 0x1000 events.  This API will be used by the backlight
(brightness up/down) and upcoming ALSA mixer (volume up/down/mute)
subdrivers.

Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
---
 drivers/platform/x86/thinkpad_acpi.c |   48 ++++++++++++++++++++++++++++++++++
 1 files changed, 48 insertions(+), 0 deletions(-)

Comments

Jaswinder Singh Rajput Sept. 26, 2009, 8:59 a.m. UTC | #1
Hello,

On Sun, 2009-09-20 at 14:09 -0300, Henrique de Moraes Holschuh wrote:
> Add an internal API to the driver, to allow subdrivers to request and
> receive HKEY 0x1000 events.  This API will be used by the backlight
> (brightness up/down) and upcoming ALSA mixer (volume up/down/mute)
> subdrivers.
> 
> Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
> ---
>  drivers/platform/x86/thinkpad_acpi.c |   48 ++++++++++++++++++++++++++++++++++
>  1 files changed, 48 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 50aa4c1..ffd584c 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -2014,6 +2014,9 @@ static u16 *hotkey_keycode_map;
>  
>  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);
> +
>  /* HKEY.MHKG() return bits */
>  #define TP_HOTKEY_TABLET_MASK (1 << 3)
>  
> @@ -2168,6 +2171,35 @@ static int hotkey_user_mask_set(const u32 mask)
>  	return rc;
>  }
>  
> +/*
> + * Sets the driver hotkey mask.
> + *
> + * Can be called even if the hotkey subdriver is inactive
> + */
> +static int tpacpi_hotkey_driver_mask_set(const u32 mask)


  CC [M]  drivers/platform/x86/thinkpad_acpi.o
drivers/platform/x86/thinkpad_acpi.c:2225: warning: ‘tpacpi_hotkey_driver_mask_set’ defined but not used

Thanks,
--
JSR

> +{
> +	int rc;
> +
> +	/* Do the right thing if hotkey_init has not been called yet */
> +	if (!tp_features.hotkey) {
> +		hotkey_driver_mask = mask;
> +		return 0;
> +	}
> +
> +	mutex_lock(&hotkey_mutex);
> +
> +	HOTKEY_CONFIG_CRITICAL_START
> +	hotkey_driver_mask = mask;
> +	hotkey_source_mask |= (mask & ~hotkey_all_mask);
> +	HOTKEY_CONFIG_CRITICAL_END
> +
> +	rc = hotkey_mask_set((hotkey_acpi_mask | hotkey_driver_mask) &
> +							~hotkey_source_mask);
> +	mutex_unlock(&hotkey_mutex);
> +
> +	return rc;
> +}
> +
>  static int hotkey_status_get(int *status)
>  {
>  	if (!acpi_evalf(hkey_handle, status, "DHKC", "d"))
> @@ -2227,6 +2259,7 @@ static void tpacpi_input_send_key(const unsigned int scancode)
>  /* Do NOT call without validating scancode first */
>  static void tpacpi_input_send_key_masked(const unsigned int scancode)
>  {
> +	hotkey_driver_event(scancode);
>  	if (hotkey_user_mask & (1 << scancode))
>  		tpacpi_input_send_key(scancode);
>  }
> @@ -7625,6 +7658,21 @@ static struct ibm_struct fan_driver_data = {
>   ****************************************************************************
>   ****************************************************************************/
>  
> +/*
> + * HKEY event callout for other subdrivers go here
> + * (yes, it is ugly, but it is quick, safe, and gets the job done
> + */
> +static void tpacpi_driver_event(const unsigned int hkey_event)
> +{
> +}
> +
> +
> +
> +static void hotkey_driver_event(const unsigned int scancode)
> +{
> +	tpacpi_driver_event(0x1001 + scancode);
> +}
> +
>  /* sysfs name ---------------------------------------------------------- */
>  static ssize_t thinkpad_acpi_pdev_name_show(struct device *dev,
>  			   struct device_attribute *attr,

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Henrique de Moraes Holschuh Sept. 26, 2009, 1:48 p.m. UTC | #2
On Sat, 26 Sep 2009 14:29 +0530, "Jaswinder Singh Rajput" <jaswinder@kernel.org> wrote:
> > +/*
> > + * Sets the driver hotkey mask.
> > + *
> > + * Can be called even if the hotkey subdriver is inactive
> > + */
> > +static int tpacpi_hotkey_driver_mask_set(const u32 mask)
> 
> 
>   CC [M]  drivers/platform/x86/thinkpad_acpi.o
> drivers/platform/x86/thinkpad_acpi.c:2225: warning:
> ‘tpacpi_hotkey_driver_mask_set’ defined but not used

The function is used by another patch, which is waiting for its
prerequisites to be merged through the backlight tree.

That patch has already been sent to linux-acpi as well.
diff mbox

Patch

diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 50aa4c1..ffd584c 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -2014,6 +2014,9 @@  static u16 *hotkey_keycode_map;
 
 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);
+
 /* HKEY.MHKG() return bits */
 #define TP_HOTKEY_TABLET_MASK (1 << 3)
 
@@ -2168,6 +2171,35 @@  static int hotkey_user_mask_set(const u32 mask)
 	return rc;
 }
 
+/*
+ * Sets the driver hotkey mask.
+ *
+ * Can be called even if the hotkey subdriver is inactive
+ */
+static int tpacpi_hotkey_driver_mask_set(const u32 mask)
+{
+	int rc;
+
+	/* Do the right thing if hotkey_init has not been called yet */
+	if (!tp_features.hotkey) {
+		hotkey_driver_mask = mask;
+		return 0;
+	}
+
+	mutex_lock(&hotkey_mutex);
+
+	HOTKEY_CONFIG_CRITICAL_START
+	hotkey_driver_mask = mask;
+	hotkey_source_mask |= (mask & ~hotkey_all_mask);
+	HOTKEY_CONFIG_CRITICAL_END
+
+	rc = hotkey_mask_set((hotkey_acpi_mask | hotkey_driver_mask) &
+							~hotkey_source_mask);
+	mutex_unlock(&hotkey_mutex);
+
+	return rc;
+}
+
 static int hotkey_status_get(int *status)
 {
 	if (!acpi_evalf(hkey_handle, status, "DHKC", "d"))
@@ -2227,6 +2259,7 @@  static void tpacpi_input_send_key(const unsigned int scancode)
 /* Do NOT call without validating scancode first */
 static void tpacpi_input_send_key_masked(const unsigned int scancode)
 {
+	hotkey_driver_event(scancode);
 	if (hotkey_user_mask & (1 << scancode))
 		tpacpi_input_send_key(scancode);
 }
@@ -7625,6 +7658,21 @@  static struct ibm_struct fan_driver_data = {
  ****************************************************************************
  ****************************************************************************/
 
+/*
+ * HKEY event callout for other subdrivers go here
+ * (yes, it is ugly, but it is quick, safe, and gets the job done
+ */
+static void tpacpi_driver_event(const unsigned int hkey_event)
+{
+}
+
+
+
+static void hotkey_driver_event(const unsigned int scancode)
+{
+	tpacpi_driver_event(0x1001 + scancode);
+}
+
 /* sysfs name ---------------------------------------------------------- */
 static ssize_t thinkpad_acpi_pdev_name_show(struct device *dev,
 			   struct device_attribute *attr,