Thinkpad BIOS provides an ACPI interface to disable hardware mute.
When enabled (as default), Thinkpad issues a scancode and toggles
hardware mute + led. Once disabled, Thinkpad will only issues the
scancode.

When hardware mute is enabled, hardware mute can be out-of-sync
with user-space if a user changes mute state by user application.
This patch gives a chance to disable hardware mute.

Signed-off-by: Alex Hung <alex.h...@canonical.com>
---
 drivers/platform/x86/thinkpad_acpi.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/platform/x86/thinkpad_acpi.c 
b/drivers/platform/x86/thinkpad_acpi.c
index 3b648c0..a901fac 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -2978,6 +2978,32 @@ static struct device_attribute 
dev_attr_hotkey_mute_state =
        __ATTR(hotkey_mute_state, S_IWUSR | S_IRUGO,
        hotkey_mute_state_show, hotkey_mute_state_store);
 
+/* sysfs hotkey_mute_enable -------------------------------------------- */
+static ssize_t hotkey_mute_enable_store(struct device *dev,
+                           struct device_attribute *attr,
+                           const char *buf, size_t count)
+{
+       unsigned long state;
+       int output;
+
+       if (parse_strtoul(buf, 25, &state))
+               return -EINVAL;
+
+       if (state != 1 && state != 0)
+               return -EINVAL;
+
+       if (!acpi_evalf(hkey_handle, &output, "SHDA", "dd", state))
+               return -EIO;
+
+       if (output & TPACPI_AML_MUTE_ERROR_STATE_MASK)
+               return -EIO;
+
+       return count;
+}
+
+static struct device_attribute dev_attr_hotkey_mute_enable =
+       __ATTR(hotkey_mute_enable, S_IWUSR, NULL, hotkey_mute_enable_store);
+
 /* --------------------------------------------------------------------- */
 
 static struct attribute *hotkey_attributes[] __initdata = {
@@ -2995,6 +3021,7 @@ static struct attribute *hotkey_attributes[] __initdata = 
{
        &dev_attr_hotkey_poll_freq.attr,
 #endif
        &dev_attr_hotkey_mute_state.attr,
+       &dev_attr_hotkey_mute_enable.attr,
 };
 
 /*
-- 
1.8.1.2

--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" 
in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to