From: Mario Limonciello <mario_limonciello@dell.com>
To: stable@vger.kernel.org, gregkh@linuxfoundation.org
Subject: Re: [PATCH 1/1] Backport Dell XPS 13 (2015) HDA microphone support to v4.0.y
Date: Tue, 28 Apr 2015 11:13:28 -0500 [thread overview]
Message-ID: <553FB1A8.40407@dell.com> (raw)
In-Reply-To: <1429655102-4494-1-git-send-email-mario_limonciello@dell.com>
On 04/21/2015 05:25 PM, Limonciello, Mario wrote:
> This is a straight cherry pick of these commits:
> e1e62b98ebddc3234f3259019d3236f66fc667f8
> f3b703326541d0c1ce85f5e570f6d2b6bd4296ec
>
> Signed-off-by: Mario Limonciello <mario_limonciello@dell.com>
> ---
> sound/pci/hda/patch_realtek.c | 144 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 144 insertions(+)
>
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index f9d12c0..52864c2 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -3585,6 +3585,14 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
> WRITE_COEF(0x32, 0x42a3),
> {}
> };
> + static struct coef_fw coef0288[] = {
> + UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
> + UPDATE_COEF(0x50, 0x2000, 0x2000),
> + UPDATE_COEF(0x56, 0x0006, 0x0006),
> + UPDATE_COEF(0x66, 0x0008, 0),
> + UPDATE_COEF(0x67, 0x2000, 0),
> + {}
> + };
> static struct coef_fw coef0292[] = {
> WRITE_COEF(0x76, 0x000e),
> WRITE_COEF(0x6c, 0x2400),
> @@ -3616,6 +3624,10 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
> case 0x10ec0283:
> alc_process_coef_fw(codec, coef0233);
> break;
> + case 0x10ec0286:
> + case 0x10ec0288:
> + alc_process_coef_fw(codec, coef0288);
> + break;
> case 0x10ec0292:
> alc_process_coef_fw(codec, coef0292);
> break;
> @@ -3645,6 +3657,14 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
> WRITE_COEF(0x26, 0x008c),
> {}
> };
> + static struct coef_fw coef0288[] = {
> + UPDATE_COEF(0x50, 0x2000, 0),
> + UPDATE_COEF(0x56, 0x0006, 0),
> + UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
> + UPDATE_COEF(0x66, 0x0008, 0x0008),
> + UPDATE_COEF(0x67, 0x2000, 0x2000),
> + {}
> + };
> static struct coef_fw coef0292[] = {
> WRITE_COEF(0x19, 0xa208),
> WRITE_COEF(0x2e, 0xacf0),
> @@ -3678,6 +3698,13 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
> alc_process_coef_fw(codec, coef0233);
> snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
> break;
> + case 0x10ec0286:
> + case 0x10ec0288:
> + alc_update_coef_idx(codec, 0x4f, 0x000c, 0);
> + snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
> + alc_process_coef_fw(codec, coef0288);
> + snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
> + break;
> case 0x10ec0292:
> snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
> alc_process_coef_fw(codec, coef0292);
> @@ -3713,6 +3740,14 @@ static void alc_headset_mode_default(struct hda_codec *codec)
> WRITE_COEF(0x32, 0x4ea3),
> {}
> };
> + static struct coef_fw coef0288[] = {
> + UPDATE_COEF(0x4f, 0xfcc0, 0xc400), /* Set to TRS type */
> + UPDATE_COEF(0x50, 0x2000, 0x2000),
> + UPDATE_COEF(0x56, 0x0006, 0x0006),
> + UPDATE_COEF(0x66, 0x0008, 0),
> + UPDATE_COEF(0x67, 0x2000, 0),
> + {}
> + };
> static struct coef_fw coef0292[] = {
> WRITE_COEF(0x76, 0x000e),
> WRITE_COEF(0x6c, 0x2400),
> @@ -3742,6 +3777,11 @@ static void alc_headset_mode_default(struct hda_codec *codec)
> case 0x10ec0283:
> alc_process_coef_fw(codec, coef0233);
> break;
> + case 0x10ec0286:
> + case 0x10ec0288:
> + alc_process_coef_fw(codec, coef0288);
> + break;
> + break;
> case 0x10ec0292:
> alc_process_coef_fw(codec, coef0292);
> break;
> @@ -3770,6 +3810,13 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
> WRITE_COEF(0x32, 0x4ea3),
> {}
> };
> + static struct coef_fw coef0288[] = {
> + UPDATE_COEF(0x50, 0x2000, 0x2000),
> + UPDATE_COEF(0x56, 0x0006, 0x0006),
> + UPDATE_COEF(0x66, 0x0008, 0),
> + UPDATE_COEF(0x67, 0x2000, 0),
> + {}
> + };
> static struct coef_fw coef0292[] = {
> WRITE_COEF(0x6b, 0xd429),
> WRITE_COEF(0x76, 0x0008),
> @@ -3797,6 +3844,12 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
> case 0x10ec0283:
> alc_process_coef_fw(codec, coef0233);
> break;
> + case 0x10ec0286:
> + case 0x10ec0288:
> + alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
> + msleep(300);
> + alc_process_coef_fw(codec, coef0288);
> + break;
> case 0x10ec0292:
> alc_process_coef_fw(codec, coef0292);
> break;
> @@ -3825,6 +3878,13 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
> WRITE_COEF(0x32, 0x4ea3),
> {}
> };
> + static struct coef_fw coef0288[] = {
> + UPDATE_COEF(0x50, 0x2000, 0x2000),
> + UPDATE_COEF(0x56, 0x0006, 0x0006),
> + UPDATE_COEF(0x66, 0x0008, 0),
> + UPDATE_COEF(0x67, 0x2000, 0),
> + {}
> + };
> static struct coef_fw coef0292[] = {
> WRITE_COEF(0x6b, 0xe429),
> WRITE_COEF(0x76, 0x0008),
> @@ -3852,6 +3912,12 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
> case 0x10ec0283:
> alc_process_coef_fw(codec, coef0233);
> break;
> + case 0x10ec0286:
> + case 0x10ec0288:
> + alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
> + msleep(300);
> + alc_process_coef_fw(codec, coef0288);
> + break;
> case 0x10ec0292:
> alc_process_coef_fw(codec, coef0292);
> break;
> @@ -3876,6 +3942,10 @@ static void alc_determine_headset_type(struct hda_codec *codec)
> conteol) */
> {}
> };
> + static struct coef_fw coef0288[] = {
> + UPDATE_COEF(0x4f, 0xfcc0, 0xd400), /* Check Type */
> + {}
> + };
> static struct coef_fw coef0293[] = {
> UPDATE_COEF(0x4a, 0x000f, 0x0008), /* Combo Jack auto detect */
> WRITE_COEF(0x45, 0xD429), /* Set to ctia type */
> @@ -3904,6 +3974,13 @@ static void alc_determine_headset_type(struct hda_codec *codec)
> val = alc_read_coef_idx(codec, 0x46);
> is_ctia = (val & 0x0070) == 0x0070;
> break;
> + case 0x10ec0286:
> + case 0x10ec0288:
> + alc_process_coef_fw(codec, coef0288);
> + msleep(350);
> + val = alc_read_coef_idx(codec, 0x50);
> + is_ctia = (val & 0x0070) == 0x0070;
> + break;
> case 0x10ec0292:
> alc_write_coef_idx(codec, 0x6b, 0xd429);
> msleep(300);
> @@ -4087,6 +4164,29 @@ static void alc_fixup_headset_mode_alc255_no_hp_mic(struct hda_codec *codec,
> alc_fixup_headset_mode(codec, fix, action);
> }
>
> +static void alc288_update_headset_jack_cb(struct hda_codec *codec,
> + struct hda_jack_callback *jack)
> +{
> + struct alc_spec *spec = codec->spec;
> + int present;
> +
> + alc_update_headset_jack_cb(codec, jack);
> + /* Headset Mic enable or disable, only for Dell Dino */
> + present = spec->gen.hp_jack_present ? 0x40 : 0;
> + snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
> + present);
> +}
> +
> +static void alc_fixup_headset_mode_dell_alc288(struct hda_codec *codec,
> + const struct hda_fixup *fix, int action)
> +{
> + alc_fixup_headset_mode(codec, fix, action);
> + if (action == HDA_FIXUP_ACT_PROBE) {
> + struct alc_spec *spec = codec->spec;
> + spec->gen.hp_automute_hook = alc288_update_headset_jack_cb;
> + }
> +}
> +
> static void alc_fixup_auto_mute_via_amp(struct hda_codec *codec,
> const struct hda_fixup *fix, int action)
> {
> @@ -4427,6 +4527,9 @@ enum {
> ALC286_FIXUP_HP_GPIO_LED,
> ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
> ALC280_FIXUP_HP_DOCK_PINS,
> + ALC288_FIXUP_DELL_HEADSET_MODE,
> + ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
> + ALC288_FIXUP_DELL_XPS_13_GPIO6,
> };
>
> static const struct hda_fixup alc269_fixups[] = {
> @@ -4922,6 +5025,33 @@ static const struct hda_fixup alc269_fixups[] = {
> .chained = true,
> .chain_id = ALC280_FIXUP_HP_GPIO4
> },
> + [ALC288_FIXUP_DELL_HEADSET_MODE] = {
> + .type = HDA_FIXUP_FUNC,
> + .v.func = alc_fixup_headset_mode_dell_alc288,
> + .chained = true,
> + .chain_id = ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED
> + },
> + [ALC288_FIXUP_DELL1_MIC_NO_PRESENCE] = {
> + .type = HDA_FIXUP_PINS,
> + .v.pins = (const struct hda_pintbl[]) {
> + { 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
> + { 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
> + { }
> + },
> + .chained = true,
> + .chain_id = ALC288_FIXUP_DELL_HEADSET_MODE
> + },
> + [ALC288_FIXUP_DELL_XPS_13_GPIO6] = {
> + .type = HDA_FIXUP_VERBS,
> + .v.verbs = (const struct hda_verb[]) {
> + {0x01, AC_VERB_SET_GPIO_MASK, 0x40},
> + {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x40},
> + {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
> + { }
> + },
> + .chained = true,
> + .chain_id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE
> + },
> };
>
> static const struct snd_pci_quirk alc269_fixup_tbl[] = {
> @@ -5149,6 +5279,13 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
> {0x1b, 0x411111f0}, \
> {0x1e, 0x411111f0}
>
> +#define ALC288_STANDARD_PINS \
> + {0x17, 0x411111f0}, \
> + {0x18, 0x411111f0}, \
> + {0x19, 0x411111f0}, \
> + {0x1a, 0x411111f0}, \
> + {0x1e, 0x411111f0}
> +
> #define ALC290_STANDARD_PINS \
> {0x12, 0x99a30130}, \
> {0x13, 0x40000000}, \
> @@ -5344,6 +5481,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
> {0x19, 0x03a11020},
> {0x1d, 0x40e00001},
> {0x21, 0x0321101f}),
> + SND_HDA_PIN_QUIRK(0x10ec0288, 0x1028, "Dell", ALC288_FIXUP_DELL_XPS_13_GPIO6,
> + ALC288_STANDARD_PINS,
> + {0x12, 0x90a60120},
> + {0x13, 0x40000000},
> + {0x14, 0x90170110},
> + {0x1d, 0x4076832d},
> + {0x21, 0x0321101f}),
> SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
> ALC290_STANDARD_PINS,
> {0x14, 0x411111f0},
Hi,
I didn't see an ACK or NACK on these 3 patches (4.0.y, 3.19.y, and 3.18.y).
Thanks,
next parent reply other threads:[~2015-04-28 16:13 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1429655102-4494-1-git-send-email-mario_limonciello@dell.com>
2015-04-28 16:13 ` Mario Limonciello [this message]
2015-04-28 20:04 ` [PATCH 1/1] Backport Dell XPS 13 (2015) HDA microphone support to v4.0.y Greg KH
2015-04-28 21:55 ` Mario Limonciello
2015-04-28 22:09 ` Greg KH
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=553FB1A8.40407@dell.com \
--to=mario_limonciello@dell.com \
--cc=gregkh@linuxfoundation.org \
--cc=stable@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.