1. 11 Dec, 2013 35 commits
  2. 10 Dec, 2013 2 commits
    • Stephen Warren's avatar
      dma: add dma_get_any_slave_channel(), for use in of_xlate() · 8010dad5
      Stephen Warren authored
      mmp_pdma.c implements a custom of_xlate() function that is 95% identical
      to what Tegra will need. Create a function to implement the common part,
      so everyone doesn't just cut/paste the implementation.
      
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Vinod Koul <vinod.koul@intel.com>
      Cc: Lars-Peter Clausen <lars@metafoo.de>
      Cc: dmaengine@vger.kernel.org
      Cc: linux-kernel@vger.kernel.org
      Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
      Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
      8010dad5
    • Stephen Warren's avatar
      dma: add channel request API that supports deferred probe · 0ad7c000
      Stephen Warren authored
      dma_request_slave_channel() simply returns NULL whenever DMA channel
      lookup fails. Lookup could fail for two distinct reasons:
      
      a) No DMA specification exists for the channel name.
         This includes situations where no DMA specifications exist at all, or
         other general lookup problems.
      
      b) A DMA specification does exist, yet the driver for that channel is not
         yet registered.
      
      Case (b) should trigger deferred probe in client drivers. However, since
      they have no way to differentiate the two situations, it cannot.
      
      Implement new function dma_request_slave_channel_reason(), which performs
      identically to dma_request_slave_channel(), except that it returns an
      error-pointer rather than NULL, which allows callers to detect when
      deferred probe should occur.
      
      Eventually, all drivers should be converted to this new API, the old API
      removed, and the new API renamed to the more desirable name. This patch
      doesn't convert the existing API and all drivers in one go, since some
      drivers call dma_request_slave_channel() then dma_request_channel() if
      that fails. That would require either modifying dma_request_channel() in
      the same way, or adding extra error-handling code to all affected
      drivers, and there are close to 100 drivers using the other API, rather
      than just the 15-20 or so that use dma_request_slave_channel(), which
      might be tenable in a single patch.
      
      acpi_dma_request_slave_chan_by_name() doesn't currently implement
      deferred probe. It should, but this will be addressed later.
      Acked-by: default avatarDan Williams <dan.j.williams@intel.com>
      Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
      Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
      0ad7c000
  3. 09 Dec, 2013 3 commits
    • Stephen Warren's avatar
      ASoC: dmaengine: add custom DMA config to snd_dmaengine_pcm_config · 194c7dea
      Stephen Warren authored
      Add fields to struct snd_dmaengine_pcm_config to allow custom:
      
      - DMA channel names.
      
        This is useful when the default "tx" and "rx" channel names don't
        apply, for example if a HW module supports multiple channels, each
        having different DMA channel names. This is the case with the FIFOs
        in Tegra's AHUB. This new facility can replace
        SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME.
      
      - DMA device
      
        This allows requesting DMA channels for a device other than the device
        which is registering the "PCM" driver. This is quite unusual, but is
        currently useful on Tegra. In much HW, and in Tegra20, each DAI HW
        module contains its own FIFOs which DMA writes to. However, in Tegra30,
        the DMA FIFOs were split out AHUB HW module, which then routes the data
        through a cross-bar, and into the DAI HW modules. However, the current
        ASoC driver structure does not expose this detail, and acts as if the
        FIFOs are still part of the DAI HW modules. Consequently, the "PCM"
        driver is registered with the DAI HW module, yet the DMA channels must
        be looked up in the AHUB HW module's device tree node. This new config
        field allows that to happen. Eventually, the Tegra drivers will be
        reworked to fully expose the AHUB, and this config field can be
        removed.
      Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
      Acked-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      194c7dea
    • Mark Brown's avatar
      a715d01e
    • Stephen Warren's avatar
      ASoC: don't leak on error in snd_dmaengine_pcm_register · 6b9f3e65
      Stephen Warren authored
      If snd_dmaengine_pcm_register()'s call to snd_soc_add_platform() fails,
      all objects allocated during registration are leaked. Fix this by adding
      error-handling code.
      Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
      Acked-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      6b9f3e65