1. 19 Aug, 2014 10 commits
    • Lars-Peter Clausen's avatar
      ASoC: Consolidate CPU and CODEC DAI lookup · 14621c7e
      Lars-Peter Clausen authored
      The lookup of CPU and CODEC DAIs is fairly similar and can easily be
      consolidated into a single helper function.
      
      There are two main differences in the current implementation of the CPU and
      CODEC DAI lookup:
       1) CPU DAIs can be looked up by the DAI name alone and do not necessarily
         require a component name/of_node.
       2) The CODEC DAI search only considers DAIs from CODEC components.
      
      For 1) the new helper function will allow to lookup DAIs without providing a
      component name or of_node, but since snd_soc_register_card() already rejects
      CODEC DAI link components without neither a of_node or a name we'll never get
      into the situation where we try to lookup a CODEC DAI without a name/of_node.
      For 2) the new helper function just always considers all components.
      Componentization is now at a point where it is possible to register a CODEC as a
      snd_soc_component rather than a snd_soc_codec, by considering DAIs from all
      components it is possible to use such a CODEC in a DAI link.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      14621c7e
    • Lars-Peter Clausen's avatar
      ASoC: Consolidate CPU and CODEC DAI removal · e60cd14f
      Lars-Peter Clausen authored
      CPU and CODEC DAI works exactly the same way. There is already a helper function
      for CODEC DAI removal, use that one as well for CPU DAI removal.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      e60cd14f
    • Lars-Peter Clausen's avatar
      ASoC: Cleanup DAI module reference counting · ffbd7dd7
      Lars-Peter Clausen authored
      Currently when a DAI has no CODEC associated to it the reference on the module
      containing the DAI driver is increased when the DAI is probed and decrease when
      the DAI is removed. For DAIs with CODECs the module reference count was already
      incremented when the CODEC is probed. Now that all components have their module
      reference count incremented when they are probed and all DAIs do have a
      component it is possible to remove the module reference counting on DAI probe
      and removal.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      ffbd7dd7
    • Lars-Peter Clausen's avatar
      ASoC: Move component->probed check into soc_{remove,probe}_component() · 70090bbb
      Lars-Peter Clausen authored
      Having the check in a centralized place makes the code a bit cleaner and
      shorter.
      
      Note: There is a slight semantic change in this patch. soc_probe_aux_dev() will
      no longer return -EBUSY if the AUX dev has already been probed before. This is
      fine though since it will simply do nothing in that case and return success.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      70090bbb
    • Lars-Peter Clausen's avatar
      ASoC: Pass component instead of DAPM context to AUX dev init callback · 57bf7726
      Lars-Peter Clausen authored
      Given that the component is the containing structure it makes more sense to pass
      the component rather than the DAPM context to the AUX dev init callback.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      57bf7726
    • Lars-Peter Clausen's avatar
      ASoC: Move AUX dev support to the component level · 65d9361f
      Lars-Peter Clausen authored
      This patch makes it possible to register arbitrary components as a AUX dev
      for a card. This was previously only possible for CODEC components. With
      componentization having made it possible for components to have DAPM contexts
      and controls there is no reason why AUX devs should be artificially limited to
      snd_soc_codec devices.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      65d9361f
    • Lars-Peter Clausen's avatar
      ASoC: Add component level probe/remove support · 61aca564
      Lars-Peter Clausen authored
      Now that we have a unified probe and remove path make sure to call them for all
      components. soc_{probe,remove}_component are responsible for setting up the DAPM
      context for the component, initialize the component prefix, manage the debugfs
      entries as well as do the registration of table based controls and DAPM
      elements. They also call the component drivers probe and remove callbacks. This
      patch makes these things available for generic snd_soc_component drivers rather
      than only having them for snd_soc_codec and snd_soc_platform drivers.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      61aca564
    • Lars-Peter Clausen's avatar
      ASoC: Make rtd->codec optional · 93c3ce76
      Lars-Peter Clausen authored
      There are some place in the ASoC core that expect rtd->codec to be non NULL
      (mainly CODEC specific sysfs files). With componentization going forward
      rtd->codec might be NULL in some cases. This patch prepares the core for this by
      not registering CODEC specific sysfs files if rtd->codec is NULL. sysfs file
      removal does not need to be conditionalized as it handles the removal of
      non-existing files just fine.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      93c3ce76
    • Lars-Peter Clausen's avatar
      ASoC: Consolidate platform and CODEC probe/remove · f1d45cc3
      Lars-Peter Clausen authored
      The platform and CODEC probe and remove code is now largely identical. This
      patch consolidates it at the component level.
      
      The resulting code is slightly larger due to all the boiler plate code setting
      up the indirection for the table based control and DAPM registration.  Once all
      drivers have been update to no longer use the snd_soc_codec_driver and
      snd_soc_platform_driver specific fields for this the indirection can be removed
      again.
      
      This patch contains two noteworthy hacks that are only meant to be temporary to
      be able to update drivers and the core in separate incremental patches.
      
      The first hack is related to that some DPCM platforms expect that the DAPM
      widgets for the DAIs of a snd_soc_component are created in the DAPM context of
      the snd_soc_platform that has the same parent device. For handling this the
      steal_sibling_dai_widgets attribute is introduced. It gets set for
      snd_soc_platforms that register DAPM elements. When creating the DAI widgets for
      a component this flag is checked and if it is found on one of the siblings the
      component will not create any DAI widgets in its own DAPM context. If the
      attribute is set on a platform it will look for siblings components and create
      DAI widgets for them in its own context. The fix for this will be to update
      the offending drivers to only register a single component rather than two.
      
      The second hack deals with the fact that the ASoC card suspend and resume code
      still needs a list of CODECs that have been registered for the card. To handle
      this the generic probe and remove path have a check to see if the component is
      CODEC and if yes add/remove it to the card's CODEC list. While it is possible to
      clean up the suspend/resume code to not need the CODEC list anymore this is a
      bit of a chicken and egg problem since it will become easier to clean up the
      suspend/resume code once there is a unified component layer.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      f1d45cc3
    • Lars-Peter Clausen's avatar
      ASoC: Move debugfs registration to the component level · 81c7cfd1
      Lars-Peter Clausen authored
      The debugfs registration is mostly identical between platforms and CODECs. This
      patches consolidates the two implementations at the component level.
      
      Unfortunately there are still a couple of CODEC specific debugfs files that are
      related to legacy ASoC IO that need to be registered. For this a new callback is
      added to the component struct that will be initialized when a CODEC is
      registered and will be used to register the CODEC specific files. Once there are
      no drivers left using legacy IO this can be removed again.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      81c7cfd1
  2. 16 Aug, 2014 30 commits