Re: [Alsa-devel] [PATCH] Add new quirk for devices with mute LEDs and separate headphone volume

From: Takashi Iwai
Date: Thu Nov 24 2005 - 05:30:39 EST


At Thu, 24 Nov 2005 05:50:54 +0000,
Matthew Garrett wrote:
>
> This patch adds a new quirk for ac97 hardware that combines the existing
> AC97_TUNE_MUTE_LED and AC97_TUNE_HP_ONLY quirks. This is needed for
> several current HP laptops. Additionally, it adds the HP nx6125 to the
> AC97_TUNE_MUTE_LED list.
>
> Signed-off-by: Matthew Garrett <mjg59@xxxxxxxxxxxxx>

The source codes of ALSA kernel part have been largely changed after
1.0.10 release. Could you regenerate the patch against ALSA CVS
version?


Takashi

>
> --- a/sound/pci/atiixp.c.orig 2005-09-16 15:38:21 +0100
> +++ b/sound/pci/atiixp.c 2005-09-16 15:38:59 +0100
> @@ -1339,6 +1339,12 @@
> .name = "HP Pavilion ZV5030US",
> .type = AC97_TUNE_MUTE_LED
> },
> + {
> + .subvendor = 0x103c,
> + .subdevice = 0x308b,
> + .name = "HP nx6125",
> + .type = AC97_TUNE_MUTE_LED
> + },
> { } /* terminator */
> };
>
> --- a/sound/pci/intel8x0.c.orig 2005-09-16 15:34:18 +0100
> +++ b/sound/pci/intel8x0.c 2005-09-16 15:37:13 +0100
> @@ -1822,6 +1822,30 @@
> },
> {
> .subvendor = 0x103c,
> + .subdevice = 0x0938,
> + .name = "HP nc4200",
> + .type = AC97_TUNE_HP_MUTE_LED
> + },
> + {
> + .subvendor = 0x103c,
> + .subdevice = 0x099c,
> + .name = "HP nc6120",
> + .type = AC97_TUNE_HP_MUTE_LED
> + },
> + {
> + .subvendor = 0x103c,
> + .subdevice = 0x0944,
> + .name = "HP nc6220",
> + .type = AC97_TUNE_HP_MUTE_LED
> + },
> + {
> + .subvendor = 0x103c,
> + .subdevice = 0x0934,
> + .name = "HP nc8220",
> + .type = AC97_TUNE_HP_MUTE_LED
> + },
> + {
> + .subvendor = 0x103c,
> .subdevice = 0x12f1,
> .name = "HP xw8200", /* AD1981B*/
> .type = AC97_TUNE_HP_ONLY
> --- a/include/sound/ac97_codec.h.orig 2005-09-15 19:05:14.000000000 +0100
> +++ b/include/sound/ac97_codec.h 2005-09-15 19:05:47.000000000 +0100
> @@ -570,6 +570,7 @@
> AC97_TUNE_ALC_JACK, /* for Realtek, enable JACK detection */
> AC97_TUNE_INV_EAPD, /* inverted EAPD implementation */
> AC97_TUNE_MUTE_LED, /* EAPD bit works as mute LED */
> + AC97_TUNE_HP_MUTE_LED, /* EAPD bit works as mute LED, use headphone control as master */
> };
>
> struct ac97_quirk {
> --- a/sound/pci/ac97/ac97_codec.c.orig 2005-09-15 21:25:24.000000000 +0100
> +++ b/sound/pci/ac97/ac97_codec.c 2005-09-15 19:09:55.000000000 +0100
> @@ -2470,6 +2470,40 @@
> return 0;
> }
>
> +static int hp_master_mute_sw_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
> +{
> + int err = bind_hp_volsw_put(kcontrol, ucontrol);
> + if (err > 0) {
> + ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
> + int shift = (kcontrol->private_value >> 8) & 0x0f;
> + int rshift = (kcontrol->private_value >> 12) & 0x0f;
> + unsigned short mask;
> + if (shift != rshift)
> + mask = 0x8080;
> + else
> + mask = 0x8000;
> + snd_ac97_update_bits(ac97, AC97_POWERDOWN, 0x8000,
> + (ac97->regs[AC97_MASTER] & mask) == mask ?
> + 0x8000 : 0);
> + }
> + return err;
> +}
> +
> +static int tune_hp_mute_led(ac97_t *ac97)
> +{
> + snd_kcontrol_t *msw = ctl_find(ac97, "Master Playback Switch", NULL);
> + snd_kcontrol_t *mvol = ctl_find(ac97, "Master Playback Volume", NULL);
> + if (! msw || ! mvol)
> + return -ENOENT;
> + msw->put = hp_master_mute_sw_put;
> + mvol->put = bind_hp_volsw_put;
> + snd_ac97_remove_ctl(ac97, "External Amplifier", NULL);
> + snd_ac97_remove_ctl(ac97, "Headphone Playback", "Switch");
> + snd_ac97_remove_ctl(ac97, "Headphone Playback", "Volume");
> + snd_ac97_update_bits(ac97, AC97_POWERDOWN, 0x8000, 0x8000); /* mute LED on */
> + return 0;
> +}
> +
> struct quirk_table {
> const char *name;
> int (*func)(ac97_t *);
> @@ -2484,6 +2518,7 @@
> { "alc_jack", tune_alc_jack },
> { "inv_eapd", tune_inv_eapd },
> { "mute_led", tune_mute_led },
> + { "hp_mute_led", tune_hp_mute_led },
> };
>
> /* apply the quirk with the given type */
>
> --
> Matthew Garrett | mjg59@xxxxxxxxxxxxx
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
> for problems? Stop! Download the new AJAX search engine that makes
> searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
> http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.sourceforge.net/lists/listinfo/alsa-devel
>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/