forked from Minki/linux
Merge remote-tracking branch 'asoc/topic/dma' into asoc-fsl
This commit is contained in:
commit
75ab73bc5d
@ -140,6 +140,10 @@ int snd_dmaengine_pcm_register(struct device *dev,
|
||||
unsigned int flags);
|
||||
void snd_dmaengine_pcm_unregister(struct device *dev);
|
||||
|
||||
int devm_snd_dmaengine_pcm_register(struct device *dev,
|
||||
const struct snd_dmaengine_pcm_config *config,
|
||||
unsigned int flags);
|
||||
|
||||
int snd_dmaengine_pcm_prepare_slave_config(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params,
|
||||
struct dma_slave_config *slave_config);
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <sound/soc.h>
|
||||
#include <sound/dmaengine_pcm.h>
|
||||
|
||||
static void devm_component_release(struct device *dev, void *res)
|
||||
{
|
||||
@ -84,3 +85,43 @@ int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card)
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_snd_soc_register_card);
|
||||
|
||||
#ifdef CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM
|
||||
|
||||
static void devm_dmaengine_pcm_release(struct device *dev, void *res)
|
||||
{
|
||||
snd_dmaengine_pcm_unregister(*(struct device **)res);
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_snd_dmaengine_pcm_register - resource managed dmaengine PCM registration
|
||||
* @dev: The parent device for the PCM device
|
||||
* @config: Platform specific PCM configuration
|
||||
* @flags: Platform specific quirks
|
||||
*
|
||||
* Register a dmaengine based PCM device with automatic unregistration when the
|
||||
* device is unregistered.
|
||||
*/
|
||||
int devm_snd_dmaengine_pcm_register(struct device *dev,
|
||||
const struct snd_dmaengine_pcm_config *config, unsigned int flags)
|
||||
{
|
||||
struct device **ptr;
|
||||
int ret;
|
||||
|
||||
ptr = devres_alloc(devm_dmaengine_pcm_release, sizeof(*ptr), GFP_KERNEL);
|
||||
if (!ptr)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = snd_dmaengine_pcm_register(dev, config, flags);
|
||||
if (ret == 0) {
|
||||
*ptr = dev;
|
||||
devres_add(dev, ptr);
|
||||
} else {
|
||||
devres_free(ptr);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_snd_dmaengine_pcm_register);
|
||||
|
||||
#endif
|
||||
|
@ -137,6 +137,9 @@ static int dmaengine_pcm_set_runtime_hwparams(struct snd_pcm_substream *substrea
|
||||
hw.buffer_bytes_max = SIZE_MAX;
|
||||
hw.fifo_size = dma_data->fifo_size;
|
||||
|
||||
if (pcm->flags & SND_DMAENGINE_PCM_FLAG_NO_RESIDUE)
|
||||
hw.info |= SNDRV_PCM_INFO_BATCH;
|
||||
|
||||
ret = dma_get_slave_caps(chan, &dma_caps);
|
||||
if (ret == 0) {
|
||||
if (dma_caps.cmd_pause)
|
||||
|
Loading…
Reference in New Issue
Block a user