sound fixes for 4.6-rc1
Linus,
please pull sound fixes for v4.6-rc1 from:
git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-fix-4.6-rc1
The topmost commit is c64c1437afb14ebc900e40910f31ffb20bf652ad
----------------------------------------------------------------
sound fixes for 4.6-rc1
The previous pull request introduced a few WARN_ON() for Intel HD-audio HDMI. Indeed it caught bugs, and now users get annoyed. So this request came up: a collection of small fixes to paper over the inconsistencies on (mostly) old Intel chipsets.
In addition, a trivial USB-audio quirk is included, too.
----------------------------------------------------------------
Takashi Iwai (5):
ALSA: hda - Really restrict i915 notifier to HSW+
ALSA: hda - Fix forgotten HDMI monitor_present update
ALSA: hda - Fix spurious kernel WARNING on Baytrail HDMI
ALSA: hda - Workaround for unbalanced i915 power refcount by concurrent probe
ALSA: hda - Fix missing ELD update at unplugging
Victor Clément (1):
ALSA: usb-audio: add Microsoft HD-5001 to quirks
--- sound/pci/hda/patch_hdmi.c | 37 +++++++++++++++++++++++++++---------- sound/usb/quirks.c | 1 + 2 files changed, 28 insertions(+), 10 deletions(-)
sound/pci/hda/patch_hdmi.c +27 -10
@@ -152,6 +152,7 @@ struct hdmi_spec {struct hda_pcm_stream pcm_playback;/* i915/powerwell (Haswell+/Valleyview+) specific */ +bool use_acomp_notifier;/* use i915 eld_notify callback for hotplug */ struct i915_audio_component_audio_ops i915_audio_ops;bool i915_bound;/* was i915 bound in this driver? */
@@ -159,8 +160,11 @@ struct hdmi_spec { };#ifdef CONFIG_SND_HDA_I915 -#define codec_has_acomp (codec) \ - ((codec)->bus->core.audio_component != NULL) +static inline bool codec_has_acomp (struct hda_codec *codec) +{ +struct hdmi_spec *spec = codec->spec; +return spec->use_acomp_notifier; +}#else #define codec_has_acomp (codec) false#endif
@@ -1354,6 +1358,7 @@ static void update_eld(struct hda_codec *codec, eld->eld_size) != 0) eld_changed = true; + pin_eld->monitor_present = eld->monitor_present; pin_eld->eld_valid = eld->eld_valid; pin_eld->eld_size = eld->eld_size;if (eld->eld_valid)
@@ -1479,11 +1484,10 @@ static void sync_eld_via_acomp(struct hda_codec *codec,int size;mutex_lock (&per_pin->lock); + eld->monitor_present = false; size =snd_hdac_acomp_get_eld (&codec->bus->core, per_pin->pin_nid, &eld->monitor_present, eld->eld_buffer,ELD_MAX_SIZE ); -if (size <0 ) - goto unlock;if (size >0 ) { size =min (size,ELD_MAX_SIZE ); if (snd_hdmi_parse_eld(codec, &eld->info,
@@ -1736,7 +1740,8 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,/* Call sync_audio_rate to set the N/CTS/M manually if necessary */ /* Todo: add DP1.2 MST audio support later */ -snd_hdac_sync_audio_rate (&codec->bus->core, pin_nid, runtime->rate); +if (codec_has_acomp (codec)) +snd_hdac_sync_audio_rate (&codec->bus->core, pin_nid, runtime->rate); non_pcm =check_non_pcm_per_cvt (codec, cvt_nid);mutex_lock (&per_pin->lock);
@@ -2248,12 +2253,24 @@ static int patch_generic_hdmi(struct hda_codec *codec) codec->spec = spec;hdmi_array_init (spec,4 ); +#ifdef CONFIG_SND_HDA_I915 /* Try to bind with i915 for Intel HSW+ codecs (if not done yet) */ -if (!codec_has_acomp (codec) && - (codec->core.vendor_id >>16 ) ==0x8086 && -is_haswell_plus (codec)) -if (!snd_hdac_i915_init (&codec->bus->core)) - spec->i915_bound = true; +if ((codec->core.vendor_id >>16 ) ==0x8086 && +is_haswell_plus (codec)) { +#if 0 +/* on-demand binding leads to an unbalanced refcount when +* both i915 and hda drivers are probed concurrently; +* disabled temporarily for now +*/ +if (!codec->bus->core.audio_component) +if (!snd_hdac_i915_init (&codec->bus->core)) + spec->i915_bound = true; +#endif +/* use i915 audio component notifier for hotplug */ +if (codec->bus->core.audio_component) + spec->use_acomp_notifier = true; + } +#endif if (is_haswell_plus (codec)) {intel_haswell_enable_all_pins (codec, true);
sound/usb/quirks.c +1 -0
@@ -1126,6 +1126,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)switch (chip->usb_id) {case USB_ID (0x045E ,0x075D ):/* MS Lifecam Cinema */ case USB_ID (0x045E ,0x076D ):/* MS Lifecam HD-5000 */ +case USB_ID (0x045E ,0x076E ):/* MS Lifecam HD-5001 */ case USB_ID (0x045E ,0x076F ):/* MS Lifecam HD-6000 */ case USB_ID (0x045E ,0x0772 ):/* MS Lifecam Studio */ case USB_ID (0x045E ,0x0779 ):/* MS Lifecam HD-3000 */