1. 04 Apr, 2015 5 commits
  2. 27 Mar, 2015 1 commit
  3. 26 Mar, 2015 1 commit
    • Takashi Iwai's avatar
      ALSA: hda - Handle a few verbs as read-only · 8bc174e9
      Takashi Iwai authored
      Although they can be written, handle a few verbs as read-only in
      regmap interface: CONFIG_DEFAULT, CONV and CVT_CHAN_COUNT.  These are
      either updated in PCM or HDMI management code in a volatile manner, or
      just needed only as parameter, thus they don't need to be written at
      resume sync.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      8bc174e9
  4. 25 Mar, 2015 2 commits
    • W. Trevor King's avatar
      ALSA: hda/via - Add beep controls to VIA codecs · 4738465c
      W. Trevor King authored
      My codec has a beep-generating node:
      
        $ cat /proc/asound/card1/codec#0
        Codec: VIA VT1802
        ...
        Vendor Id: 0x11068446
        Subsystem Id: 0x15587410
        Revision Id: 0x100000
        ...
        Node 0x22 [Beep Generator Widget] wcaps 0x70040c: Mono Amp-Out
          Amp-Out caps: ofs=0x0a, nsteps=0x12, stepsize=0x05, mute=1
          Amp-Out vals:  [0x0a]
          Power states:  D0 D1 D2 D3
          Power: setting=D0, actual=D0
        ...
      
      But I was missing the:
      
        Control: name=...
      
      entries that I need to manage this widget from alsamixer.  With this
      patch (based on the similar Mono Amp-Out handling in
      patch_conexant.c), I get a new:
      
        input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/sound/card1/hdaudioC1D0/input15
      
      entry in dmesg and controls to manage that beep:
      
        $ cat /proc/asound/card1/codec#0 | grep -A5 Beep
        Node 0x22 [Beep Generator Widget] wcaps 0x70040c: Mono Amp-Out
          Control: name="Beep Playback Volume", index=0, device=0
            ControlAmp: chs=1, dir=Out, idx=0, ofs=0
          Control: name="Beep Playback Switch", index=0, device=0
            ControlAmp: chs=1, dir=Out, idx=0, ofs=0
          Amp-Out caps: ofs=0x0a, nsteps=0x12, stepsize=0x05, mute=1
          Amp-Out vals:  [0x12]
          Power states:  D0 D1 D2 D3
          Power: setting=D0, actual=D0
      
      [rebased and modified for the latest tree by tiwai]
      Signed-off-by: default avatarW. Trevor King <wking@tremily.us>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      4738465c
    • Takashi Iwai's avatar
      ALSA: hda - Remove superfluous hda_nid_t definition in hda_codec.h · 44e39b98
      Takashi Iwai authored
      Just forgotten to remove.  It's now in sound/hdaudio.h.
      Reported-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      44e39b98
  5. 24 Mar, 2015 2 commits
  6. 23 Mar, 2015 21 commits
    • Dan Carpenter's avatar
      ALSA: echoaudio: read past end of array · 77008b70
      Dan Carpenter authored
      We need to cap "ucontrol->id.index / num_busses_in(chip)" so the we
      don't read beyond the end of the array.
      
      I also adding a check on "in" and changing the type in
      snd_echo_mixer_put() from short to unsigned int. Those changes are done
      for symmetry and are cosmetic.
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      77008b70
    • Dan Carpenter's avatar
      ALSA: ak411x: simplify snd_ak4113_create() a bit · 034f90b3
      Dan Carpenter authored
      "err" is always a negative error code here, so there is no point in
      checking.  Removing the check silences a static checker warning and
      makes the code a bit more clear.  Also we don't need to initialize "err".
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      034f90b3
    • Takashi Iwai's avatar
      ALSA: hda - Add cache support for COEF read/write · 40ba66a7
      Takashi Iwai authored
      The 16bit COEF read/write is pretty standard for many codecs, and they
      can be cached in most cases -- more importantly, they need to be
      restored at resume.  For making this easier, add the cache support to
      regmap.  If the codec driver wants to cache the COEF access, set
      codec->cache_coef flag and issue AC_VERB_GET_PROC_COEF with the coef
      index in LSB 8 bits.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      40ba66a7
    • Takashi Iwai's avatar
      ALSA: hda - Handle get/set power verb symmetrically via regmap · 33f81940
      Takashi Iwai authored
      HD-audio has quite a few asymmetrical ways of accessing verbs, and one
      of typical ones is GET/SET_POWER_STATE verbs.  While it takes only the
      power state for setting, it returns a combination of states for
      getting.  For making the state handling simpler, this patch adds a
      code to translate the value returned from GET_POWER_STATE to return
      only the actual state or -1 for error.  In that way, the driver can
      simplify the power state management.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      33f81940
    • Takashi Iwai's avatar
      ALSA: hda - Add a fake stereo amp register support · d313e0a8
      Takashi Iwai authored
      HD-audio spec is inconvenient regarding the handling of stereo volume
      controls.  It can set and get only single channel at once (although
      there is a special option to set the same value to both channels).
      This patch provides a fake pseudo-register via the regmap access so
      that the stereo channels can be read and written by a single call.
      It'd be useful, for example, for implementing DAPM widgets.
      
      A stereo amp pseudo register consists of the encoding like the normal
      amp verbs but it has both SET_LEFT (bit 13) and SET_RIGHT (bit 12)
      bits set.  The regmap reads and writes a 16bit value for this pseudo
      register where the upper 8bit is for the right chanel and the lower
      8bit for the left channel.
      
      Note that the driver doesn't recognize conflicts when both stereo and
      mono channel registers are mixed.  Mixing them would certainly confuse
      the operation.  So, use carefully.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      d313e0a8
    • Takashi Iwai's avatar
      ALSA: hda - Use regmap for command verb caches, too · a551d914
      Takashi Iwai authored
      Like the previous patches, this patch converts also to the regmap, at
      this time, the cached verb writes are the target.  But this conversion
      needs a bit more caution than before.
      
      - In the old code, we just record any verbs as is, and restore them at
        resume.  For the regmap scheme, this doesn't work, since a few verbs
        like AMP or DIGI_CONVERT are asymmetrical.  Such verbs are converted
        either to the dedicated function (snd_hda_regmap_xxx_amp()) or
        changed to the unified verb.
      
      - Some verbs have to be declared as vendor-specific ones before
        accessing via regmap.
      
      Also, the minor optimization with codec->cached_write flag is dropped
      in a few places, as this would confuse the operation.  Further
      optimizations will be brought in the later patches, if any.
      
      This conversion ends up with a drop of significant amount of codes,
      mostly the helper codes that are no longer used.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      a551d914
    • Takashi Iwai's avatar
      ALSA: hda - Allow driver to add vendor-specific verbs for regmap · 5e56bcea
      Takashi Iwai authored
      Codecs may have own vendor-specific verbs, and we need to allow each
      driver to give such verbs for cached accesses.  Here a verb can be put
      into a single array and looked through it at readable and writeable
      callbacks.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      5e56bcea
    • Takashi Iwai's avatar
      ALSA: hda - Use regmap for parameter caches, too · faa75f8a
      Takashi Iwai authored
      The amp hash table was used for recording the cached reads of some
      capability values like pin caps or amp caps.  Now all these are moved
      to regmap as well.
      
      One addition to the regmap helper is codec->caps_overwriting flag.
      This is set in snd_hdac_override_parm(), and the regmap helper accepts
      any register while this flag is set, so that it can overwrite even the
      read-only verb like AC_VERB_PARAMETERS.  The flag is cleared
      immediately in snd_hdac_override_parm(), as it's a once-off flag.
      
      Along with these changes, the no longer needed amp hash and relevant
      fields are removed from hda_codec struct now.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      faa75f8a
    • Takashi Iwai's avatar
      ALSA: hda - Use regmap for amp accesses · eeecd9d1
      Takashi Iwai authored
      This patch converts the amp access functions to the regmap helpers.
      The amp values were formerly cached in the own hash table.  Now it's
      dropped by the regmap's cache.
      
      The only tricky conversion is snd_hda_codec_amp_init().  This function
      shouldn't do anything if the amp was already initialized.  For
      achieving this behavior, a value is read once at first temporarily in
      the cache-only mode.  Only if it returns an error,  i.e. the item
      still doesn't exist in the cache, it proceeds to the update.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      eeecd9d1
    • Takashi Iwai's avatar
      ALSA: hda - Implement uncached version of parameter reads · 9ba17b4d
      Takashi Iwai authored
      Sometimes we need the uncached reads, e.g. for refreshing the tree.
      This patch provides the helper function for that and uses it for
      refreshing widgets, reading subtrees and the whole proc reads.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      9ba17b4d
    • Takashi Iwai's avatar
      ALSA: hda - Use regmap for codec parameter reads · 01ed3c06
      Takashi Iwai authored
      Let's start converting the access functions to regmap.
      The first one is the simplest, just converting the codec parameter
      read helper function snd_hda_param_read().
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      01ed3c06
    • Takashi Iwai's avatar
      ALSA: hda - Add regmap support · 4d75faa0
      Takashi Iwai authored
      This patch adds an infrastructure to support regmap-based verb
      accesses.  Because o the asymmetric nature of HD-audio verbs,
      especially the amp verbs, we need to translate the verbs as a sort of
      pseudo registers to be mapped uniquely in regmap.
      
      In this patch, a pseudo register is built from the NID, the
      AC_VERB_GET_* and 8bit parameters, i.e. almost in the form to be sent
      to HD-audio bus but without codec address field.  OTOH, for writing,
      the same pseudo register is translated to AC_VERB_SET_* automatically.
      The AC_VERB_SET_AMP_* verb is re-encoded from the corresponding
      AC_VERB_GET_AMP_* verb and parameter at writing.
      
      Some verbs has a single command for read but multiple for writes.  A
      write for such a verb is split automatically to multiple verbs.
      
      The patch provides also a few handy helper functions.  They are
      designed to be accessible even without regmap.  When no regmap is set
      up (e.g. before the codec device instantiation), the direct hardware
      access is used.  Also, it tries to avoid the unnecessary power-up.
      The power up/down sequence is performed only on demand.
      
      The codec driver needs to call snd_hdac_regmap_exit() and
      snd_hdac_regmap_exit() at probe and remove if it wants the regmap
      access.
      
      There is one flag added to hdac_device.  When the flag lazy_cache is
      set, regmap helper ignores a write for a suspended device and returns
      as if it was actually written.  It reduces the hardware access pretty
      much, e.g. when adjusting the mixer volume while in idle.  This
      assumes that the driver will sync the cache later at resume properly,
      so use it carefully.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      4d75faa0
    • Takashi Iwai's avatar
      ALSA: hda - Move generic array helpers to core lib · 71fc4c7e
      Takashi Iwai authored
      This will be used by the regmap support.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      71fc4c7e
    • Takashi Iwai's avatar
      ALSA: hda - Re-add tracepoints to HD-audio core driver · e311782a
      Takashi Iwai authored
      Now let's take the basic tracepoints back to the HD-audio driver.
      The three bus tracepoints, hda_send_cmd, hda_get_response and
      hda_unsol_event are revived but in a slightly different form.
      Since we don't assign the card number there, print the bus device name
      instead.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      e311782a
    • Takashi Iwai's avatar
      ALSA: hda - Fix possible runtime PM refcount unbalance · c4c2533f
      Takashi Iwai authored
      When the driver is unloaded before the codec is bound, it still keeps
      the runtime PM refcount up, and results in the unbalance.  This patch
      covers these cases by introducing a flag indicating the runtime PM
      initialization and handling the codec registration procedure more
      properly.  It also fixes the missing input beep device as a gratis,
      too.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      c4c2533f
    • Takashi Iwai's avatar
      ALSA: hda - Support indirect execution of verbs · 05852448
      Takashi Iwai authored
      Add an overriding exec_verb op to struct hdac_device so that the call
      via snd_hdac_exec_verb() can switch to a different route depending on
      the setup.  The codec driver sets this field so that it can handle the
      errors or applying quirks appropriately.  Furthermore, this mechanism
      will be used for smooth transition for the regmap support in later
      patches.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      05852448
    • Takashi Iwai's avatar
      ALSA: hda - Add widget sysfs tree · 3256be65
      Takashi Iwai authored
      This patch changes the sysfs files assigned to the codec device on the
      bus which were formerly identical with hwdep sysfs files.  Now it
      shows only a few core parameter, vendor_id, subsystem_id, revision_id,
      afg, mfg, vendor_name and chip_name.
      
      In addition, now a widget tree is added to the bus device sysfs
      directory for showing the widget topology and attributes.  It's just a
      flat tree consisting of subdirectories named as the widget NID
      including various attributes like widget capability bits.  The AFG
      (usually NID 0x01) is always found there, and it contains always
      amp_in_caps, amp_out_caps and power_caps files.  Each of these
      attributes show a single value.  The rest are the widget nodes
      belonging to that AFG.  Note that the child node might not start from
      0x02 but from another value like 0x0a.
      
      Each child node may contain caps, pin_caps, amp_in_caps, amp_out_caps,
      power_caps and connections files.  The caps (representing the widget
      capability bits) always contain a value.  The rest may contain
      value(s) if the attribute exists on the node.  Only connections file
      show multiple values while other attributes have zero or one single
      value.
      
      An example of ls -R output is like below:
      % ls -R /sys/bus/hdaudio/devices/hdaudioC0D0/
      /sys/bus/hdaudio/devices/hdaudioC0D0/widgets/:
      01/  04/  07/  0a/  0d/  10/  13/  16/  19/  1c/  1f/  22/
      02/  05/  08/  0b/  0e/  11/  14/  17/  1a/  1d/  20/  23/
      03/  06/  09/  0c/  0f/  12/  15/  18/  1b/  1e/  21/
      
      /sys/bus/hdaudio/devices/hdaudioC0D0/widgets/01:
      amp_in_caps  amp_out_caps  power_caps
      
      /sys/bus/hdaudio/devices/hdaudioC0D0/widgets/02:
      amp_in_caps  amp_out_caps  caps  connections  pin_caps  pin_cfg
      power_caps
      
      /sys/bus/hdaudio/devices/hdaudioC0D0/widgets/03:
      .....
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      3256be65
    • Takashi Iwai's avatar
      ALSA: hda - Move a part of hda_codec stuff into hdac_device · 7639a06c
      Takashi Iwai authored
      Now some codes and functionalities of hda_codec struct are moved to
      hdac_device struct.  A few basic attributes like the codec address,
      vendor ID number, FG numbers, etc are moved to hdac_device, and they
      are accessed like codec->core.addr.  The basic verb exec functions are
      moved, too.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      7639a06c
    • Takashi Iwai's avatar
      ALSA: hda - Move some codes up to hdac_bus struct · d068ebc2
      Takashi Iwai authored
      A few basic codes for communicating over HD-audio bus are moved to
      struct hdac_bus now.  It has only command and get_response ops in
      addition to the unsolicited event handling.
      
      Note that the codec-side tracing support is disabled temporarily
      during this transition due to the code shuffling.  It will be
      re-enabled later once when all pieces are settled down.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      d068ebc2
    • Takashi Iwai's avatar
      ALSA: hda - Make snd_hda_bus_type public · e3d280fc
      Takashi Iwai authored
      Define the common hd-audio driver and device types to bind over
      snd_hda_bus_type publicly.  This allows to implement other type of
      device and driver code over hd-audio bus.
      
      Now both struct hda_codec and struct hda_codec_driver inherit these
      new struct hdac_device and struct hdac_driver, respectively.
      
      The bus registration is done in subsys_initcall() to assure it
      before any other driver registrations.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      e3d280fc
    • Takashi Iwai's avatar
      Merge branch 'for-next' into topic/hda-core · 3372dbdd
      Takashi Iwai authored
      3372dbdd
  7. 22 Mar, 2015 7 commits
  8. 21 Mar, 2015 1 commit