Commit 7c1c05af authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
  ASoC: fix a memory-leak in wm8903
  ALSA: hda - add possibility to choose speakers configuration for 4930g
  ALSA: hda - Fix HP T5735 automute
  ALSA: hda - Turn on EAPD only if available for Realtek codecs
  ALSA: hda - Fix parsing pin node 0x21 on ALC259
parents 486d35e2 86f2ce03
...@@ -1093,6 +1093,16 @@ static void alc889_coef_init(struct hda_codec *codec) ...@@ -1093,6 +1093,16 @@ static void alc889_coef_init(struct hda_codec *codec)
snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, tmp|0x2010); snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, tmp|0x2010);
} }
/* turn on/off EAPD control (only if available) */
static void set_eapd(struct hda_codec *codec, hda_nid_t nid, int on)
{
if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
return;
if (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)
snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_EAPD_BTLENABLE,
on ? 2 : 0);
}
static void alc_auto_init_amp(struct hda_codec *codec, int type) static void alc_auto_init_amp(struct hda_codec *codec, int type)
{ {
unsigned int tmp; unsigned int tmp;
...@@ -1110,25 +1120,22 @@ static void alc_auto_init_amp(struct hda_codec *codec, int type) ...@@ -1110,25 +1120,22 @@ static void alc_auto_init_amp(struct hda_codec *codec, int type)
case ALC_INIT_DEFAULT: case ALC_INIT_DEFAULT:
switch (codec->vendor_id) { switch (codec->vendor_id) {
case 0x10ec0260: case 0x10ec0260:
snd_hda_codec_write(codec, 0x0f, 0, set_eapd(codec, 0x0f, 1);
AC_VERB_SET_EAPD_BTLENABLE, 2); set_eapd(codec, 0x10, 1);
snd_hda_codec_write(codec, 0x10, 0,
AC_VERB_SET_EAPD_BTLENABLE, 2);
break; break;
case 0x10ec0262: case 0x10ec0262:
case 0x10ec0267: case 0x10ec0267:
case 0x10ec0268: case 0x10ec0268:
case 0x10ec0269: case 0x10ec0269:
case 0x10ec0270:
case 0x10ec0272: case 0x10ec0272:
case 0x10ec0660: case 0x10ec0660:
case 0x10ec0662: case 0x10ec0662:
case 0x10ec0663: case 0x10ec0663:
case 0x10ec0862: case 0x10ec0862:
case 0x10ec0889: case 0x10ec0889:
snd_hda_codec_write(codec, 0x14, 0, set_eapd(codec, 0x14, 1);
AC_VERB_SET_EAPD_BTLENABLE, 2); set_eapd(codec, 0x15, 1);
snd_hda_codec_write(codec, 0x15, 0,
AC_VERB_SET_EAPD_BTLENABLE, 2);
break; break;
} }
switch (codec->vendor_id) { switch (codec->vendor_id) {
...@@ -1836,10 +1843,8 @@ static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec) ...@@ -1836,10 +1843,8 @@ static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec)
#ifdef CONFIG_SND_HDA_POWER_SAVE #ifdef CONFIG_SND_HDA_POWER_SAVE
static void alc889_power_eapd(struct hda_codec *codec, int power) static void alc889_power_eapd(struct hda_codec *codec, int power)
{ {
snd_hda_codec_write(codec, 0x14, 0, set_eapd(codec, 0x14, power);
AC_VERB_SET_EAPD_BTLENABLE, power ? 2 : 0); set_eapd(codec, 0x15, power);
snd_hda_codec_write(codec, 0x15, 0,
AC_VERB_SET_EAPD_BTLENABLE, power ? 2 : 0);
} }
#endif #endif
...@@ -9473,6 +9478,7 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9473,6 +9478,7 @@ static struct alc_config_preset alc882_presets[] = {
.num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes),
.channel_mode = alc883_3ST_6ch_modes, .channel_mode = alc883_3ST_6ch_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
.const_channel_count = 6,
.num_mux_defs = .num_mux_defs =
ARRAY_SIZE(alc888_2_capture_sources), ARRAY_SIZE(alc888_2_capture_sources),
.input_mux = alc888_2_capture_sources, .input_mux = alc888_2_capture_sources,
...@@ -10377,7 +10383,7 @@ static void alc262_hp_t5735_setup(struct hda_codec *codec) ...@@ -10377,7 +10383,7 @@ static void alc262_hp_t5735_setup(struct hda_codec *codec)
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x0c; /* HACK: not actually a pin */ spec->autocfg.speaker_pins[0] = 0x14;
} }
static struct snd_kcontrol_new alc262_hp_t5735_mixer[] = { static struct snd_kcontrol_new alc262_hp_t5735_mixer[] = {
...@@ -11788,9 +11794,9 @@ static struct alc_config_preset alc262_presets[] = { ...@@ -11788,9 +11794,9 @@ static struct alc_config_preset alc262_presets[] = {
.num_channel_mode = ARRAY_SIZE(alc262_modes), .num_channel_mode = ARRAY_SIZE(alc262_modes),
.channel_mode = alc262_modes, .channel_mode = alc262_modes,
.input_mux = &alc262_capture_source, .input_mux = &alc262_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_sku_unsol_event,
.setup = alc262_hp_t5735_setup, .setup = alc262_hp_t5735_setup,
.init_hook = alc_automute_amp, .init_hook = alc_inithook,
}, },
[ALC262_HP_RP5700] = { [ALC262_HP_RP5700] = {
.mixers = { alc262_hp_rp5700_mixer }, .mixers = { alc262_hp_rp5700_mixer },
...@@ -12541,6 +12547,7 @@ static int alc268_new_analog_output(struct alc_spec *spec, hda_nid_t nid, ...@@ -12541,6 +12547,7 @@ static int alc268_new_analog_output(struct alc_spec *spec, hda_nid_t nid,
dac = 0x02; dac = 0x02;
break; break;
case 0x15: case 0x15:
case 0x21:
dac = 0x03; dac = 0x03;
break; break;
default: default:
......
...@@ -1504,7 +1504,7 @@ static int wm8903_resume(struct platform_device *pdev) ...@@ -1504,7 +1504,7 @@ static int wm8903_resume(struct platform_device *pdev)
struct i2c_client *i2c = codec->control_data; struct i2c_client *i2c = codec->control_data;
int i; int i;
u16 *reg_cache = codec->reg_cache; u16 *reg_cache = codec->reg_cache;
u16 *tmp_cache = kmemdup(codec->reg_cache, sizeof(wm8903_reg_defaults), u16 *tmp_cache = kmemdup(reg_cache, sizeof(wm8903_reg_defaults),
GFP_KERNEL); GFP_KERNEL);
/* Bring the codec back up to standby first to minimise pop/clicks */ /* Bring the codec back up to standby first to minimise pop/clicks */
...@@ -1516,6 +1516,7 @@ static int wm8903_resume(struct platform_device *pdev) ...@@ -1516,6 +1516,7 @@ static int wm8903_resume(struct platform_device *pdev)
for (i = 2; i < ARRAY_SIZE(wm8903_reg_defaults); i++) for (i = 2; i < ARRAY_SIZE(wm8903_reg_defaults); i++)
if (tmp_cache[i] != reg_cache[i]) if (tmp_cache[i] != reg_cache[i])
snd_soc_write(codec, i, tmp_cache[i]); snd_soc_write(codec, i, tmp_cache[i]);
kfree(tmp_cache);
} else { } else {
dev_err(&i2c->dev, "Failed to allocate temporary cache\n"); dev_err(&i2c->dev, "Failed to allocate temporary cache\n");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment