From patchwork Mon Dec 3 18:53:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ayman Bagabas X-Patchwork-Id: 10710379 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E68061057 for ; Mon, 3 Dec 2018 18:54:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D948E29416 for ; Mon, 3 Dec 2018 18:54:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CD5E02951A; Mon, 3 Dec 2018 18:54:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7477129416 for ; Mon, 3 Dec 2018 18:54:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726445AbeLCSx4 (ORCPT ); Mon, 3 Dec 2018 13:53:56 -0500 Received: from mail-yw1-f67.google.com ([209.85.161.67]:41544 "EHLO mail-yw1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726029AbeLCSx4 (ORCPT ); Mon, 3 Dec 2018 13:53:56 -0500 Received: by mail-yw1-f67.google.com with SMTP id f65so5838393ywc.8; Mon, 03 Dec 2018 10:53:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FTG+yUpS50wEf4PINJxF2Rp+/PS2UIUyXw6PMWpmEPE=; b=kgWiIlybU/HZ01INNApxv9wUgAYzgfexL4fXh5ZeA1Fr+uA/WK2lFo8ZI2Qsqb461U iChv7SrBM6QOBW1rQy1V5ibPLNjbXYmORrYgpK4ntOJRu7EEvM7l0gV9KE/VNbq7kNMT hBmm8FhDyk4bACjlN7GgFP5IaU0c8p6R8qUQUo/E0w6RUnNMhE3lZ/vmMwmhgxUI8RLa Oolz7z5tVpVqlPb+JMFsDVCCDj3D7x5IGbFj3rVogggB5VWMfXSM0zIZjRnTiVFOBJyZ GJoBevVVuTYqgO/21tP1chKJUBuM0/xu0NYvygd1E7sZ5RKR0cY0wsR4+zIm1/icrXNx PU9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FTG+yUpS50wEf4PINJxF2Rp+/PS2UIUyXw6PMWpmEPE=; b=FEgawWbhb24AXSRWAY9INEhJuYY7YRSMpivAYf1hXDkq0SkhE9JsED3/qo1K2uoI0G Gcb7/ENLRVhUN3X0Z8rrtSw4koITOQ5BXvUdl8lFCuw+QSCd5VhGdY5hURUYn2I29N2y VJm7JzFMHlH1nLE4/paq+sYs8o1mO12NPlTHbVG7Oi2YYbEV35ezZLwE+JRfFErY3dbJ HAZk1Ff4AojOGAfnkYCHrDZL8Ks8WECob2+bK5sYx+I7wHW7nVPCEI1KSDVTRP5t140l F3cT4ek/zy/uNUFkkJaXjVgfj62nqXKX6xSXhCRIVML5pSt3S8qSu82MMG193Hg658on LW5A== X-Gm-Message-State: AA+aEWZuELJC7BevilvcB7PkzS7wINHWc14pqLoyjKmq1qMD89cfUqc2 okuPitmdAHkG53saiZhvvQ== X-Google-Smtp-Source: AFSGD/WlYR1WhyNsjl4DvoOP05VpS2eZY1L/Mzj7T1zjY59qCgPpgQ51Jq5ZvSS1PMbnLodJztS8wg== X-Received: by 2002:a81:2548:: with SMTP id l69mr16980599ywl.397.1543863233425; Mon, 03 Dec 2018 10:53:53 -0800 (PST) Received: from 960.armstrong.edu ([130.254.104.55]) by smtp.gmail.com with ESMTPSA id u132sm4842769ywc.11.2018.12.03.10.53.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 03 Dec 2018 10:53:52 -0800 (PST) From: Ayman Bagabas To: Darren Hart , Andy Shevchenko , Jaroslav Kysela , Takashi Iwai , Kailang Yang , Hui Wang , linux-kernel@vger.kernel.org, platform-driver-x86@vger.kernel.org, alsa-devel@alsa-project.org Cc: ayman.bagabas@gmail.com Subject: [PATCH v9 1/3] ALSA: hda: fix front speakers on Huawei MBXP. Date: Mon, 3 Dec 2018 13:53:38 -0500 Message-Id: <20181203185344.3521-2-ayman.bagabas@gmail.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181203185344.3521-1-ayman.bagabas@gmail.com> References: <20181203185344.3521-1-ayman.bagabas@gmail.com> MIME-Version: 1.0 Sender: platform-driver-x86-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch solves bug 200501 'Only 2 of 4 speakers playing sound.' https://bugzilla.kernel.org/show_bug.cgi?id=200501 It enables the front speakers on Huawei Matebook X Pro laptops. These laptops come with Dolby Atmos sound system and these pins configuration enables the front speakers. Reviewed-by: Takashi Iwai Signed-off-by: Ayman Bagabas --- sound/pci/hda/patch_realtek.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 993d34c141c2..1326f32f4574 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -5490,6 +5490,7 @@ enum { ALC298_FIXUP_TPT470_DOCK, ALC255_FIXUP_DUMMY_LINEOUT_VERB, ALC255_FIXUP_DELL_HEADSET_MIC, + ALC256_FIXUP_HUAWEI_MBXP_PINS, ALC295_FIXUP_HP_X360, ALC221_FIXUP_HP_HEADSET_MIC, }; @@ -5761,6 +5762,22 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id = ALC269_FIXUP_HEADSET_MIC }, + [ALC256_FIXUP_HUAWEI_MBXP_PINS] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl[]) { + {0x12, 0x90a60130}, + {0x13, 0x40000000}, + {0x14, 0x90170110}, + {0x18, 0x411111f0}, + {0x19, 0x04a11040}, + {0x1a, 0x411111f0}, + {0x1b, 0x90170112}, + {0x1d, 0x40759a05}, + {0x1e, 0x411111f0}, + {0x21, 0x04211020}, + { } + } + }, [ALC269_FIXUP_ASUS_X101_FUNC] = { .type = HDA_FIXUP_FUNC, .v.func = alc269_fixup_x101_headset_mic, @@ -6591,6 +6608,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), + SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MBXP", ALC256_FIXUP_HUAWEI_MBXP_PINS), SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */ #if 0 From patchwork Mon Dec 3 18:53:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ayman Bagabas X-Patchwork-Id: 10710377 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BEA3F13AF for ; Mon, 3 Dec 2018 18:54:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B13E029416 for ; Mon, 3 Dec 2018 18:54:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A56B42951A; Mon, 3 Dec 2018 18:54:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DA69E29416 for ; Mon, 3 Dec 2018 18:54:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726925AbeLCSyB (ORCPT ); Mon, 3 Dec 2018 13:54:01 -0500 Received: from mail-yb1-f194.google.com ([209.85.219.194]:41793 "EHLO mail-yb1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726029AbeLCSyA (ORCPT ); Mon, 3 Dec 2018 13:54:00 -0500 Received: by mail-yb1-f194.google.com with SMTP id t13-v6so5733124ybb.8; Mon, 03 Dec 2018 10:53:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8zZTnSbo8cQ2o+GieMnXGxj9kwkcdcthOGgnhLwEJto=; b=TL8CMvrbwbAsiLk4yRT2+ojo9qVqIP8OrMr+j5fd/HckSNKhZMHIy3ih1yGNRGj5C3 Qe7B3wG/1Euyr0oPTTg0El8J7O8ItEXSj3h9Kh/6mweUjyb8RMzwATpM4xMdCQ40gpva o1wIhc169I7Wbo91ekBD7xpJxQw9GKPwMxscFtbtyIZtOjVxX7pL4ATdWMa2F/cUMZ0c jKvJykPdhJEiRSuIbcnlF4CDar9vl587Wj1SOIV58nZZy+qKRcc3Hz7j7D8jGMUK1ojR 73IVH6qyCJOXJz2LJbOiULZVfJmN2mVeAziknZRer5/rryK17Q+0Ox/6ondD9MbriKi7 0C9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8zZTnSbo8cQ2o+GieMnXGxj9kwkcdcthOGgnhLwEJto=; b=ikcrDXhrzFKFzIgxdCwLZQ+088vgEEutax8XUV80Vhrn0sUioXOxNBt9Sb3HiwngHo VdVvl1aN7Tu0whjy88HivW3kb3tXJ42DWiYfu+pg5iEPzG2GLa9LRajHeptZ2AgLaGh7 xvfsuagAuJBX6g/wcvA9XRQp0Yzpb42IbH9pz60wodb2/UqF2xR6xhygKMoGhISeXaZL aZEF8xfC5sstFDryuhTd5fgVqQedL6ijUhdkwacX9QO5+9xCJ3AM3X8Mvny8wG095+Hc lGEy7valJk2POX5HhNCBKvkV3+4s18bpFp8AyKjhm0LQK+9pXWc5ykHsH3DXN2VlFeZE b17g== X-Gm-Message-State: AA+aEWYsx06McQBGLSLT6vVveuqxOASi6n1YMR1RhCgko7aS8kfAvhDu ZeVC2jDWmaj4nNhRNPTVMQ== X-Google-Smtp-Source: AFSGD/XK+cFkwVPQqO1PahdHnfto/u+b6CkSNaVTkr6w1Sa2XEjyLwZ4U9viaAAPWSmYBMRT2knsQg== X-Received: by 2002:a25:aca6:: with SMTP id x38mr2651743ybi.49.1543863236971; Mon, 03 Dec 2018 10:53:56 -0800 (PST) Received: from 960.armstrong.edu ([130.254.104.55]) by smtp.gmail.com with ESMTPSA id u132sm4842769ywc.11.2018.12.03.10.53.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 03 Dec 2018 10:53:56 -0800 (PST) From: Ayman Bagabas To: Darren Hart , Andy Shevchenko , Jaroslav Kysela , Takashi Iwai , Kailang Yang , Hui Wang , linux-kernel@vger.kernel.org, platform-driver-x86@vger.kernel.org, alsa-devel@alsa-project.org Cc: ayman.bagabas@gmail.com Subject: [PATCH v9 2/3] x86: add support for Huawei WMI hotkeys. Date: Mon, 3 Dec 2018 13:53:39 -0500 Message-Id: <20181203185344.3521-3-ayman.bagabas@gmail.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181203185344.3521-1-ayman.bagabas@gmail.com> References: <20181203185344.3521-1-ayman.bagabas@gmail.com> MIME-Version: 1.0 Sender: platform-driver-x86-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This driver adds support for missing hotkeys on some Huawei laptops. Laptops such as the Matebook X have non functioning hotkeys. Whereas newer laptops such as the Matebook X Pro come with working hotkeys out of the box. Old laptops, such as the Matebook X, report hotkey events through ACPI device "\WMI0". However, new laptops, such as the Matebook X Pro, does not have this WMI device. All the hotkeys on the Matebook X Pro work fine without this patch except (micmute, wlan, and huawei key). These keys and the brightness keys report events to "\AMW0" ACPI device. One problem is that brightness keys on the Matebook X Pro work without this patch. This results in reporting two brightness key press events one is captured by ACPI and another by this driver. A solution would be to check if such event came from the "\AMW0" WMI driver then skip reporting event. Another solution would be to leave this to user-space to handle. Which can be achieved by using "hwdb" tables and remap those keys to "unknown". This solution seems more natural to me because it leaves the decision to user-space. Signed-off-by: Ayman Bagabas --- drivers/platform/x86/Kconfig | 16 +++ drivers/platform/x86/Makefile | 1 + drivers/platform/x86/huawei-wmi.c | 226 ++++++++++++++++++++++++++++++ 3 files changed, 243 insertions(+) create mode 100644 drivers/platform/x86/huawei-wmi.c diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig index 87f70e8f4dd0..27db3ce7a1e1 100644 --- a/drivers/platform/x86/Kconfig +++ b/drivers/platform/x86/Kconfig @@ -1292,6 +1292,22 @@ config INTEL_ATOMISP2_PM To compile this driver as a module, choose M here: the module will be called intel_atomisp2_pm. +config HUAWEI_WMI + tristate "Huawei WMI hotkeys driver" + depends on ACPI_WMI + depends on INPUT + select INPUT_SPARSEKMAP + select LEDS_CLASS + select LEDS_TRIGGERS + select LEDS_TRIGGER_AUDIO + help + This driver provides support for Huawei WMI hotkeys. + It enables the missing keys and adds support to the micmute + LED found on some of these laptops. + + To compile this driver as a module, choose M here: the module + will be called huawei-wmi. + endif # X86_PLATFORM_DEVICES config PMC_ATOM diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile index 39ae94135406..d841c550e3cc 100644 --- a/drivers/platform/x86/Makefile +++ b/drivers/platform/x86/Makefile @@ -32,6 +32,7 @@ obj-$(CONFIG_ACERHDF) += acerhdf.o obj-$(CONFIG_HP_ACCEL) += hp_accel.o obj-$(CONFIG_HP_WIRELESS) += hp-wireless.o obj-$(CONFIG_HP_WMI) += hp-wmi.o +obj-$(CONFIG_HUAWEI_WMI) += huawei-wmi.o obj-$(CONFIG_AMILO_RFKILL) += amilo-rfkill.o obj-$(CONFIG_GPD_POCKET_FAN) += gpd-pocket-fan.o obj-$(CONFIG_TC1100_WMI) += tc1100-wmi.o diff --git a/drivers/platform/x86/huawei-wmi.c b/drivers/platform/x86/huawei-wmi.c new file mode 100644 index 000000000000..afa030fd1285 --- /dev/null +++ b/drivers/platform/x86/huawei-wmi.c @@ -0,0 +1,226 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Huawei WMI hotkeys + * + * Copyright (C) 2018 Ayman Bagabas + */ + +#include +#include +#include +#include +#include +#include + +/* + * Huawei WMI Events GUIDs + */ +#define WMI0_EVENT_GUID "59142400-C6A3-40fa-BADB-8A2652834100" +#define AMW0_EVENT_GUID "ABBC0F5C-8EA1-11D1-A000-C90629100000" + +struct huawei_wmi_priv { + struct input_dev *idev; + struct led_classdev cdev; + acpi_handle handle; + char *acpi_method; +}; + +static const struct key_entry huawei_wmi_keymap[] = { + { KE_KEY, 0x281, { KEY_BRIGHTNESSDOWN } }, + { KE_KEY, 0x282, { KEY_BRIGHTNESSUP } }, + { KE_KEY, 0x284, { KEY_MUTE } }, + { KE_KEY, 0x285, { KEY_VOLUMEDOWN } }, + { KE_KEY, 0x286, { KEY_VOLUMEUP } }, + { KE_KEY, 0x287, { KEY_MICMUTE } }, + { KE_KEY, 0x289, { KEY_WLAN } }, + // Huawei |M| button + { KE_KEY, 0x28a, { KEY_CONFIG } }, + // Keyboard light + { KE_IGNORE, 0x293, { KEY_KBDILLUMTOGGLE } }, + { KE_IGNORE, 0x294, { KEY_KBDILLUMUP } }, + { KE_IGNORE, 0x295, { KEY_KBDILLUMUP } }, + { KE_END, 0 } +}; + +static int huawei_wmi_micmute_led_set(struct led_classdev *led_cdev, + enum led_brightness brightness) +{ + struct huawei_wmi_priv *priv = dev_get_drvdata(led_cdev->dev->parent); + acpi_status status; + union acpi_object args[3]; + struct acpi_object_list arg_list = { + .pointer = args, + .count = ARRAY_SIZE(args), + }; + + args[0].type = args[1].type = args[2].type = ACPI_TYPE_INTEGER; + args[1].integer.value = 0x04; + + if (strcmp(priv->acpi_method, "SPIN") == 0) { + args[0].integer.value = 0; + args[2].integer.value = brightness ? 1 : 0; + } else if (strcmp(priv->acpi_method, "WPIN") == 0) { + args[0].integer.value = 1; + args[2].integer.value = brightness ? 0 : 1; + } else { + return -EINVAL; + } + + status = acpi_evaluate_object(priv->handle, priv->acpi_method, &arg_list, NULL); + if (ACPI_FAILURE(status)) + return -ENXIO; + + return 0; +} + +static int huawei_wmi_leds_setup(struct wmi_device *wdev) +{ + struct huawei_wmi_priv *priv = dev_get_drvdata(&wdev->dev); + acpi_status status; + + // Skip registering LED subsystem if no ACPI method was found. + status = acpi_get_handle(NULL, "\\_SB.PCI0.LPCB.EC0", &priv->handle); + if (ACPI_FAILURE(status)) + return 0; + + if (acpi_has_method(priv->handle, "SPIN")) + priv->acpi_method = "SPIN"; + else if (acpi_has_method(priv->handle, "WPIN")) + priv->acpi_method = "WPIN"; + else + return 0; + + priv->cdev.name = "platform::micmute"; + priv->cdev.max_brightness = 1; + priv->cdev.brightness_set_blocking = huawei_wmi_micmute_led_set; + priv->cdev.default_trigger = "audio-micmute"; + priv->cdev.brightness = ledtrig_audio_get(LED_AUDIO_MICMUTE); + priv->cdev.dev = &wdev->dev; + priv->cdev.flags = LED_CORE_SUSPENDRESUME; + + return devm_led_classdev_register(&wdev->dev, &priv->cdev); +} + +static void huawei_wmi_process_key(struct wmi_device *wdev, int code) +{ + struct huawei_wmi_priv *priv = dev_get_drvdata(&wdev->dev); + const struct key_entry *key; + + /* + * WMI0 uses code 0x80 to indicate a hotkey event. + * The actual key is fetched from the method WQ00. + */ + if (code == 0x80) { + acpi_status status; + acpi_handle handle; + unsigned long long result; + union acpi_object args[1]; + struct acpi_object_list arg_list = { + .pointer = args, + .count = ARRAY_SIZE(args), + }; + + args[0].type = ACPI_TYPE_INTEGER; + args[0].integer.value = 0; + + status = acpi_get_handle(NULL, "\\WMI0", &handle); + if (ACPI_FAILURE(status)) { + dev_err(&wdev->dev, "Unable to get ACPI handle\n"); + return; + } + + status = acpi_evaluate_integer(NULL, "WQ00", &arg_list, &result); + if (ACPI_FAILURE(status)) { + dev_err(&wdev->dev, "Unable to evaluate ACPI method\n"); + return; + } + + code = result; + } + + key = sparse_keymap_entry_from_scancode(priv->idev, code); + if (!key) { + dev_info(&wdev->dev, "Unknown key pressed, code: 0x%04x\n", code); + return; + } + + sparse_keymap_report_entry(priv->idev, key, 1, true); +} + +static void huawei_wmi_notify(struct wmi_device *wdev, + union acpi_object *obj) +{ + if (obj->type == ACPI_TYPE_INTEGER) + huawei_wmi_process_key(wdev, obj->integer.value); + else + dev_info(&wdev->dev, "Bad response type %d\n", obj->type); +} + +static int huawei_wmi_input_setup(struct wmi_device *wdev) +{ + struct huawei_wmi_priv *priv = dev_get_drvdata(&wdev->dev); + int err; + + priv->idev = devm_input_allocate_device(&wdev->dev); + if (!priv->idev) + return -ENOMEM; + + priv->idev->name = "Huawei WMI hotkeys"; + priv->idev->phys = "wmi/input0"; + priv->idev->id.bustype = BUS_HOST; + priv->idev->dev.parent = &wdev->dev; + + err = sparse_keymap_setup(priv->idev, huawei_wmi_keymap, NULL); + if (err) + return err; + + err = input_register_device(priv->idev); + if (err) + return err; + + return 0; +} + +static int huawei_wmi_probe(struct wmi_device *wdev) +{ + struct huawei_wmi_priv *priv; + int err; + + priv = devm_kzalloc(&wdev->dev, sizeof(struct huawei_wmi_priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + dev_set_drvdata(&wdev->dev, priv); + + err = huawei_wmi_input_setup(wdev); + if (err) + return err; + + err = huawei_wmi_leds_setup(wdev); + if (err) + return err; + + return 0; +} + +static const struct wmi_device_id huawei_wmi_id_table[] = { + { .guid_string = WMI0_EVENT_GUID }, + { .guid_string = AMW0_EVENT_GUID }, + { } +}; + +static struct wmi_driver huawei_wmi_driver = { + .driver = { + .name = "huawei-wmi", + }, + .id_table = huawei_wmi_id_table, + .probe = huawei_wmi_probe, + .notify = huawei_wmi_notify, +}; + +module_wmi_driver(huawei_wmi_driver); + +MODULE_ALIAS("wmi:"WMI0_EVENT_GUID); +MODULE_ALIAS("wmi:"AMW0_EVENT_GUID); +MODULE_AUTHOR("Ayman Bagabas "); +MODULE_DESCRIPTION("Huawei WMI hotkeys"); +MODULE_LICENSE("GPL v2"); From patchwork Mon Dec 3 18:53:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ayman Bagabas X-Patchwork-Id: 10710375 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9C2E61057 for ; Mon, 3 Dec 2018 18:54:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8F86229416 for ; Mon, 3 Dec 2018 18:54:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 82C4F2951A; Mon, 3 Dec 2018 18:54:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3002F29416 for ; Mon, 3 Dec 2018 18:54:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726870AbeLCSyG (ORCPT ); Mon, 3 Dec 2018 13:54:06 -0500 Received: from mail-yb1-f194.google.com ([209.85.219.194]:37783 "EHLO mail-yb1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726958AbeLCSyD (ORCPT ); Mon, 3 Dec 2018 13:54:03 -0500 Received: by mail-yb1-f194.google.com with SMTP id w129-v6so4162913ybe.4; Mon, 03 Dec 2018 10:54:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dGPxibAY8ZyyYRmZa+UWB/0XnyEXDhHmRXiLVIHOJb4=; b=aXsAypMTrfRfIPjvz5IwAzeNhaJcGmod2SyKelpq/KwuLKSJX6f9JyY2LqjhYhfDtg psTEHFXh0ZklSZBX3MMQBWUdASShFuklUo2jjPPi61AM9IJhr0262Nsrs7c92nqpqwCJ 5O7jVj7y9M4lbu7bkZfAZYP40Z3U4aeDTY/wW13PQIcirhmGVLHAASu1EAGPhRwThUoo Hxs6CzQ1CGOC88FxC3dU08CE2qtmMGOfZiqRoBw3VJDLYOrfZnJYx8iuRiFslz9aEMXr wi3ryodXtwL313uOSOycJi4JnekuE2ZPLDuRlnKUgLdNLRGv6acC7dTPFWpeBJKMa/I4 oADQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dGPxibAY8ZyyYRmZa+UWB/0XnyEXDhHmRXiLVIHOJb4=; b=kVPFpD8fya/ith92FcPlQDVG/B/htWCqKlUTVyUZQmdlWrHbJ2mfEFBP+h8d98SUgA Apq9dDgG8gqlkPZs2NP3Di0QcCvkTYrqM62Fr7RMjmH3Nuvh1G2uCHqCB2N3XqPElUwr snmieIbl2/GOf2wEGRgMEwbtbrNks3tbzBx/WO/tz6JlN+beSUC/KH4d4OmZq6goRgP7 f5sf9DsW0EN7P/Uj5LYidUOge+mvqhXbXZ0saUzLVo8fCij7R5k/7v+BwuI9nh6UPumB pd38uMx6KDFXwtyDjqGkkY4OTcDXo7JvFScZadM/yutjSzECVCtyrfRl/SQ7G4QqUld6 NnZA== X-Gm-Message-State: AA+aEWavR1geHktdiWExm+toq2RSo/v2WtPFDJimQ7//ra1WMy1w6qHk /1LFlloL3GEd3+z+5foHtA== X-Google-Smtp-Source: AFSGD/UFhf5h+2WMSg80WKrmrTIjtbpxqWN2IjXfANBrewHBoSu4VDD9hyx62q4baS+mUhTTXIGxpg== X-Received: by 2002:a25:a309:: with SMTP id d9-v6mr16384226ybi.27.1543863240472; Mon, 03 Dec 2018 10:54:00 -0800 (PST) Received: from 960.armstrong.edu ([130.254.104.55]) by smtp.gmail.com with ESMTPSA id u132sm4842769ywc.11.2018.12.03.10.53.59 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 03 Dec 2018 10:54:00 -0800 (PST) From: Ayman Bagabas To: Darren Hart , Andy Shevchenko , Jaroslav Kysela , Takashi Iwai , Kailang Yang , Hui Wang , linux-kernel@vger.kernel.org, platform-driver-x86@vger.kernel.org, alsa-devel@alsa-project.org Cc: ayman.bagabas@gmail.com Subject: [PATCH v9 3/3] ALSA: hda: add support for Huawei WMI micmute LED Date: Mon, 3 Dec 2018 13:53:40 -0500 Message-Id: <20181203185344.3521-4-ayman.bagabas@gmail.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181203185344.3521-1-ayman.bagabas@gmail.com> References: <20181203185344.3521-1-ayman.bagabas@gmail.com> MIME-Version: 1.0 Sender: platform-driver-x86-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Some of Huawei laptops come with a LED in the micmute key. This patch enables the use of micmute LED for these devices: 1. Matebook X (19e5:3200), (19e5:3201) 2. Matebook X Pro (19e5:3204) Reviewed-by: Takashi Iwai Signed-off-by: Ayman Bagabas --- sound/pci/hda/patch_realtek.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 1326f32f4574..9766fd249bdf 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -5776,7 +5776,9 @@ static const struct hda_fixup alc269_fixups[] = { {0x1e, 0x411111f0}, {0x21, 0x04211020}, { } - } + }, + .chained = true, + .chain_id = ALC255_FIXUP_MIC_MUTE_LED }, [ALC269_FIXUP_ASUS_X101_FUNC] = { .type = HDA_FIXUP_FUNC, @@ -6608,6 +6610,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), + SND_PCI_QUIRK(0x19e5, 0x3200, "Huawei MBX", ALC255_FIXUP_MIC_MUTE_LED), + SND_PCI_QUIRK(0x19e5, 0x3201, "Huawei MBX", ALC255_FIXUP_MIC_MUTE_LED), SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MBXP", ALC256_FIXUP_HUAWEI_MBXP_PINS), SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */