Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13d26193 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
sound fixes for 3.3-rc4

Basically all small fixes suited as rc4: a few HD-audio regression fixes,
a stable fix for an old Dell laptop with intel8x0, and a simple fix for
ASoC fsi.

* tag 'sound-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: intel8x0: Fix default inaudible sound on Gateway M520
  ALSA: hda - Fix silent speaker output on Acer Aspire 6935
  ALSA: hda - Fix initialization of secondary capture source on VT1705
  ASoC: fsi: fixup fsi_pointer() calculation method
  ALSA: hda - Fix mute-LED VREF value for new HP laptops
parents ce5afed9 27c3afe6
Loading
Loading
Loading
Loading
+23 −0
Original line number Original line Diff line number Diff line
@@ -4374,6 +4374,7 @@ enum {
	ALC882_FIXUP_ACER_ASPIRE_8930G,
	ALC882_FIXUP_ACER_ASPIRE_8930G,
	ALC882_FIXUP_ASPIRE_8930G_VERBS,
	ALC882_FIXUP_ASPIRE_8930G_VERBS,
	ALC885_FIXUP_MACPRO_GPIO,
	ALC885_FIXUP_MACPRO_GPIO,
	ALC889_FIXUP_DAC_ROUTE,
};
};


static void alc889_fixup_coef(struct hda_codec *codec,
static void alc889_fixup_coef(struct hda_codec *codec,
@@ -4427,6 +4428,23 @@ static void alc885_fixup_macpro_gpio(struct hda_codec *codec,
	alc882_gpio_mute(codec, 1, 0);
	alc882_gpio_mute(codec, 1, 0);
}
}


/* Fix the connection of some pins for ALC889:
 * At least, Acer Aspire 5935 shows the connections to DAC3/4 don't
 * work correctly (bko#42740)
 */
static void alc889_fixup_dac_route(struct hda_codec *codec,
				   const struct alc_fixup *fix, int action)
{
	if (action == ALC_FIXUP_ACT_PRE_PROBE) {
		hda_nid_t conn1[2] = { 0x0c, 0x0d };
		hda_nid_t conn2[2] = { 0x0e, 0x0f };
		snd_hda_override_conn_list(codec, 0x14, 2, conn1);
		snd_hda_override_conn_list(codec, 0x15, 2, conn1);
		snd_hda_override_conn_list(codec, 0x18, 2, conn2);
		snd_hda_override_conn_list(codec, 0x1a, 2, conn2);
	}
}

static const struct alc_fixup alc882_fixups[] = {
static const struct alc_fixup alc882_fixups[] = {
	[ALC882_FIXUP_ABIT_AW9D_MAX] = {
	[ALC882_FIXUP_ABIT_AW9D_MAX] = {
		.type = ALC_FIXUP_PINS,
		.type = ALC_FIXUP_PINS,
@@ -4574,6 +4592,10 @@ static const struct alc_fixup alc882_fixups[] = {
		.type = ALC_FIXUP_FUNC,
		.type = ALC_FIXUP_FUNC,
		.v.func = alc885_fixup_macpro_gpio,
		.v.func = alc885_fixup_macpro_gpio,
	},
	},
	[ALC889_FIXUP_DAC_ROUTE] = {
		.type = ALC_FIXUP_FUNC,
		.v.func = alc889_fixup_dac_route,
	},
};
};


static const struct snd_pci_quirk alc882_fixup_tbl[] = {
static const struct snd_pci_quirk alc882_fixup_tbl[] = {
@@ -4598,6 +4620,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
	SND_PCI_QUIRK(0x1025, 0x0142, "Acer Aspire 7730G",
	SND_PCI_QUIRK(0x1025, 0x0142, "Acer Aspire 7730G",
		      ALC882_FIXUP_ACER_ASPIRE_4930G),
		      ALC882_FIXUP_ACER_ASPIRE_4930G),
	SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", ALC882_FIXUP_PB_M5210),
	SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", ALC882_FIXUP_PB_M5210),
	SND_PCI_QUIRK(0x1025, 0x0259, "Acer Aspire 5935", ALC889_FIXUP_DAC_ROUTE),
	SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", ALC882_FIXUP_ACER_ASPIRE_7736),
	SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", ALC882_FIXUP_ACER_ASPIRE_7736),
	SND_PCI_QUIRK(0x1043, 0x13c2, "Asus A7M", ALC882_FIXUP_EAPD),
	SND_PCI_QUIRK(0x1043, 0x13c2, "Asus A7M", ALC882_FIXUP_EAPD),
	SND_PCI_QUIRK(0x1043, 0x1873, "ASUS W90V", ALC882_FIXUP_ASUS_W90V),
	SND_PCI_QUIRK(0x1043, 0x1873, "ASUS W90V", ALC882_FIXUP_ASUS_W90V),
+2 −2
Original line number Original line Diff line number Diff line
@@ -5078,9 +5078,9 @@ static int stac92xx_update_led_status(struct hda_codec *codec)
				spec->gpio_dir, spec->gpio_data);
				spec->gpio_dir, spec->gpio_data);
	} else {
	} else {
		notmtd_lvl = spec->gpio_led_polarity ?
		notmtd_lvl = spec->gpio_led_polarity ?
				AC_PINCTL_VREF_HIZ : AC_PINCTL_VREF_GRD;
				AC_PINCTL_VREF_50 : AC_PINCTL_VREF_GRD;
		muted_lvl = spec->gpio_led_polarity ?
		muted_lvl = spec->gpio_led_polarity ?
				AC_PINCTL_VREF_GRD : AC_PINCTL_VREF_HIZ;
				AC_PINCTL_VREF_GRD : AC_PINCTL_VREF_50;
		spec->vref_led = muted ? muted_lvl : notmtd_lvl;
		spec->vref_led = muted ? muted_lvl : notmtd_lvl;
		stac_vrefout_set(codec,	spec->vref_mute_led_nid,
		stac_vrefout_set(codec,	spec->vref_mute_led_nid,
				 spec->vref_led);
				 spec->vref_led);
+3 −0
Original line number Original line Diff line number Diff line
@@ -666,6 +666,9 @@ static void via_auto_init_analog_input(struct hda_codec *codec)
	/* init input-src */
	/* init input-src */
	for (i = 0; i < spec->num_adc_nids; i++) {
	for (i = 0; i < spec->num_adc_nids; i++) {
		int adc_idx = spec->inputs[spec->cur_mux[i]].adc_idx;
		int adc_idx = spec->inputs[spec->cur_mux[i]].adc_idx;
		/* secondary ADCs must have the unique MUX */
		if (i > 0 && !spec->mux_nids[i])
			break;
		if (spec->mux_nids[adc_idx]) {
		if (spec->mux_nids[adc_idx]) {
			int mux_idx = spec->inputs[spec->cur_mux[i]].mux_idx;
			int mux_idx = spec->inputs[spec->cur_mux[i]].mux_idx;
			snd_hda_codec_write(codec, spec->mux_nids[adc_idx], 0,
			snd_hda_codec_write(codec, spec->mux_nids[adc_idx], 0,
+6 −0
Original line number Original line Diff line number Diff line
@@ -2100,6 +2100,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
		.name = "MSI P4 ATX 645 Ultra",
		.name = "MSI P4 ATX 645 Ultra",
		.type = AC97_TUNE_HP_ONLY
		.type = AC97_TUNE_HP_ONLY
	},
	},
	{
		.subvendor = 0x161f,
		.subdevice = 0x202f,
		.name = "Gateway M520",
		.type = AC97_TUNE_INV_EAPD
	},
	{
	{
		.subvendor = 0x161f,
		.subvendor = 0x161f,
		.subdevice = 0x203a,
		.subdevice = 0x203a,
+1 −5
Original line number Original line Diff line number Diff line
@@ -1152,12 +1152,8 @@ static snd_pcm_uframes_t fsi_pointer(struct snd_pcm_substream *substream)
{
{
	struct fsi_priv *fsi = fsi_get_priv(substream);
	struct fsi_priv *fsi = fsi_get_priv(substream);
	struct fsi_stream *io = fsi_get_stream(fsi, fsi_is_play(substream));
	struct fsi_stream *io = fsi_get_stream(fsi, fsi_is_play(substream));
	int samples_pos = io->buff_sample_pos - 1;


	if (samples_pos < 0)
	return fsi_sample2frame(fsi, io->buff_sample_pos);
		samples_pos = 0;

	return fsi_sample2frame(fsi, samples_pos);
}
}


static struct snd_pcm_ops fsi_pcm_ops = {
static struct snd_pcm_ops fsi_pcm_ops = {