1. 28 Nov, 2013 1 commit
    • Takashi Iwai's avatar
      ALSA: hda - Check leaf nodes to find aamix amps · 2ded3e5b
      Takashi Iwai authored
      The current generic parser assumes blindly that the volume and mute
      amps are found in the aamix node itself.  But on some codecs,
      typically Analog Devices ones, the aamix amps are separately
      implemented in each leaf node of the aamix node, and the current
      driver can't establish the correct amp controls.  This is a regression
      compared with the previous static quirks.
      This patch extends the search for the amps to the leaf nodes for
      allowing the aamix controls again on such codecs.
      In this implementation, I didn't code to loop through the whole paths,
      since usually one depth should suffice, and we can't search too
      deeply, as it may result in the conflicting control assignments.
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=65641
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  2. 27 Nov, 2013 2 commits
    • Takashi Iwai's avatar
      ALSA: hda - Fix hp-mic mode without VREF bits · 16c0cefe
      Takashi Iwai authored
      When the hp mic pin has no VREF bits, the driver forgot to set PIN_IN
      bit.  Spotted during debugging old MacBook Airs.
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=65681
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    • Takashi Iwai's avatar
      ALSA: hda - Create Headhpone Mic Jack Mode when really needed · ced4cefc
      Takashi Iwai authored
      When a headphone jack is configurable as input, the generic parser
      tries to make it retaskable as Headphone Mic.  The switching can be
      done smoothly if Capture Source control exists (i.e. there is another
      input source).  Or when user explicitly enables the creation of jack
      mode controls, "Headhpone Mic Jack Mode" will be created accordingly.
      However, if the headphone mic is the only input source, we have to
      create "Headphone Mic Jack Mode" control because there is no capture
      source selection.  Otherwise, the generic parser assumes that the
      input is constantly enabled, thus the headphone is permanently set
      as input.  This situation happens on the old MacBook Airs where no
      input is supported properly, for example.
      This patch fixes the problem: now "Headphone Mic Jack Mode" is created
      when such an input selection isn't possible.
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=65681
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  3. 12 Nov, 2013 1 commit
    • Takashi Iwai's avatar
      ALSA: hda - Check keep_eapd_on before inv_eapd · 468ac413
      Takashi Iwai authored
      We don't change the EAPD bit in set_pin_eapd() if keep_eapd_on flag is
      set by the codec driver and enable is false.  But, we also apply the
      flipping of enable value according to inv_eapd flag in the same
      function, and this confused the former check, handled as if it's
      turned ON.  The inverted EAPD check must be applied after keep_eapd_on
      check, instead.
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  4. 05 Nov, 2013 1 commit
  5. 25 Oct, 2013 1 commit
    • Takashi Iwai's avatar
      ALSA: hda - Add missing initial vmaster hook at build_controls callback · b63eae0a
      Takashi Iwai authored
      The generic parser has a support of vmaster hook, but this is
      initialized only in the init callback with the check of the presence
      of the corresponding kctl.  However, since kctl is NULL at the very
      first init callback that is called before build_controls callback, the
      vmaster hook sync is skipped there.  Eventually this leads to the
      uninitialized state depending on the hook implementation.
      This patch adds a simple workaround, just calling the sync function
      explicitly at build_controls callback.
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  6. 14 Oct, 2013 1 commit
  7. 13 Aug, 2013 2 commits
  8. 12 Aug, 2013 1 commit
  9. 29 Jul, 2013 1 commit
    • Takashi Iwai's avatar
      ALSA: hda - Fix invalid multi-io creation on VAIO-Z laptops · da96fb5b
      Takashi Iwai authored
      VAIO-Z laptops need to use the specific DAC for the speaker output
      by some unknown reason although the codec itself supports the flexible
      connection.  So we implemented a workaround by a new flag,
      no_primary_hp, for assigning the speaker pin first.
      This worked until 3.8 kernel, but it got broken because the driver
      learned for a better multi-io pin mapping, and not it can assign two
      mic pins for multi-io.  Since the multi-io requires to be the primary
      output, the hp and two mic pins are assigned in prior to the speaker
      in the end.
      Although the machine has two mic pins, one of them is used as a noise-
      canceling headphone, thus it's no real retaskable mic jack.  Thus, at
      best, we can disable the multi-io assignment and make the parser
      behavior back to the state before the multi-io.
      This patch adds again a new flag, no_multi_io, to indicate that the
      device has no multi-io capability, and set it in the fixup for
      VAIO-Z.  The no_multi_io flag itself can be used generically, added
      via a helper line, too.
      Reported-by: default avatarTormen <my.nl.abos@gmail.com>
      Reported-by: default avatarAdam Williamson <awilliam@redhat.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  10. 21 Jul, 2013 1 commit
    • Takashi Iwai's avatar
      ALSA: hda - Add snd_hda_jack_detect_state() helper function · 60ea8ca2
      Takashi Iwai authored
      snd_hda_jack_detect() function returns a boolean value for a jack
      plugged in or not, but it also returns always true when the
      corresponding pin is phantom (i.e. fixed).  This is OK in most cases,
      but it makes the generic parser misbehaving about the auto-mute or
      auto-mic switching, e.g. when one of headphone pins is a fixed.
      Namely, the driver decides whether to mute the speaker or not, just
      depending on the headphone plug state: if one of the headphone jacks
      is seen as active, then the speaker is muted.  Thus this will result
      always in the muted speaker output.
      So, the problem is the function returns a boolean, after all, although
      we need to think of "phantom" jack.  Now a new function,
      snd_hda_jack_detect_state() is introduced to return these tristates.
      The generic parser uses this function for checking the headphone or
      mic jack states.
      Meanwhile, the behavior of snd_hda_jack_detect() is kept as is, for
      keeping compatibility in other driver codes.
      Acked-by: default avatarDavid Henningsson <david.henningsson@canonical.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  11. 28 Jun, 2013 2 commits
  12. 25 Jun, 2013 1 commit
    • Takashi Iwai's avatar
      ALSA: hda - Add auto_mute_via_amp flag to generic parser · 7eebffd3
      Takashi Iwai authored
      Add a new flag, auto_mute_via_amp, to determine the behavior of the
      headphone / line-out auto-mute.  When this flag is set, the generic
      driver mutes the speaker and line outputs via the amp mute of each
      pin, instead of changing the pin control values.
      This is introduced for devices that don't work expectedly with the pin
      control values; for example, some devices are known to keep enabling
      the speaker outputs no matter which pin control values are set on the
      speaker pins.
      The driver doesn't check actually whether the pins have the output amp
      caps, but assumes that the proper mixer (mute) controls are created on
      all these pins.  If not the case, you can't use this flag for your
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  13. 03 Jun, 2013 3 commits
    • Takashi Iwai's avatar
      ALSA: hda/via - Clean up duplicated codes · 963afde9
      Takashi Iwai authored
      The previous commit was written in the way to make the backport to
      3.9.y easier, and left the duplicated open codes intentionally.
      Now let's clean up the duplicated codes.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    • Takashi Iwai's avatar
      ALSA: hda - Add keep_eapd_on flag to generic parser · 05909d5c
      Takashi Iwai authored
      VT1802 codec seems to reset EAPD of other pins in the hardware level,
      and this was another reason of the silent headphone output on some
      machines.  As a workaround, introduce a new flag indicating to keep
      the EPAD on to the generic parser, and set it in patch_via.c.
      Reported-by: default avatarAlex Riesen <raa.lkml@gmail.com>
      Cc: <stable@vger.kernel.org> [v3.9]
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    • Takashi Iwai's avatar
      ALSA: hda - Allow setting automute/automic hooks after parsing · 77afe0e9
      Takashi Iwai authored
      Some codec drivers (VIA codecs and some Realtek fixups) set the
      automute and automic hooks after calling
      snd_hda_gen_parse_auto_config().  In the current code, the hook
      pointers are referred only in snd_hda_gen_parse_auto_config() and
      passed to snd_hda_jack_detect_enable_callback(), thus changing the
      hook values won't change the actually called callbacks properly.
      This patch fixes this bug by setting the static functions as the
      primary callback functions for the jack detection, and let them
      calling the appropriate hooks dynamically.
      Cc: <stable@vger.kernel.org> [v3.9]
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  14. 16 May, 2013 1 commit
  15. 16 Apr, 2013 2 commits
    • Takashi Iwai's avatar
      ALSA: hda - Use the primary DAC for all aamix outputs · 5ead56f2
      Takashi Iwai authored
      When setting up the aamix output paths, use the primary DAC instead of
      the individual DAC for each output as default.  Otherwise multiple
      DACs will be turned on for a single aamix widget, which results in
      doubly or more volumes, because the duplicated signals will be sent
      through all these DACs for a single stream.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    • Takashi Iwai's avatar
      ALSA: hda - Fix aamix activation with loopback control on VIA codecs · 65033cc8
      Takashi Iwai authored
      When we have a loopback mixer control, this should manage the state
      whether the output paths include the aamix or not.  But the current
      code blindly initializes the output paths with aamix = true, thus the
      aamix is enabled unless the loopback mixer control is changed.
      Also, update_aamix_paths() called by the loopback mixer control put
      callback invokes snd_hda_activate_path() with aamix = true even for
      disabling the mixing.  This leaves the aamix path even though the
      loopback control is turned off.
      This patch fixes these issues:
      - Introduced aamix_default() helper to indicate whether with_aamix is
        true or false as default
      - Fix the argument in update_aamix_paths() for disabling loopback
      Reported-by: default avatarLydia Wang <LydiaWang@viatech.com.cn>
      Cc: <stable@vger.kernel.org> [v3.9+]
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  16. 11 Apr, 2013 2 commits
  17. 05 Apr, 2013 1 commit
  18. 22 Mar, 2013 2 commits
  19. 21 Mar, 2013 1 commit
    • Takashi Iwai's avatar
      ALSA: hda - Fix DAC assignment for independent HP · 55a63d4d
      Takashi Iwai authored
      The generic parser should evaluate the availability of the independent
      HP when specified.  Otherwise a DAC without the direct connection to
      the corresponding pin may be assigned for the HP, but the driver
      doesn't check it at all.  The problem was actually seen on some
      machines with VT1708s or equivalent codec, where DAC0 is assigned to
      HP although it can be connected only via aamix.
      This patch adds the badness evaluation for the independent HP to make
      it working properly.
      Reported-by: default avatarLydia Wang <LydiaWang@viatech.com.cn>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  20. 18 Mar, 2013 1 commit
  21. 11 Mar, 2013 1 commit
  22. 07 Mar, 2013 5 commits
  23. 13 Feb, 2013 1 commit
    • Takashi Iwai's avatar
      ALSA: hda - Increase badness for missing multi-io · 1d739066
      Takashi Iwai authored
      The current badness value used for the missing multi-io seems too
      weak, and the multi-io tends to be skipped for desktop configurations
      when no enough DACs are available.  It's because the total badness of
      the multi-io becomes often larger than the badness with assigning an
      individual DAC to a headphone jack.  This is good for one side, but it
      seems that the surround outputs are more demanded by that.
      This patch increases the badness value for the missing multi-io
      slightly so that the multi-io would be preferred than the individual
      headphone DAC if they conflict.  Through the tests with hda-emu,
      mostly only desktop configurations with ALC662/663 and CMI codecs are
      affected by this change, and all look reasonable.
      Reported-by: default avatarRaymond Yau <superquad.vortex2@gmail.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  24. 07 Feb, 2013 2 commits
  25. 25 Jan, 2013 1 commit
    • Takashi Iwai's avatar
      ALSA: Make snd_printd() and snd_printdd() inline · 86b27237
      Takashi Iwai authored
      Because currently snd_printd() and snd_printdd() macros are expanded
      to empty when CONFIG_SND_DEBUG=n, a compile warning like below
      appears sometimes, and we had to covert it by ugly ifdefs:
        sound/pci/hda/patch_sigmatel.c: In function ‘stac92hd71bxx_fixup_hp’:
        sound/pci/hda/patch_sigmatel.c:2434:24: warning: unused variable ‘spec’ [-Wunused-variable]
      For "fixing" these issues better, this patch replaces snd_printd() and
      snd_printdd() definitions with empty inline functions instead of
      macros.  This should have the same effect but shut up warnings like
      But since we had already put ifdefs, changing to inline functions
      would trigger compile errors.  So, such ifdefs is removed in this
      In addition, snd_pci_quirk name field is defined only when
      CONFIG_SND_DEBUG_VERBOSE is set, and the reference to it in
      snd_printdd() argument triggers the build errors, too.  For avoiding
      these errors, introduce a new macro snd_pci_quirk_name() that is
      defined no matter how the debug option is set.
      Reported-by: default avatarStratos Karafotis <stratosk@semaphore.gr>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
  26. 24 Jan, 2013 2 commits