diff options
| author | Mark Brown <broonie@linaro.org> | 2013-12-02 06:47:11 -0500 |
|---|---|---|
| committer | Mark Brown <broonie@linaro.org> | 2013-12-02 06:47:11 -0500 |
| commit | c0d38da61d28b9fad226218acc5716c333dab3e4 (patch) | |
| tree | b92634dee66664336a731d12935c0d8a255a5573 | |
| parent | c6aeb7de226dd08ad9b343fc6cbaf2ff36f69c84 (diff) | |
| parent | a22f33b00346f26d29483cdacdbf26df7947ef23 (diff) | |
Merge remote-tracking branch 'asoc/topic/dma' into asoc-bcm2835
| -rw-r--r-- | include/sound/dmaengine_pcm.h | 4 | ||||
| -rw-r--r-- | sound/soc/soc-devres.c | 41 | ||||
| -rw-r--r-- | sound/soc/soc-generic-dmaengine-pcm.c | 3 |
3 files changed, 48 insertions, 0 deletions
diff --git a/include/sound/dmaengine_pcm.h b/include/sound/dmaengine_pcm.h index 15017311f2e9..4ef986cab182 100644 --- a/include/sound/dmaengine_pcm.h +++ b/include/sound/dmaengine_pcm.h | |||
| @@ -140,6 +140,10 @@ int snd_dmaengine_pcm_register(struct device *dev, | |||
| 140 | unsigned int flags); | 140 | unsigned int flags); |
| 141 | void snd_dmaengine_pcm_unregister(struct device *dev); | 141 | void snd_dmaengine_pcm_unregister(struct device *dev); |
| 142 | 142 | ||
| 143 | int devm_snd_dmaengine_pcm_register(struct device *dev, | ||
| 144 | const struct snd_dmaengine_pcm_config *config, | ||
| 145 | unsigned int flags); | ||
| 146 | |||
| 143 | int snd_dmaengine_pcm_prepare_slave_config(struct snd_pcm_substream *substream, | 147 | int snd_dmaengine_pcm_prepare_slave_config(struct snd_pcm_substream *substream, |
| 144 | struct snd_pcm_hw_params *params, | 148 | struct snd_pcm_hw_params *params, |
| 145 | struct dma_slave_config *slave_config); | 149 | struct dma_slave_config *slave_config); |
diff --git a/sound/soc/soc-devres.c b/sound/soc/soc-devres.c index b1d732255c02..999861942d28 100644 --- a/sound/soc/soc-devres.c +++ b/sound/soc/soc-devres.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
| 13 | #include <linux/moduleparam.h> | 13 | #include <linux/moduleparam.h> |
| 14 | #include <sound/soc.h> | 14 | #include <sound/soc.h> |
| 15 | #include <sound/dmaengine_pcm.h> | ||
| 15 | 16 | ||
| 16 | static void devm_component_release(struct device *dev, void *res) | 17 | static void devm_component_release(struct device *dev, void *res) |
| 17 | { | 18 | { |
| @@ -84,3 +85,43 @@ int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card) | |||
| 84 | return ret; | 85 | return ret; |
| 85 | } | 86 | } |
| 86 | EXPORT_SYMBOL_GPL(devm_snd_soc_register_card); | 87 | EXPORT_SYMBOL_GPL(devm_snd_soc_register_card); |
| 88 | |||
| 89 | #ifdef CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM | ||
| 90 | |||
| 91 | static void devm_dmaengine_pcm_release(struct device *dev, void *res) | ||
| 92 | { | ||
| 93 | snd_dmaengine_pcm_unregister(*(struct device **)res); | ||
| 94 | } | ||
| 95 | |||
| 96 | /** | ||
| 97 | * devm_snd_dmaengine_pcm_register - resource managed dmaengine PCM registration | ||
| 98 | * @dev: The parent device for the PCM device | ||
| 99 | * @config: Platform specific PCM configuration | ||
| 100 | * @flags: Platform specific quirks | ||
| 101 | * | ||
| 102 | * Register a dmaengine based PCM device with automatic unregistration when the | ||
| 103 | * device is unregistered. | ||
| 104 | */ | ||
| 105 | int devm_snd_dmaengine_pcm_register(struct device *dev, | ||
| 106 | const struct snd_dmaengine_pcm_config *config, unsigned int flags) | ||
| 107 | { | ||
| 108 | struct device **ptr; | ||
| 109 | int ret; | ||
| 110 | |||
| 111 | ptr = devres_alloc(devm_dmaengine_pcm_release, sizeof(*ptr), GFP_KERNEL); | ||
| 112 | if (!ptr) | ||
| 113 | return -ENOMEM; | ||
| 114 | |||
| 115 | ret = snd_dmaengine_pcm_register(dev, config, flags); | ||
| 116 | if (ret == 0) { | ||
| 117 | *ptr = dev; | ||
| 118 | devres_add(dev, ptr); | ||
| 119 | } else { | ||
| 120 | devres_free(ptr); | ||
| 121 | } | ||
| 122 | |||
| 123 | return ret; | ||
| 124 | } | ||
| 125 | EXPORT_SYMBOL_GPL(devm_snd_dmaengine_pcm_register); | ||
| 126 | |||
| 127 | #endif | ||
diff --git a/sound/soc/soc-generic-dmaengine-pcm.c b/sound/soc/soc-generic-dmaengine-pcm.c index cbc9c96ce1f4..87e86357124e 100644 --- a/sound/soc/soc-generic-dmaengine-pcm.c +++ b/sound/soc/soc-generic-dmaengine-pcm.c | |||
| @@ -137,6 +137,9 @@ static int dmaengine_pcm_set_runtime_hwparams(struct snd_pcm_substream *substrea | |||
| 137 | hw.buffer_bytes_max = SIZE_MAX; | 137 | hw.buffer_bytes_max = SIZE_MAX; |
| 138 | hw.fifo_size = dma_data->fifo_size; | 138 | hw.fifo_size = dma_data->fifo_size; |
| 139 | 139 | ||
| 140 | if (pcm->flags & SND_DMAENGINE_PCM_FLAG_NO_RESIDUE) | ||
| 141 | hw.info |= SNDRV_PCM_INFO_BATCH; | ||
| 142 | |||
| 140 | ret = dma_get_slave_caps(chan, &dma_caps); | 143 | ret = dma_get_slave_caps(chan, &dma_caps); |
| 141 | if (ret == 0) { | 144 | if (ret == 0) { |
| 142 | if (dma_caps.cmd_pause) | 145 | if (dma_caps.cmd_pause) |
