Merge branch 'fix/hda' into topic/hda
Conflicts: sound/pci/hda/patch_realtek.c
This commit is contained in:
@@ -4460,14 +4460,7 @@ static inline int get_pin_presence(struct hda_codec *codec, hda_nid_t nid)
|
||||
{
|
||||
if (!nid)
|
||||
return 0;
|
||||
/* NOTE: we can't use snd_hda_jack_detect() here because STAC/IDT
|
||||
* codecs behave wrongly when SET_PIN_SENSE is triggered, although
|
||||
* the pincap gives TRIG_REQ bit.
|
||||
*/
|
||||
if (snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_PIN_SENSE, 0) &
|
||||
AC_PINSENSE_PRESENCE)
|
||||
return 1;
|
||||
return 0;
|
||||
return snd_hda_jack_detect(codec, nid);
|
||||
}
|
||||
|
||||
static void stac92xx_line_out_detect(struct hda_codec *codec,
|
||||
@@ -4744,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
|
||||
@@ -4755,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)
|
||||
{
|
||||
@@ -4765,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;
|
||||
}
|
||||
@@ -4969,6 +4989,7 @@ static int patch_stac9200(struct hda_codec *codec)
|
||||
if (spec == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
codec->no_trigger_sense = 1;
|
||||
codec->spec = spec;
|
||||
spec->num_pins = ARRAY_SIZE(stac9200_pin_nids);
|
||||
spec->pin_nids = stac9200_pin_nids;
|
||||
@@ -5031,6 +5052,7 @@ static int patch_stac925x(struct hda_codec *codec)
|
||||
if (spec == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
codec->no_trigger_sense = 1;
|
||||
codec->spec = spec;
|
||||
spec->num_pins = ARRAY_SIZE(stac925x_pin_nids);
|
||||
spec->pin_nids = stac925x_pin_nids;
|
||||
@@ -5115,6 +5137,7 @@ static int patch_stac92hd73xx(struct hda_codec *codec)
|
||||
if (spec == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
codec->no_trigger_sense = 1;
|
||||
codec->spec = spec;
|
||||
codec->slave_dig_outs = stac92hd73xx_slave_dig_outs;
|
||||
spec->num_pins = ARRAY_SIZE(stac92hd73xx_pin_nids);
|
||||
@@ -5262,6 +5285,7 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
|
||||
if (spec == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
codec->no_trigger_sense = 1;
|
||||
codec->spec = spec;
|
||||
codec->slave_dig_outs = stac92hd83xxx_slave_dig_outs;
|
||||
spec->digbeep_nid = 0x21;
|
||||
@@ -5473,6 +5497,7 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
|
||||
if (spec == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
codec->no_trigger_sense = 1;
|
||||
codec->spec = spec;
|
||||
codec->patch_ops = stac92xx_patch_ops;
|
||||
spec->num_pins = STAC92HD71BXX_NUM_PINS;
|
||||
@@ -5605,6 +5630,8 @@ again:
|
||||
spec->num_dmuxes = ARRAY_SIZE(stac92hd71bxx_dmux_nids);
|
||||
spec->num_smuxes = stac92hd71bxx_connected_smuxes(codec, 0x1e);
|
||||
|
||||
snd_printdd("Found board config: %d\n", spec->board_config);
|
||||
|
||||
switch (spec->board_config) {
|
||||
case STAC_HP_M4:
|
||||
/* enable internal microphone */
|
||||
@@ -5725,6 +5752,7 @@ static int patch_stac922x(struct hda_codec *codec)
|
||||
if (spec == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
codec->no_trigger_sense = 1;
|
||||
codec->spec = spec;
|
||||
spec->num_pins = ARRAY_SIZE(stac922x_pin_nids);
|
||||
spec->pin_nids = stac922x_pin_nids;
|
||||
@@ -5828,6 +5856,7 @@ static int patch_stac927x(struct hda_codec *codec)
|
||||
if (spec == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
codec->no_trigger_sense = 1;
|
||||
codec->spec = spec;
|
||||
codec->slave_dig_outs = stac927x_slave_dig_outs;
|
||||
spec->num_pins = ARRAY_SIZE(stac927x_pin_nids);
|
||||
@@ -5962,6 +5991,7 @@ static int patch_stac9205(struct hda_codec *codec)
|
||||
if (spec == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
codec->no_trigger_sense = 1;
|
||||
codec->spec = spec;
|
||||
spec->num_pins = ARRAY_SIZE(stac9205_pin_nids);
|
||||
spec->pin_nids = stac9205_pin_nids;
|
||||
@@ -6117,6 +6147,7 @@ static int patch_stac9872(struct hda_codec *codec)
|
||||
spec = kzalloc(sizeof(*spec), GFP_KERNEL);
|
||||
if (spec == NULL)
|
||||
return -ENOMEM;
|
||||
codec->no_trigger_sense = 1;
|
||||
codec->spec = spec;
|
||||
spec->num_pins = ARRAY_SIZE(stac9872_pin_nids);
|
||||
spec->pin_nids = stac9872_pin_nids;
|
||||
|
Reference in New Issue
Block a user