Commit f9a09e00 authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'fix/hda' into topic/hda

parents 3fccdfd8 d2a19da7
...@@ -209,6 +209,7 @@ static void isight_packet(struct fw_iso_context *context, u32 cycle, ...@@ -209,6 +209,7 @@ static void isight_packet(struct fw_iso_context *context, u32 cycle,
isight->packet_index = -1; isight->packet_index = -1;
return; return;
} }
fw_iso_context_queue_flush(isight->context);
if (++index >= QUEUE_LENGTH) if (++index >= QUEUE_LENGTH)
index = 0; index = 0;
......
...@@ -54,7 +54,7 @@ static inline int snd_hda_attach_beep_device(struct hda_codec *codec, int nid) ...@@ -54,7 +54,7 @@ static inline int snd_hda_attach_beep_device(struct hda_codec *codec, int nid)
{ {
return 0; return 0;
} }
void snd_hda_detach_beep_device(struct hda_codec *codec) static inline void snd_hda_detach_beep_device(struct hda_codec *codec)
{ {
} }
#endif #endif
......
...@@ -4884,7 +4884,6 @@ static const struct snd_pci_quirk alc880_cfg_tbl[] = { ...@@ -4884,7 +4884,6 @@ static const struct snd_pci_quirk alc880_cfg_tbl[] = {
SND_PCI_QUIRK(0x1025, 0xe309, "ULI", ALC880_3ST_DIG), SND_PCI_QUIRK(0x1025, 0xe309, "ULI", ALC880_3ST_DIG),
SND_PCI_QUIRK(0x1025, 0xe310, "ULI", ALC880_3ST), SND_PCI_QUIRK(0x1025, 0xe310, "ULI", ALC880_3ST),
SND_PCI_QUIRK(0x1039, 0x1234, NULL, ALC880_6ST_DIG), SND_PCI_QUIRK(0x1039, 0x1234, NULL, ALC880_6ST_DIG),
SND_PCI_QUIRK(0x103c, 0x2a09, "HP", ALC880_5ST),
SND_PCI_QUIRK(0x1043, 0x10b3, "ASUS W1V", ALC880_ASUS_W1V), SND_PCI_QUIRK(0x1043, 0x10b3, "ASUS W1V", ALC880_ASUS_W1V),
SND_PCI_QUIRK(0x1043, 0x10c2, "ASUS W6A", ALC880_ASUS_DIG), SND_PCI_QUIRK(0x1043, 0x10c2, "ASUS W6A", ALC880_ASUS_DIG),
SND_PCI_QUIRK(0x1043, 0x10c3, "ASUS Wxx", ALC880_ASUS_DIG), SND_PCI_QUIRK(0x1043, 0x10c3, "ASUS Wxx", ALC880_ASUS_DIG),
...@@ -12601,6 +12600,7 @@ static const struct hda_verb alc262_toshiba_rx1_unsol_verbs[] = { ...@@ -12601,6 +12600,7 @@ static const struct hda_verb alc262_toshiba_rx1_unsol_verbs[] = {
*/ */
enum { enum {
PINFIX_FSC_H270, PINFIX_FSC_H270,
PINFIX_HP_Z200,
}; };
static const struct alc_fixup alc262_fixups[] = { static const struct alc_fixup alc262_fixups[] = {
...@@ -12613,9 +12613,17 @@ static const struct alc_fixup alc262_fixups[] = { ...@@ -12613,9 +12613,17 @@ static const struct alc_fixup alc262_fixups[] = {
{ } { }
} }
}, },
[PINFIX_HP_Z200] = {
.type = ALC_FIXUP_PINS,
.v.pins = (const struct alc_pincfg[]) {
{ 0x16, 0x99130120 }, /* internal speaker */
{ }
}
},
}; };
static const struct snd_pci_quirk alc262_fixup_tbl[] = { static const struct snd_pci_quirk alc262_fixup_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x170b, "HP Z200", PINFIX_HP_Z200),
SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", PINFIX_FSC_H270), SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", PINFIX_FSC_H270),
{} {}
}; };
...@@ -12732,6 +12740,8 @@ static const struct snd_pci_quirk alc262_cfg_tbl[] = { ...@@ -12732,6 +12740,8 @@ static const struct snd_pci_quirk alc262_cfg_tbl[] = {
ALC262_HP_BPC), ALC262_HP_BPC),
SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1500, "HP z series", SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1500, "HP z series",
ALC262_HP_BPC), ALC262_HP_BPC),
SND_PCI_QUIRK(0x103c, 0x170b, "HP Z200",
ALC262_AUTO),
SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1700, "HP xw series", SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1700, "HP xw series",
ALC262_HP_BPC), ALC262_HP_BPC),
SND_PCI_QUIRK(0x103c, 0x2800, "HP D7000", ALC262_HP_BPC_D7000_WL), SND_PCI_QUIRK(0x103c, 0x2800, "HP D7000", ALC262_HP_BPC_D7000_WL),
...@@ -13873,7 +13883,6 @@ static const struct snd_pci_quirk alc268_cfg_tbl[] = { ...@@ -13873,7 +13883,6 @@ static const struct snd_pci_quirk alc268_cfg_tbl[] = {
SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC268_3ST), SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC268_3ST),
SND_PCI_QUIRK(0x1170, 0x0040, "ZEPTO", ALC268_ZEPTO), SND_PCI_QUIRK(0x1170, 0x0040, "ZEPTO", ALC268_ZEPTO),
SND_PCI_QUIRK(0x14c0, 0x0025, "COMPAL IFL90/JFL-92", ALC268_TOSHIBA), SND_PCI_QUIRK(0x14c0, 0x0025, "COMPAL IFL90/JFL-92", ALC268_TOSHIBA),
SND_PCI_QUIRK(0x152d, 0x0763, "Diverse (CPR2000)", ALC268_ACER),
SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1), SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1),
{} {}
}; };
......
...@@ -745,12 +745,23 @@ static int via_independent_hp_put(struct snd_kcontrol *kcontrol, ...@@ -745,12 +745,23 @@ static int via_independent_hp_put(struct snd_kcontrol *kcontrol,
struct via_spec *spec = codec->spec; struct via_spec *spec = codec->spec;
hda_nid_t nid = kcontrol->private_value; hda_nid_t nid = kcontrol->private_value;
unsigned int pinsel = ucontrol->value.enumerated.item[0]; unsigned int pinsel = ucontrol->value.enumerated.item[0];
unsigned int parm0, parm1;
/* Get Independent Mode index of headphone pin widget */ /* Get Independent Mode index of headphone pin widget */
spec->hp_independent_mode = spec->hp_independent_mode_index == pinsel spec->hp_independent_mode = spec->hp_independent_mode_index == pinsel
? 1 : 0; ? 1 : 0;
if (spec->codec_type == VT1718S) if (spec->codec_type == VT1718S) {
snd_hda_codec_write(codec, nid, 0, snd_hda_codec_write(codec, nid, 0,
AC_VERB_SET_CONNECT_SEL, pinsel ? 2 : 0); AC_VERB_SET_CONNECT_SEL, pinsel ? 2 : 0);
/* Set correct mute switch for MW3 */
parm0 = spec->hp_independent_mode ?
AMP_IN_UNMUTE(0) : AMP_IN_MUTE(0);
parm1 = spec->hp_independent_mode ?
AMP_IN_MUTE(1) : AMP_IN_UNMUTE(1);
snd_hda_codec_write(codec, 0x1b, 0,
AC_VERB_SET_AMP_GAIN_MUTE, parm0);
snd_hda_codec_write(codec, 0x1b, 0,
AC_VERB_SET_AMP_GAIN_MUTE, parm1);
}
else else
snd_hda_codec_write(codec, nid, 0, snd_hda_codec_write(codec, nid, 0,
AC_VERB_SET_CONNECT_SEL, pinsel); AC_VERB_SET_CONNECT_SEL, pinsel);
...@@ -832,10 +843,13 @@ static int via_hp_build(struct hda_codec *codec) ...@@ -832,10 +843,13 @@ static int via_hp_build(struct hda_codec *codec)
knew->subdevice = HDA_SUBDEV_NID_FLAG | nid; knew->subdevice = HDA_SUBDEV_NID_FLAG | nid;
knew->private_value = nid; knew->private_value = nid;
knew = via_clone_control(spec, &via_hp_mixer[1]); nid = side_mute_channel(spec);
if (knew == NULL) if (nid) {
return -ENOMEM; knew = via_clone_control(spec, &via_hp_mixer[1]);
knew->subdevice = side_mute_channel(spec); if (knew == NULL)
return -ENOMEM;
knew->subdevice = nid;
}
return 0; return 0;
} }
...@@ -4274,9 +4288,6 @@ static const struct hda_verb vt1718S_volume_init_verbs[] = { ...@@ -4274,9 +4288,6 @@ static const struct hda_verb vt1718S_volume_init_verbs[] = {
{0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
{0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
{0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(5)}, {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(5)},
/* Setup default input of Front HP to MW9 */
{0x28, AC_VERB_SET_CONNECT_SEL, 0x1},
/* PW9 PW10 Output enable */ /* PW9 PW10 Output enable */
{0x2d, AC_VERB_SET_PIN_WIDGET_CONTROL, AC_PINCTL_OUT_EN}, {0x2d, AC_VERB_SET_PIN_WIDGET_CONTROL, AC_PINCTL_OUT_EN},
{0x2e, AC_VERB_SET_PIN_WIDGET_CONTROL, AC_PINCTL_OUT_EN}, {0x2e, AC_VERB_SET_PIN_WIDGET_CONTROL, AC_PINCTL_OUT_EN},
...@@ -4285,10 +4296,10 @@ static const struct hda_verb vt1718S_volume_init_verbs[] = { ...@@ -4285,10 +4296,10 @@ static const struct hda_verb vt1718S_volume_init_verbs[] = {
/* Enable Boost Volume backdoor */ /* Enable Boost Volume backdoor */
{0x1, 0xf88, 0x8}, {0x1, 0xf88, 0x8},
/* MW0/1/2/3/4: un-mute index 0 (AOWx), mute index 1 (MW9) */ /* MW0/1/2/3/4: un-mute index 0 (AOWx), mute index 1 (MW9) */
{0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
{0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
{0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
{0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
{0x1c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, {0x1c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
{0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
{0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
...@@ -4298,8 +4309,6 @@ static const struct hda_verb vt1718S_volume_init_verbs[] = { ...@@ -4298,8 +4309,6 @@ static const struct hda_verb vt1718S_volume_init_verbs[] = {
/* set MUX1 = 2 (AOW4), MUX2 = 1 (AOW3) */ /* set MUX1 = 2 (AOW4), MUX2 = 1 (AOW3) */
{0x34, AC_VERB_SET_CONNECT_SEL, 0x2}, {0x34, AC_VERB_SET_CONNECT_SEL, 0x2},
{0x35, AC_VERB_SET_CONNECT_SEL, 0x1}, {0x35, AC_VERB_SET_CONNECT_SEL, 0x1},
/* Unmute MW4's index 0 */
{0x1c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
{ } { }
}; };
...@@ -4447,6 +4456,19 @@ static int vt1718S_auto_create_multi_out_ctls(struct via_spec *spec, ...@@ -4447,6 +4456,19 @@ static int vt1718S_auto_create_multi_out_ctls(struct via_spec *spec,
if (err < 0) if (err < 0)
return err; return err;
} else if (i == AUTO_SEQ_FRONT) { } else if (i == AUTO_SEQ_FRONT) {
/* add control to mixer index 0 */
err = via_add_control(spec, VIA_CTL_WIDGET_VOL,
"Master Front Playback Volume",
HDA_COMPOSE_AMP_VAL(0x21, 3, 5,
HDA_INPUT));
if (err < 0)
return err;
err = via_add_control(spec, VIA_CTL_WIDGET_MUTE,
"Master Front Playback Switch",
HDA_COMPOSE_AMP_VAL(0x21, 3, 5,
HDA_INPUT));
if (err < 0)
return err;
/* Front */ /* Front */
sprintf(name, "%s Playback Volume", chname[i]); sprintf(name, "%s Playback Volume", chname[i]);
err = via_add_control( err = via_add_control(
......
...@@ -445,7 +445,7 @@ static void lola_reset_setups(struct lola *chip) ...@@ -445,7 +445,7 @@ static void lola_reset_setups(struct lola *chip)
lola_setup_all_analog_gains(chip, PLAY, false); /* output, update */ lola_setup_all_analog_gains(chip, PLAY, false); /* output, update */
} }
static int lola_parse_tree(struct lola *chip) static int __devinit lola_parse_tree(struct lola *chip)
{ {
unsigned int val; unsigned int val;
int nid, err; int nid, err;
......
...@@ -270,7 +270,6 @@ static int usb6fire_fw_ezusb_upload( ...@@ -270,7 +270,6 @@ static int usb6fire_fw_ezusb_upload(
data = 0x00; /* resume ezusb cpu */ data = 0x00; /* resume ezusb cpu */
ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, &data, 1); ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, &data, 1);
if (ret < 0) { if (ret < 0) {
release_firmware(fw);
snd_printk(KERN_ERR PREFIX "unable to upload ezusb " snd_printk(KERN_ERR PREFIX "unable to upload ezusb "
"firmware %s: end message.\n", fwname); "firmware %s: end message.\n", fwname);
return ret; return ret;
......
...@@ -395,12 +395,12 @@ static int usb6fire_pcm_open(struct snd_pcm_substream *alsa_sub) ...@@ -395,12 +395,12 @@ static int usb6fire_pcm_open(struct snd_pcm_substream *alsa_sub)
alsa_rt->hw = pcm_hw; alsa_rt->hw = pcm_hw;
if (alsa_sub->stream == SNDRV_PCM_STREAM_PLAYBACK) { if (alsa_sub->stream == SNDRV_PCM_STREAM_PLAYBACK) {
if (rt->rate >= 0) if (rt->rate < ARRAY_SIZE(rates))
alsa_rt->hw.rates = rates_alsaid[rt->rate]; alsa_rt->hw.rates = rates_alsaid[rt->rate];
alsa_rt->hw.channels_max = OUT_N_CHANNELS; alsa_rt->hw.channels_max = OUT_N_CHANNELS;
sub = &rt->playback; sub = &rt->playback;
} else if (alsa_sub->stream == SNDRV_PCM_STREAM_CAPTURE) { } else if (alsa_sub->stream == SNDRV_PCM_STREAM_CAPTURE) {
if (rt->rate >= 0) if (rt->rate < ARRAY_SIZE(rates))
alsa_rt->hw.rates = rates_alsaid[rt->rate]; alsa_rt->hw.rates = rates_alsaid[rt->rate];
alsa_rt->hw.channels_max = IN_N_CHANNELS; alsa_rt->hw.channels_max = IN_N_CHANNELS;
sub = &rt->capture; sub = &rt->capture;
......
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