[alsa-devel] [PATCH v3] ALSA: Fix mute led GPIO on HP dv-series notebooks.
Takashi Iwai
tiwai at suse.de
Fri Jan 15 18:17:05 CET 2010
At Fri, 15 Jan 2010 21:01:47 +0530,
Kunal Gangakhedkar wrote:
>
> On my laptop (HP dv6-1110ax), there are no OEM strings in SMBIOS of type
> "HP_Mute_LED*". Hence, the GPIO for the mute button LED doesn't get set
> properly. I didn't find the strings in my cousin's laptop (HP dv9500t CTO)
> either.
>
> As per the documentation of find_mute_led_gpio(), these strings occur
> in HP B-series systems - so, before scanning the SMBIOS strings, we need to
> check if we're dealing with a B-series system.
> Need to get confirmation from HP if this logic takes care of all the
> systems. I'm trying to poke a friend there.
>
> Please let me know if this looks OK or needs change.
>
> Signed-off-by: Kunal Gangakhedkar <kunal.gangakhedkar at gmail.com>
Thanks, applied now (with a minor change from snd_printd() to
snd_printdd() -- since snd_printd() is enabled in many cases).
Takashi
> ---
> sound/pci/hda/patch_sigmatel.c | 61 +++++++++++++++++++++++++++++----------
> 1 files changed, 45 insertions(+), 16 deletions(-)
>
> diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
> index 117919a..7d3e66a 100644
> --- a/sound/pci/hda/patch_sigmatel.c
> +++ b/sound/pci/hda/patch_sigmatel.c
> @@ -4737,6 +4737,26 @@ static void stac92xx_unsol_event(struct hda_codec *codec, unsigned int res)
> }
> }
>
> +static int hp_blike_system(u32 subsystem_id);
> +
> +static void set_hp_led_gpio(struct hda_codec *codec)
> +{
> + struct sigmatel_spec *spec = codec->spec;
> + switch (codec->vendor_id) {
> + case 0x111d7608:
> + /* GPIO 0 */
> + spec->gpio_led = 0x01;
> + break;
> + case 0x111d7600:
> + case 0x111d7601:
> + case 0x111d7602:
> + case 0x111d7603:
> + /* GPIO 3 */
> + spec->gpio_led = 0x08;
> + break;
> + }
> +}
> +
> /*
> * This method searches for the mute LED GPIO configuration
> * provided as OEM string in SMBIOS. The format of that string
> @@ -4748,6 +4768,14 @@ static void stac92xx_unsol_event(struct hda_codec *codec, unsigned int res)
> *
> * So, HP B-series like systems may have HP_Mute_LED_0 (current models)
> * or HP_Mute_LED_0_3 (future models) OEM SMBIOS strings
> + *
> + *
> + * The dv-series laptops don't seem to have the HP_Mute_LED* strings in
> + * SMBIOS - at least the ones I have seen do not have them - which include
> + * my own system (HP Pavilion dv6-1110ax) and my cousin's
> + * HP Pavilion dv9500t CTO.
> + * Need more information on whether it is true across the entire series.
> + * -- kunal
> */
> static int find_mute_led_gpio(struct hda_codec *codec)
> {
> @@ -4758,28 +4786,27 @@ static int find_mute_led_gpio(struct hda_codec *codec)
> while ((dev = dmi_find_device(DMI_DEV_TYPE_OEM_STRING,
> NULL, dev))) {
> if (sscanf(dev->name, "HP_Mute_LED_%d_%d",
> - &spec->gpio_led_polarity,
> - &spec->gpio_led) == 2) {
> + &spec->gpio_led_polarity,
> + &spec->gpio_led) == 2) {
> spec->gpio_led = 1 << spec->gpio_led;
> return 1;
> }
> if (sscanf(dev->name, "HP_Mute_LED_%d",
> - &spec->gpio_led_polarity) == 1) {
> - switch (codec->vendor_id) {
> - case 0x111d7608:
> - /* GPIO 0 */
> - spec->gpio_led = 0x01;
> - return 1;
> - case 0x111d7600:
> - case 0x111d7601:
> - case 0x111d7602:
> - case 0x111d7603:
> - /* GPIO 3 */
> - spec->gpio_led = 0x08;
> - return 1;
> - }
> + &spec->gpio_led_polarity) == 1) {
> + set_hp_led_gpio(codec);
> + return 1;
> }
> }
> +
> + /*
> + * Fallback case - if we don't find the DMI strings,
> + * we statically set the GPIO - if not a B-series system.
> + */
> + if (!hp_blike_system(codec->subsystem_id)) {
> + set_hp_led_gpio(codec);
> + spec->gpio_led_polarity = 1;
> + return 1;
> + }
> }
> return 0;
> }
> @@ -5603,6 +5630,8 @@ again:
> spec->num_dmuxes = ARRAY_SIZE(stac92hd71bxx_dmux_nids);
> spec->num_smuxes = stac92hd71bxx_connected_smuxes(codec, 0x1e);
>
> + snd_printd("Found board config: %d\n", spec->board_config);
> +
> switch (spec->board_config) {
> case STAC_HP_M4:
> /* enable internal microphone */
> --
> 1.6.6.60.gc2ff1
>
More information about the Alsa-devel
mailing list