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

Commit 6f64e3a4 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull sound fixes from Takashi Iwai:
 "A collection of a few small fixes.

  The most significant one is the fix for the possible race at loading
  HD-audio drivers. This has been present for long time and surfaced
  only in a rare occasion, but finally spotted out"

* tag 'sound-5.0-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: hda/ca0132 - Fix build error without CONFIG_PCI
  ALSA: compress: Fix stop handling on compressed capture streams
  ALSA: usb-audio: Add support for new T+A USB DAC
  ALSA: hda - Serialize codec registrations
  ALSA: hda/realtek - Use a common helper for hp pin reference
  ALSA: hda/realtek - Fix lose hp_pins for disable auto mute
  ALSA: hda/realtek - Headset microphone support for System76 darp5
parents b0314565 c97617a8
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -173,7 +173,11 @@ static inline void snd_compr_drain_notify(struct snd_compr_stream *stream)
	if (snd_BUG_ON(!stream))
		return;

	if (stream->direction == SND_COMPRESS_PLAYBACK)
		stream->runtime->state = SNDRV_PCM_STATE_SETUP;
	else
		stream->runtime->state = SNDRV_PCM_STATE_PREPARED;

	wake_up(&stream->runtime->sleep);
}

+1 −0
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ struct hda_bus {
	unsigned int response_reset:1;	/* controller was reset */
	unsigned int in_reset:1;	/* during reset operation */
	unsigned int no_response_fallback:1; /* don't fallback at RIRB error */
	unsigned int bus_probing :1;	/* during probing process */

	int primary_dig_out_type;	/* primary digital out PCM type */
	unsigned int mixer_assigned;	/* codec addr for mixer name */
+2 −1
Original line number Diff line number Diff line
@@ -115,7 +115,8 @@ static int hda_codec_driver_probe(struct device *dev)
	err = snd_hda_codec_build_controls(codec);
	if (err < 0)
		goto error_module;
	if (codec->card->registered) {
	/* only register after the bus probe finished; otherwise it's racy */
	if (!codec->bus->bus_probing && codec->card->registered) {
		err = snd_card_register(codec->card);
		if (err < 0)
			goto error_module;
+2 −0
Original line number Diff line number Diff line
@@ -2185,6 +2185,7 @@ static int azx_probe_continue(struct azx *chip)
	int dev = chip->dev_index;
	int err;

	to_hda_bus(bus)->bus_probing = 1;
	hda->probe_continued = 1;

	/* bind with i915 if needed */
@@ -2269,6 +2270,7 @@ static int azx_probe_continue(struct azx *chip)
	if (err < 0)
		hda->init_failed = 1;
	complete_all(&hda->probe_wait);
	to_hda_bus(bus)->bus_probing = 0;
	return err;
}

+3 −1
Original line number Diff line number Diff line
@@ -8451,8 +8451,10 @@ static void ca0132_free(struct hda_codec *codec)
	ca0132_exit_chip(codec);

	snd_hda_power_down(codec);
	if (IS_ENABLED(CONFIG_PCI) && spec->mem_base)
#ifdef CONFIG_PCI
	if (spec->mem_base)
		pci_iounmap(codec->bus->pci, spec->mem_base);
#endif
	kfree(spec->spec_init_verbs);
	kfree(codec->spec);
}
Loading