Add new quirk for devices with mute LEDs and separate headphone volume
PATCH 1/1 Add new quirk for devices with mute LEDs and separate headphone volume
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.
sound/pci/atiixp.c renamed from sound/pci/atiixp.c.orig +6 -0
@@ -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 */ };
sound/pci/intel8x0.c renamed from sound/pci/intel8x0.c.orig +24 -0
@@ -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
include/sound/ac97_codec.h renamed from include/sound/ac97_codec.h.orig +1 -0
@@ -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 {
sound/pci/ac97/ac97_codec.c renamed from sound/pci/ac97/ac97_codec.c.orig +35 -0
@@ -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 */
Signature · 8 lines
Matthew Garrett | [email protected] ------------------------------------------------------- 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
At Thu, 24 Nov 2005 05:50:54 +0000,
Quoted 7 lines · Matthew Garrett
This patch adds a new quirk for ac97 hardware that combines the existing
AC97_TUNE_MUTE_LEDandAC97_TUNE_HP_ONLYquirks. This is needed for several current HP laptops. Additionally, it adds the HP nx6125 to theAC97_TUNE_MUTE_LEDlist.Signed-off-by Matthew Garrett <[email protected]>
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
Quoted 125 lines
sound/pci/atiixp.c renamed from sound/pci/atiixp.c.orig +6
-0@@ -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 */ };sound/pci/intel8x0.c renamed from sound/pci/intel8x0.c.orig +24
-0@@ -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_ONLYinclude/sound/ac97_codec.h renamed from include/sound/ac97_codec.h.orig +1
-0@@ -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 {sound/pci/ac97/ac97_codec.c renamed from sound/pci/ac97/ac97_codec.c.orig +35
-0@@ -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 */ Signature · 13 lines
-- Matthew Garrett | [email protected] ------------------------------------------------------- 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 [email protected] https://lists.sourceforge.net/lists/listinfo/alsa-devel
-------------------------------------------------------
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