1. 22 10月, 2014 4 次提交
  2. 07 10月, 2014 1 次提交
    • D
      ASoC: soc-dapm: fix use after free · e5092c96
      Daniel Mack 提交于
      Coverity spotted the following possible use-after-free condition in
      dapm_create_or_share_mixmux_kcontrol():
      
      If kcontrol is NULL, and (wname_in_long_name && kcname_in_long_name)
      validates to true, 'name' will be set to an allocated string, and be
      freed a few lines later via the 'long_name' alias. 'name', however,
      is used by dev_err() in case snd_ctl_add() fails.
      
      Fix this by adding a jump label that frees 'long_name' at the end of
      the function.
      Signed-off-by: NDaniel Mack <daniel@zonque.org>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      Cc: stable@vger.kernel.org
      e5092c96
  3. 03 10月, 2014 2 次提交
  4. 30 9月, 2014 1 次提交
  5. 05 9月, 2014 1 次提交
    • L
      ASoC: Add support for automatically going to BIAS_OFF on suspend · 86dbf2ac
      Lars-Peter Clausen 提交于
      There is a substantial amount of drivers that in go to SND_SOC_BIAS_OFF on
      suspend and go back to SND_SOC_BIAS_SUSPEND on resume (Often this is even
      the only thing done in the suspend and resume handlers). This patch
      introduces a new suspend_bias_off flag, which when set by a driver will let
      the ASoC core automatically put the device's DAPM context at the
      SND_SOC_BIAS_OFF level during suspend. Once the device is resumed the DAPM
      context will go back to SND_SOC_BIAS_STANDBY (if the context is idle,
      otherwise to SND_SOC_BIAS_ON).
      
      This will allow us to remove a fair bit of duplicated code from the drivers.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      86dbf2ac
  6. 12 8月, 2014 1 次提交
  7. 23 7月, 2014 1 次提交
    • L
      ASoC: Move card field form platform/codec to component · 00200107
      Lars-Peter Clausen 提交于
      Both the snd_soc_codec and snd_soc_platform struct do have a pointer to the
      parent card and both handle this pointer in mostly the same way. This patch
      moves the card field to the component level which will allow further code
      consolidation between platforms and CODECS.
      
      Since there are only a handful of users of the snd_soc_codec struct's card field
      (and none of the snd_soc_platform's) these are update in this patch as well,
      which allows it to be removed from the snd_soc_codec struct.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      00200107
  8. 17 7月, 2014 3 次提交
  9. 22 6月, 2014 6 次提交
    • L
      ASoC: dapm: Remove platform field from widget and dapm context struct · 88a8fe3d
      Lars-Peter Clausen 提交于
      The platform field in the snd_soc_dapm_widget and snd_soc_dapm_context structs
      is now unused can be removed. New code that wants to get the platform for a
      widget or dapm context should use snd_soc_dapm_to_platform(w->dapm) or
      snd_soc_dapm_to_platform(dapm).
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      88a8fe3d
    • L
      ASoC: Add DAPM support at the component level · ce0fc93a
      Lars-Peter Clausen 提交于
      This patch adds full DAPM support at the component level. Previously there was
      only full DAPM support for CODECs and partial DAPM support (e.g. no Mixers nor
      MUXs) for platforms. Having DAPM support at the component level will allow all
      types of components to use DAPM and also help in consolidating the DAPM support
      between CODECs and platforms.
      
      Since the DAPM context is directly embedded into the snd_soc_codec and
      snd_soc_platform struct and the 'dapm' field is directly referenced in a lot of
      drivers moving the field just right now is not possible without causing code
      churn. The approach this patch takes is to add two new fields to the component
      struct. One field which is the pointer to the actual DAPM context used by the
      component and one DAPM context that will be used as the default if no other
      context was specified. For CODECs and platforms the pointer is initialized to
      point to the CODEC or platform DAPM context. All generic code when referencing
      a component's DAPM struct will go via the pointer. This will make it possible to
      eventually seamlessly move the DAPM context from snd_soc_codec and
      snd_soc_platform struct over once all direct references have been eliminated.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      ce0fc93a
    • L
      ASoC: Add a set_bias_level() callback to the DAPM context struct · 68f831c2
      Lars-Peter Clausen 提交于
      Currently the DAPM code directly looks at the CODEC driver struct to get a
      handle to the set_bias_level() callback. This patch adds a new set_bias_level()
      callback to the DAPM context struct. The DAPM code will use this new callback
      instead of the CODEC callback. For CODECs the new callback is set up to call the
      CODEC specific set_bias_level callback(). Not looking directly at the CODEC
      driver struct will allow non CODEC DAPM contexts to implement a set_bias_level()
      callback.
      
      This is also similar to how the seq_notifier() and stream_event() callbacks are
      currently handled.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      68f831c2
    • L
      ASoC: Auto disconnect pins from all DAPM contexts · 7df37884
      Lars-Peter Clausen 提交于
      Currently only pins in CODEC DAPM contexts are automatically marked as
      non-connected if the card has the fully_routed flag set. This makes sense since
      widgets which qualify for auto-disconnection are only found in CODEC DAPM
      contexts. But with componentisation this is going to change, so consider all
      widgets for auto-disconnection.
      
      Also it is probably faster to walk the widgets list only once rather than once
      for each CODEC.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      7df37884
    • L
      ASoC: Move name and id from CODEC/platform to component · f4333203
      Lars-Peter Clausen 提交于
      The component struct already has a name and id field which are initialized to
      the same values as the same fields in the CODEC and platform structs. So remove
      them from the CODEC and platform structs and used the ones from the component
      struct instead.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      f4333203
    • L
      ASoC: Move name_prefix from CODEC to component · 94f99c87
      Lars-Peter Clausen 提交于
      Move the name_prefix from the CODEC struct to the component struct. This will
      eventually allow to specify prefixes for all types of components. It is also
      necessary to make the DAPM code component type independent (i.e. a DAPM context
      does not need to know whether it belongs to a CODEC or a platform or something
      else).
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      94f99c87
  10. 10 6月, 2014 1 次提交
  11. 13 5月, 2014 7 次提交
  12. 06 5月, 2014 1 次提交
  13. 30 4月, 2014 1 次提交
  14. 22 4月, 2014 2 次提交
    • L
      ASoC: dapm: Rename soc_widget_update_bits_locked() to soc_widget_update_bits() · 23d5442b
      Lars-Peter Clausen 提交于
      There is no unlocked version of soc_widget_update_bits_locked() and there is no
      plan to introduce it in the near future, so drop the _locked suffix.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      23d5442b
    • L
      ASoC: Move IO abstraction to the component level · e2c330b9
      Lars-Peter Clausen 提交于
      We currently have two very similar IO abstractions in ASoC, one for CODECs, the
      other for platforms. Moving this to the component level will allow us to unify
      those two. It will also enable us to move the standard kcontrol helpers as well
      as DAPM support to the component level.
      
      The new component level abstraction layer is primarily build around regmap.
      There is a per component pointer for the regmap instance for the underlying
      device. There are four new function snd_soc_component_read(),
      snd_soc_component_write(), snd_soc_component_update_bits() and
      snd_soc_component_update_bits_async(). They have the same signature as their
      regmap counter-part and will internally forward the call one-to-one to regmap.
      If the component it not using regmap it will fallback to using the custom IO
      callbacks. This is done to be able to support drivers that haven't been
      converted to regmap yet, but it is expected that this will eventually be removed
      in the future once all component drivers have been converted to regmap.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      e2c330b9
  15. 21 4月, 2014 1 次提交
    • J
      ASoC: dapm: Fix widget double free with auto-disable DAPM kcontrol · 2697e4fb
      Jarkko Nikula 提交于
      Commit 9e1fda4ae158 ("ASoC: dapm: Implement mixer input auto-disable")
      is trying to free the widget it allocated by snd_soc_dapm_new_control()
      call in dapm_kcontrol_data_alloc() by adding kfree(data->widget) to
      dapm_kcontrol_free().
      
      This is causing a widget double free with auto-disabled DAPM kcontrols
      in sound card unregistration because widgets are already freed before
      dapm_kcontrol_free() is called.
      
      Reason for that is all widgets are added into dapm->card->widgets list
      in snd_soc_dapm_new_control() and freed in dapm_free_widgets() during
      execution of snd_soc_dapm_free().
      
      Now snd_soc_dapm_free() calls for different DAPM contexts happens before
      snd_card_free() call from where the call chain to dapm_kcontrol_free()
      begins:
      
      soc_cleanup_card_resources()
        soc_remove_dai_links()
          soc_remove_link_dais()
            snd_soc_dapm_free(&cpu_dai->dapm)
          soc_remove_link_components()
            soc_remove_platform()
              snd_soc_dapm_free(&platform->dapm)
            soc_remove_codec()
              snd_soc_dapm_free(&codec->dapm)
        snd_soc_dapm_free(&card->dapm)
        snd_card_free()
          snd_card_do_free()
            snd_device_free_all()
              snd_device_free()
                snd_ctl_dev_free()
                  snd_ctl_remove()
                    snd_ctl_free_one()
                      dapm_kcontrol_free()
      
      This wasn't making harm with ordinary DAPM kcontrols since data->widget is NULL for
      them.
      
      Fixes: 9e1fda4ae158 (ASoC: dapm: Implement mixer input auto-disable)
      Signed-off-by: NJarkko Nikula <jarkko.nikula@linux.intel.com>
      Acked-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      Cc: stable@vger.kernel.org
      2697e4fb
  16. 18 4月, 2014 1 次提交
  17. 11 3月, 2014 1 次提交
    • M
      ASoC: dapm: Sprinkle lockdep asserts through the code · f9fa2b18
      Mark Brown 提交于
      Try to spot locking issues by asserting that the DAPM mutex is held when
      it should be. There's a bit of fun due to us not requiring the lock to be
      held prior to the card being instantiated which mean we need to wrap the
      assert in some paths and this isn't methodical by any stretch of the
      imagination.
      Signed-off-by: NMark Brown <broonie@linaro.org>
      f9fa2b18
  18. 10 3月, 2014 1 次提交
  19. 03 3月, 2014 2 次提交
  20. 01 3月, 2014 2 次提交
    • L
      ASoC: dapm: Break dapm_set_path_status() appart · 234c0b8f
      Lars-Peter Clausen 提交于
      There are three different completely independent code paths in
      dapm_set_path_status(). One of them is never used at all and the other two (one
      for mixers, one for MUXs) have their distincive callsites that always go onto
      the same path. Breaking the function into two parts allows us to reduce the code
      size and in the MUX case also do some optimizations to avoid having to calcualte
      the selected item for each item again.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      234c0b8f
    • L
      ASoC: dapm: Consolidate MUXs and virtual MUXs · 236aaa68
      Lars-Peter Clausen 提交于
      MUXs and virtual MUXs are almost identical, the only difference is that for
      virtual MUX there is no hardware backing register in which setting is stored.
      This patch adds code, which is similar to what we already do for DAPM mixer
      controls to support virtual mixer controls, to DAPM enum controls. The new code
      will check if the enum does a hardware backing register and skip over reading
      and writing to the register if it has not.  This allows us to use the same code
      path for both MUXs and virtual MUXs and a lot of nearly identical code can be
      removed.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      236aaa68