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@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