1. 29 7月, 2018 1 次提交
    • T
      ALSA: hda/hdmi: Use single mutex unlock in error paths · f69548ff
      Takashi Iwai 提交于
      Instead of calling mutex_unlock() at each error path multiple times,
      take the standard goto-and-a-single-unlock approach.  This will
      simplify the code and make easier to find the unbalanced mutex locks.
      
      No functional changes, but only the code readability improvement as a
      preliminary work for further changes.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      f69548ff
  2. 18 7月, 2018 3 次提交
    • T
      ALSA: hda: Make audio component support more generic · a57942bf
      Takashi Iwai 提交于
      This is the final step for more generic support of DRM audio
      component.  The generic audio component code is now moved to its own
      file, and the symbols are renamed from snd_hac_i915_* to
      snd_hdac_acomp_*, respectively.  The generic code is enabled via the
      new kconfig, CONFIG_SND_HDA_COMPONENT, while CONFIG_SND_HDA_I915 is
      kept as the super-class.
      
      Along with the split, three new callbacks are added to audio_ops:
      pin2port is for providing the conversion between the pin number and
      the widget id, and master_bind/master_unbin are called at binding /
      unbinding the master component, respectively.  All these are optional,
      but used in i915 implementation and also other later implementations.
      
      A note about the new snd_hdac_acomp_init() function: there is a slight
      difference between this and the old snd_hdac_i915_init().  The latter
      (still) synchronizes with the master component binding, i.e. it
      assures that the relevant DRM component gets bound when it returns, or
      gives a negative error.  Meanwhile the new function doesn't
      synchronize but just leaves as is.  It's the responsibility by the
      caller's side to synchronize, or the caller may accept the
      asynchronous binding on the fly.
      
      v1->v2: Fix missing NULL check in master_bind/unbind
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      a57942bf
    • T
      ALSA: hda/i915: Associate audio component with devres · 82887c0b
      Takashi Iwai 提交于
      The HD-audio i915 binding code contains a single pointer, hdac_acomp,
      for allowing the access to audio component from the master bind/unbind
      callbacks.  This was needed because the callbacks pass only the device
      pointer and we can't guarantee the object type assigned to the drvdata
      (which is free for each controller driver implementation).
      And this implementation will be a problem if we support multiple
      components for different DRM drivers, not only i915.
      
      As a solution, allocate the audio component object via devres and
      associate it with the given device, so that the component callbacks
      can refer to it via devres_find().
      
      The removal of the object is still done half-manually via
      devres_destroy() to make the code consistent (although it may work
      without the explicit call).
      
      Also, the snd_hda_i915_register_notifier() had the reference to
      hdac_acomp as well.  In this patch, the corresponding code is removed
      by passing hdac_bus object to the function, too.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      82887c0b
    • T
      drm/i915: Split audio component to a generic type · ae891abe
      Takashi Iwai 提交于
      For allowing other drivers to use the DRM audio component, rename the
      i915_audio_component_* with drm_audio_component_*, and split the
      generic part into drm_audio_component.h.  The i915 specific stuff
      remains in struct i915_audio_component, which contains
      drm_audio_component as the base.
      
      The license of drm_audio_component.h is kept to MIT as same as the the
      original i915_component.h.
      
      This is a preliminary change for further development, and no
      functional changes by this patch itself, merely code-split and
      renames.
      
      v1->v2: Use SPDX for drm_audio_component.h, fix remaining i915
              argument in drm_audio_component.h
      Reviewed-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      ae891abe
  3. 02 7月, 2018 1 次提交
    • C
      ALSA: hda - Handle pm failure during hotplug · aaa23f86
      Chris Wilson 提交于
      Obtaining the runtime pm wakeref can fail, especially in a hotplug
      scenario where i915.ko has been unloaded. If we do not catch the
      failure, we end up with an unbalanced pm.
      
      v2 additions by tiwai:
      hdmi_present_sense() checks the return value and handle only a
      negative error case and bails out only if it's really still suspended.
      Also, snd_hda_power_down() is called at the error path so that the
      refcount is balanced.
      
      Along with it, the spec->pcm_lock is taken outside
      hdmi_present_sense() in the caller side, so that it won't cause
      deadlock at reentrace via runtime resume.
      
      v3 fix by tiwai:
      Missing linux/pm_runtime.h is included.
      
      References: 222bde03 ("ALSA: hda - Fix mutex deadlock at HDMI/DP hotplug")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      aaa23f86
  4. 28 6月, 2018 2 次提交
    • T
      ALSA: hda/hdmi - Don't fall back to generic when i915 binding fails · fdd49c51
      Takashi Iwai 提交于
      When i915 component binding fails, it means that HDMI isn't applicable
      anyway.  Although the probe with the generic HDMI parser would still
      work, it's essentially useless, hence better to be left unbound.
      
      This patch mimics the probe_id field at failing the i915 component
      binding so that the generic HDMI won't be bound after that.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      fdd49c51
    • T
      ALSA: hda - Move in_pm accessors to HDA core · feb20fae
      Takashi Iwai 提交于
      The in_pm atomic in hdac_device is an important field used as a flag
      as well as a refcount for PM.  The existing snd_hdac_power_up/down
      helpers already refer to it in the HD-audio core code, while the code
      to actually setting the value (atomic_inc() / _dec()) is open-coded in
      HDA legacy side, which is hard to find.
      
      This patch adds the helper functions to set/reset the in_pm counter to
      HDA core and use them in HDA legacy side, for making it clearer who /
      where the PM is managed.
      
      There is no functional changes, just code refactoring.
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      feb20fae
  5. 21 6月, 2018 1 次提交
  6. 28 5月, 2018 1 次提交
  7. 25 4月, 2018 1 次提交
    • T
      ALSA: hda - Skip jack and others for non-existing PCM streams · 8a7d6003
      Takashi Iwai 提交于
      When CONFIG_SND_DYNAMIC_MINORS isn't set, there are only limited
      number of devices available, and HD-audio, especially with HDMI/DP
      codec, will fail to create more than two devices.
      
      The driver warns about the lack of such devices and skips the PCM
      device creations, but the HDMI driver still tries to create the
      corresponding JACK, SPDIF and ELD controls even for the non-existing
      PCM substreams.  This results in confusion on user-space, and even may
      break the operation.
      
      Similarly, Intel HDMI/DP codec builds the ELD notification from i915
      graphics driver, and this may be broken if a notification is sent for
      the non-existing PCM stream.
      
      This patch adds the check of the existence of the assigned PCM
      substream in the both scenarios above, and skips the further operation
      if the PCM substream is not assigned.
      
      Fixes: 9152085d ("ALSA: hda - add DP MST audio support")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      8a7d6003
  8. 07 12月, 2017 1 次提交
  9. 20 9月, 2017 1 次提交
  10. 03 9月, 2017 1 次提交
    • W
      ALSA: hda: Fix regression of hdmi eld control created based on invalid pcm · 1f7f51a6
      Wang YanQing 提交于
      Commit fb087eaa ("ALSA: hda - hdmi eld control created based on pcm")
      forget to filter out invalid pcm numbers, if there is only one invalid pcm
      number, then this issue causes we create eld control for invalid pcm silently,
      but when there are more than one invalid pcm numbers, then this issue bring
      probe error looks like below dmesg:
      "
      kernel: [    1.647283] snd_hda_intel 0000:00:03.0: bound 0000:00:02.0 (ops 0xc2967540)
      kernel: [    1.651192] snd_hda_intel 0000:00:03.0: Too many HDMI devices
      kernel: [    1.651195] snd_hda_intel 0000:00:03.0: Consider building the kernel with CONFIG_SND_DYNAMIC_MINORS=y
      kernel: [    1.651197] snd_hda_intel 0000:00:03.0: Too many HDMI devices
      kernel: [    1.651199] snd_hda_intel 0000:00:03.0: Consider building the kernel with CONFIG_SND_DYNAMIC_MINORS=y
      kernel: [    1.651201] snd_hda_intel 0000:00:03.0: Too many HDMI devices
      kernel: [    1.651203] snd_hda_intel 0000:00:03.0: Consider building the kernel with CONFIG_SND_DYNAMIC_MINORS=y
      kernel: [    1.651676] snd_hda_intel 0000:00:03.0: control 3:0:0:ELD:0 is already present
      kernel: [    1.651787] snd_hda_codec_hdmi: probe of hdaudioC0D0 failed with error -16
      "
      
      This patch add invalid pcm number filter before calling hdmi_create_eld_ctl.
      
      Fixes: fb087eaa ("ALSA: hda - hdmi eld control created based on pcm")
      Signed-off-by: NWang YanQing <udknight@gmail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      1f7f51a6
  11. 15 7月, 2017 1 次提交
  12. 13 7月, 2017 1 次提交
  13. 28 6月, 2017 2 次提交
  14. 09 6月, 2017 1 次提交
  15. 13 4月, 2017 1 次提交
  16. 28 2月, 2017 1 次提交
  17. 22 2月, 2017 1 次提交
    • B
      ALSA: pci: constify snd_kcontrol_new structures · f3b827e0
      Bhumika Goyal 提交于
      Declare snd_kcontrol_new structures as const as they are only passed as
      an argument to the function snd_ctl_new1. This argument is of type
      const, so snd_kcontrol_new structures having the same property can be
      made const too.
      Done using Coccinelle:
      
      @r1 disable optional_qualifier @
      identifier i;
      position p;
      @@
      static struct snd_kcontrol_new i@p = {...};
      
      @ok1@
      identifier r1.i;
      position p;
      expression e1;
      @@
      snd_ctl_new1(&i@p,e1)
      
      @bad@
      position p!={r1.p,ok1.p};
      identifier r1.i;
      @@
      i@p
      
      @depends on !bad disable optional_qualifier@
      identifier r1.i;
      @@
      +const
      struct snd_kcontrol_new i;
      Signed-off-by: NBhumika Goyal <bhumirks@gmail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      f3b827e0
  18. 09 2月, 2017 1 次提交
  19. 12 1月, 2017 1 次提交
  20. 23 9月, 2016 1 次提交
    • P
      drm/i915/dp: DP audio API changes for MST · f9318941
      Pandiyan, Dhinakaran 提交于
      DP MST provides the capability to send multiple video and audio streams
      through a single port. This requires the API's between i915 and audio
      drivers to distinguish between multiple audio capable displays that can be
      connected to a port. Currently only the port identity is shared in the
      APIs. This patch adds support for MST with an additional parameter
      'int pipe'. The existing parameter 'port' does not change it's meaning.
      
      pipe =
      	MST	: display pipe that the stream originates from
      	Non-MST	: -1
      
      Affected APIs:
      struct i915_audio_component_ops
      -       int (*sync_audio_rate)(struct device *, int port, int rate);
      +	int (*sync_audio_rate)(struct device *, int port, int pipe,
      +	     int rate);
      
      -       int (*get_eld)(struct device *, int port, bool *enabled,
      -                       unsigned char *buf, int max_bytes);
      +       int (*get_eld)(struct device *, int port, int pipe,
      +		       bool *enabled, unsigned char *buf, int max_bytes);
      
      struct i915_audio_component_audio_ops
      -       void (*pin_eld_notify)(void *audio_ptr, int port);
      +       void (*pin_eld_notify)(void *audio_ptr, int port, int pipe);
      
      This patch makes dummy changes in the audio drivers (thanks Libin) for
      build to succeed. The audio side drivers will send the right 'pipe' values
      for MST in patches that will follow.
      
      v2:
      Renamed the new API parameter from 'dev_id' to 'pipe'. (Jim, Ville)
      Included Asoc driver API compatibility changes from Jeeja.
      Added WARN_ON() for invalid pipe in get_saved_encoder(). (Takashi)
      Added comment for av_enc_map[] definition. (Takashi)
      
      v3:
      Fixed logic error introduced while renaming 'dev_id' as 'pipe' (Ville)
      Renamed get_saved_encoder() to get_saved_enc() to reduce line length
      
      v4:
      Rebased.
      Parameter check for pipe < -1 values in get_saved_enc() (Ville)
      Switched to for_each_pipe() in get_saved_enc() (Ville)
      Renamed 'pipe' to 'dev_id' in audio side code (Takashi)
      
      v5:
      Included a comment for the dev_id arg. (Libin)
      Signed-off-by: NDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Reviewed-by: NTakashi Iwai <tiwai@suse.de>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1474488168-2343-1-git-send-email-dhinakaran.pandiyan@intel.com
      f9318941
  21. 16 6月, 2016 1 次提交
  22. 11 5月, 2016 1 次提交
    • T
      ALSA: hda - Fix regression on ATI HDMI audio · 39669225
      Takashi Iwai 提交于
      The HDMI/DP audio output on ATI/AMD chips got broken due to the recent
      restructuring of chmap.  Fortunately, Daniel Exner could bisect, and
      pointed the culprit commit [739ffee9: ALSA: hda - Add hdmi chmap
      verb programming ops to chmap object].
      
      This commit moved some ops from hdmi_ops to chmap_ops, and reassigned
      the ops in the embedded chmap object in hdmi_spec instead.
      Unfortunately, the reassignment of these ops in patch_atihdmi() were
      moved into an if block that is performed only for old chips.  Thus, on
      newer chips, the generic ops is still used, which doesn't work for
      such ATI/AMD chips.
      
      This patch addresses the regression, simply by moving the assignment
      of chmap ops to the right place.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=114981
      Fixes: 739ffee9 ('ALSA: hda - Add hdmi chmap verb programming ops to chmap object')
      Reported-and-tested-by: NDaniel Exner <dex@dragonslave.de>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      39669225
  23. 26 4月, 2016 1 次提交
    • T
      ALSA: hda - Update BCLK also at hotplug for i915 HSW/BDW · bb03ed21
      Takashi Iwai 提交于
      The recent bug report suggests that BCLK setup for i915 HSW/BDW needs
      to be updated at each HDMI hotplug, not only at initialization and
      resume.  That is, we need to update HSW_EM4 and HSW_EM5 registers at
      ELD notification, too.  Otherwise the HDMI audio may be out of sync
      and played in a wrong pitch.
      
      However, the HDA codec driver has no access to the controller
      registers, and currently the code managing these registers is in
      hda_intel.c, i.e. local to the controller driver.  For allowing the
      explicit BCLK update from the codec driver, as in this patch, the
      former haswell_set_bclk() in hda_intel.c is moved to hdac_i915.c and
      exposed as snd_hdac_i915_set_bclk().  This is called from both the HDA
      controller driver and intel_pin_eld_notify() in HDMI codec driver.
      
      Along with this change, snd_hdac_get_display_clk() gets dropped as
      it's no longer used.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91410
      Cc: <stable@vger.kernel.org> # v4.5+
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      bb03ed21
  24. 18 4月, 2016 1 次提交
  25. 13 4月, 2016 2 次提交
    • T
      ALSA: hda - Fix inconsistent monitor_present state until repoll · c44da62b
      Takashi Iwai 提交于
      While the previous commit fixed the missing monitor_present flag
      update, it may be still in an inconsistent state while the driver
      repolls: the flag itself is updated, but the eld_valid flag and the
      contents don't follow until the repoll finishes (and may be repeated
      for a few times).
      
      The basic problem is that pin_eld->monitor_present is updated in the
      caller side.  This should have been updated only in update_eld().  So,
      the proper fix is to avoid accessing pin_eld but only spec->temp_eld.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      c44da62b
    • H
      ALSA: hda - Fix regression of monitor_present flag in eld proc file · 023d8218
      Hyungwon Hwang 提交于
      The commit [bd481285: ALSA: hda - Fix forgotten HDMI
      monitor_present update] covered the missing update of monitor_present
      flag, but this caused a regression for devices without the i915 eld
      notifier.  Since the old code supposed that pin_eld->monitor_present
      was updated by the caller side, the hdmi_present_sense_via_verbs()
      doesn't update the temporary eld->monitor_present but only
      pin_eld->monitor_present, which is now overridden in update_eld().
      
      The fix is to update pin_eld->monitor_present as well before calling
      update_eld().
      
      Note that this may still leave monitor_present flag in an inconsistent
      state when the driver repolls, but this is at least the old behavior.
      More proper fix will follow in the later patch.
      
      Fixes: bd481285 ('ALSA: hda - Fix forgotten HDMI monitor_present update')
      Signed-off-by: NHyungwon Hwang <hyungwon.hwang7@gmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      023d8218
  26. 04 4月, 2016 1 次提交
    • S
      ALSA: hda - Update chmap tlv to report sink's capability · 44fde3b8
      Subhransu S. Prusty 提交于
      The existing TLV callback implementation copies all of the
      cea_channel_speaker_allocation map table to the TLV container
      irrespective of what is reported by sink. This is of little use
      to the userspace application.
      
      With this patch, it parses the spk_alloc block as queried from
      the ELD, and copies only the corresponding mapping channel
      allocation entries from the cea channel speaker allocation table.
      Thus the user can parse the TLV container to identify sink's
      capability and set the channel map accordingly.
      
      It shouldn't impact the behavior in AMD chipset, as this makes
      use of already parsed spk alloc block to calculate the channel
      map.
      Signed-off-by: NSubhransu S. Prusty <subhransu.s.prusty@intel.com>
      Signed-off-by: NVinod Koul <vinod.koul@intel.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      44fde3b8
  27. 28 3月, 2016 7 次提交
    • T
      ALSA: hda - Enable i915 ELD notifier for Intel IronLake and Baytrail · 7ff652ff
      Takashi Iwai 提交于
      Since we have the fixed pin-port mapping for Intel IronLake (IbexPeak)
      and Baytrail (ValleyView) platforms in the code side, now it's time to
      add the support in the codec driver side.  This patch simply enables
      the i915 ELD notifier for these in addition with the fix of the
      mapping from the port to NID in the callback.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      7ff652ff
    • T
      ALSA: hda - Add the pin / port mapping on Intel ILK and VLV · d745f5e7
      Takashi Iwai 提交于
      Intel IronLake and ValleyView platforms have different HDMI widget pin
      and digital port mapping from other newer ones.  The recent ones
      (HSW+) have NID 0x05 to 0x07 for port B to port D, while these chips
      have NID 0x04 to 0x06.
      
      For adapting this mapping, pass the codec object instead of the bus
      object to snd_hdac_sync_audio_rate() and snd_hdac_acomp_get_eld() so
      that they can check the codec ID and calculate the mapping properly.
      
      The changes in the HDMI codec driver side will follow in the later
      patch.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      d745f5e7
    • T
      ALSA: hda - Use eld notifier for Intel SandyBridge and IvyBridge HDMI/DP · e85015a3
      Takashi Iwai 提交于
      Intel SandyBridge and IvyBridge (CougarPoint and PantherPoint
      platforms) have also the same digital port vs audio widget mapping
      (from port B = NID 0x05 to port D = NID 0x07) as Haswell & co.
      So, we can reuse the existing functions for HSW+ for these platforms
      without changing there, but just by re-adding the on-demand i915
      binding in HDMI codec driver.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      e85015a3
    • T
      ALSA: hda - Introduce pin_cvt_fixup() ops to hdmi parser · 4846a67e
      Takashi Iwai 提交于
      For reducing the splat of is_haswell_plus() or such macros, this patch
      introduces pin_cvt_fixup() ops to hdmi_spec.  For HSW+ and VLV+
      codecs, set this ops so that the driver can call the Intel-specific
      workarounds appropriately.
      
      A gratis bonus that we can remove the mux_id argument from
      hdmi_choose_cvt(), too, since the fixup function always refers the
      mux_idx from the given per_pin object.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      4846a67e
    • T
      ALSA: hda - Override HDMI setup_stream ops for Intel HSW+ · 2c1c9b86
      Takashi Iwai 提交于
      Instead of checking at each time with is_haswell_plus() macro,
      override the setup_stream ops itself for HSW+ chips.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      2c1c9b86
    • T
      ALSA: hda - Apply AMP fix in hdmi_setup_audio_infoframe() generically · 44bb6d0c
      Takashi Iwai 提交于
      The need for reprogramming the AMP mute bit at each audio info frame
      setup isn't always specific to Intel chips.  It's safer to set it
      generically for all codecs with the amp bit, as this verb execution
      itself isn't too much load.  This eliminates one usage of
      is_haswell_plus() macro, after all.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      44bb6d0c
    • T
      ALSA: hda - Split out Intel-specific codes from patch_generic_hdmi() · a686632f
      Takashi Iwai 提交于
      We have too many Intel-specific codes in patch_hdmi_generic() despite
      its function name.  And this makes it difficult to adjust per chipset,
      e.g. for allowing the audio notifier on an old chipset, one would need
      to add an explicit if() check.
      
      This patch attempts some code refactoring and cleanups in this regard;
      the Intel-specific codes are moved out of patch_generic_hdmi() into
      the new functions, patch_i915_hsw_hdmi() and patch_i915_byt_hdmi(),
      depending on the chipset.  The other old Intel chipsets keep using
      patch_generic_hdmi() without Intel hacks.  The existing
      patch_generic_hdmi() is also split to a few components so that they
      can be called from the Intel codec parsers.
      
      There are still many is_haswell*() and is_valleyview*() macro usages
      in the code.  They will be cleaned up later.  For the time being, only
      the entry are concerned.
      
      Along with this change, the i915_bound flag and the on-demand i915
      component binding have been removed as a cleanup, since there is no
      user at this moment.  This will be added back later once when Cougar
      Point and else start using the i915 eld notifier.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      a686632f
  28. 21 3月, 2016 1 次提交
  29. 20 3月, 2016 1 次提交
    • T
      ALSA: hda - Workaround for unbalanced i915 power refcount by concurrent probe · 7169701a
      Takashi Iwai 提交于
      The recent addition of on-demand i915 audio component binding in the
      codec driver seems leading to the unbalanced i915 power refcount,
      according to Intel CI tests.  Typically, it gets a kernel WARNING
      like:
        WARNING: CPU: 3 PID: 173 at sound/hda/hdac_i915.c:91 snd_hdac_display_power+0xf1/0x110 [snd_hda_core]()
        Call Trace:
         [<ffffffff813fef15>] dump_stack+0x67/0x92
         [<ffffffff81078a21>] warn_slowpath_common+0x81/0xc0
         [<ffffffff81078b15>] warn_slowpath_null+0x15/0x20
         [<ffffffffa00f77e1>] snd_hdac_display_power+0xf1/0x110 [snd_hda_core]
         [<ffffffffa015039d>] azx_intel_link_power+0xd/0x10 [snd_hda_intel]
         [<ffffffffa011e32a>] azx_link_power+0x1a/0x30 [snd_hda_codec]
         [<ffffffffa00f21f9>] snd_hdac_link_power+0x29/0x40 [snd_hda_core]
         [<ffffffffa01192a6>] hda_codec_runtime_suspend+0x76/0xa0 [snd_hda_codec]
         .....
      
      The scenario is like below:
      - HD-audio driver and i915 driver are probed concurrently at the
        (almost) same time; HDA bus tries to bind with i915, but it fails
        because i915 initialization is still being processed.
      - Later on, HD-audio probes the HDMI codec, where it again tries to
        bind with i915.  At this time, it succeeds.
      - At finishing the probe of HDA, it decreases the refcount as if it
        were already bound at the bus probe, since the component is bound
        now.  This triggers a kernel WARNING due to the unbalance.
      
      As a workaround, in this patch, we just disable the on-demand i915
      component binding in the codec driver.  This essentially reverts back
      to the state of 4.4 kernel.
      
      We know that this is no real solution, but it's a minimalistic simple
      change that can be applied to 4.5.x kernel as stable.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94566Reported-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Cc: <stable@vger.kernel.org> # v4.5
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      7169701a