linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: "Ayman Bagabas" <ayman.bagabas@gmail.com>
Cc: <alsa-devel@alsa-project.org>,
	"Hui Wang" <hui.wang@canonical.com>,
	"Jaroslav Kysela" <perex@perex.cz>,
	"Kailang Yang" <kailang@realtek.com>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/3] ALSA:hda: add support for Huawei WMI MicMute LED
Date: Thu, 01 Nov 2018 08:37:47 +0100	[thread overview]
Message-ID: <s5hd0rpgsdw.wl-tiwai@suse.de> (raw)
In-Reply-To: <20181031192045.7877-1-ayman.bagabas@gmail.com>

On Wed, 31 Oct 2018 20:20:38 +0100,
Ayman Bagabas wrote:
> 
> Some of Huawei laptops come with a LED in the mic mute key. This patch
> enables and disable this LED when the internal microphone status is
> changed.
> 
> Signed-off-by: Ayman Bagabas <ayman.bagabas@gmail.com>
> ---
>  include/linux/huawei_wmi.h        |  7 ++++
>  sound/pci/hda/huawei_wmi_helper.c | 66 +++++++++++++++++++++++++++++++
>  sound/pci/hda/patch_realtek.c     | 12 ++++++
>  3 files changed, 85 insertions(+)
>  create mode 100644 include/linux/huawei_wmi.h
>  create mode 100644 sound/pci/hda/huawei_wmi_helper.c
> 
> diff --git a/include/linux/huawei_wmi.h b/include/linux/huawei_wmi.h
> new file mode 100644
> index 000000000000..69b656c5029b
> --- /dev/null
> +++ b/include/linux/huawei_wmi.h
> @@ -0,0 +1,7 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef __HUAWEI_WMI_H__
> +#define __HUAWEI_WMI_H__
> +
> +int huawei_wmi_micmute_led_set(bool on);
> +
> +#endif
> diff --git a/sound/pci/hda/huawei_wmi_helper.c b/sound/pci/hda/huawei_wmi_helper.c
> new file mode 100644
> index 000000000000..57256f51fd88
> --- /dev/null
> +++ b/sound/pci/hda/huawei_wmi_helper.c
> @@ -0,0 +1,66 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/* Helper functions for Huawei WMI Mic Mute LED;
> + * to be included from codec driver
> + */
> +
> +#if IS_ENABLED(CONFIG_HUAWEI_LAPTOP)
> +#include <linux/huawei_wmi.h>
> +
> +static int (*huawei_wmi_micmute_led_set_func)(bool);
> +
> +static void update_huawei_wmi_micmute_led(struct hda_codec *codec,
> +					  struct snd_kcontrol *kcontrol,
> +					  struct snd_ctl_elem_value *ucontrol)
> +{
> +	if (!ucontrol || !huawei_wmi_micmute_led_set_func)
> +		return;
> +	if (strcmp("Capture Switch", ucontrol->id.name) == 0 && ucontrol->id.index == 0) {
> +		/* TODO: How do I verify if it's a mono or stereo here? */
> +		bool val = ucontrol->value.integer.value[0] || ucontrol->value.integer.value[1];
> +		huawei_wmi_micmute_led_set_func(!val);
> +	}
> +}
> +
> +static void alc_fixup_huawei_wmi(struct hda_codec *codec,
> +				   const struct hda_fixup *fix, int action)
> +{
> +	struct hda_gen_spec *spec = codec->spec;
> +	bool removefunc = false;
> +
> +	codec_info(codec, "In alc_fixup_huawei_wmi\n");
> +
> +	if (action == HDA_FIXUP_ACT_PROBE) {
> +		if (!huawei_wmi_micmute_led_set_func)
> +			huawei_wmi_micmute_led_set_func = symbol_request(huawei_wmi_micmute_led_set);
> +		if (!huawei_wmi_micmute_led_set_func) {
> +			codec_warn(codec, "Failed to find huawei_wmi symbol huawei_wmi_micmute_led_set\n");
> +			return;
> +		}
> +
> +		removefunc = true;
> +		if (huawei_wmi_micmute_led_set_func(false) >= 0) {
> +			if (spec->num_adc_nids > 1 && !spec->dyn_adc_switch)
> +				codec_dbg(codec, "Skipping micmute LED control due to several ADCs");
> +			else {
> +				spec->cap_sync_hook = update_huawei_wmi_micmute_led;
> +				removefunc = false;
> +			}
> +		}
> +		codec_info(codec, "In alc_fixup_huawei_wmi IF\n");
> +
> +	}
> +
> +	if (huawei_wmi_micmute_led_set_func && (action == HDA_FIXUP_ACT_FREE || removefunc)) {
> +		symbol_put(huawei_wmi_micmute_led_set);
> +		huawei_wmi_micmute_led_set_func = NULL;
> +	}
> +}

There is a new snd_hda_gen_add_micmute_led() helper.  Please use it
instead.


> @@ -6610,6 +6620,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
>  	SND_PCI_QUIRK(0x17aa, 0x511e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
>  	SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
>  	SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MBXP", ALC256_FIXUP_HUAWEI_MBXP_PINS),
> +	SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MBXP", ALC256_FIXUP_HUAWEI_WMI_MICMUTE_LED),

You must not have two entries with the very same ID.
And this implies that you didn't test the latest patches.  In the
quirk list, only the first matching is applied, so this WMI hook won't
be executed at all.

Anyways: the submission is confusing at this time since you posted in
may times by some reason, once mixed up all, once incomplete patchset,
etc.

At the next submission, could you give a proper cover letter (PATCH
0/3) and submit together with other patches?  git-format-patch will
give you a nice template with --cover-letter option.


thanks,

Takashi

  reply	other threads:[~2018-11-01  7:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-31 19:20 [PATCH 3/3] ALSA:hda: add support for Huawei WMI MicMute LED Ayman Bagabas
2018-11-01  7:37 ` Takashi Iwai [this message]
2018-11-01  7:39   ` Takashi Iwai
  -- strict thread matches above, loose matches on Subject: below --
2018-10-31 15:59 ab24580
2018-10-31 16:06 ` ayman.bagabas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5hd0rpgsdw.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=ayman.bagabas@gmail.com \
    --cc=hui.wang@canonical.com \
    --cc=kailang@realtek.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=perex@perex.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).