ASoC: pxa: move some functions to pxa2xx-lib
To get rid of some intermediate platform layers, move pxa2xx_soc_pcm_new() and pxa2xx_pcm_ops in pxa2xx-lib. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
a7160670b5
commit
7afd1b0b2e
|
@ -8,6 +8,7 @@
|
||||||
/* PCM */
|
/* PCM */
|
||||||
struct snd_pcm_substream;
|
struct snd_pcm_substream;
|
||||||
struct snd_pcm_hw_params;
|
struct snd_pcm_hw_params;
|
||||||
|
struct snd_soc_pcm_runtime;
|
||||||
struct snd_pcm;
|
struct snd_pcm;
|
||||||
|
|
||||||
extern int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
|
extern int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||||
|
@ -22,6 +23,8 @@ extern int pxa2xx_pcm_mmap(struct snd_pcm_substream *substream,
|
||||||
struct vm_area_struct *vma);
|
struct vm_area_struct *vma);
|
||||||
extern int pxa2xx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream);
|
extern int pxa2xx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream);
|
||||||
extern void pxa2xx_pcm_free_dma_buffers(struct snd_pcm *pcm);
|
extern void pxa2xx_pcm_free_dma_buffers(struct snd_pcm *pcm);
|
||||||
|
extern int pxa2xx_soc_pcm_new(struct snd_soc_pcm_runtime *rtd);
|
||||||
|
extern const struct snd_pcm_ops pxa2xx_pcm_ops;
|
||||||
|
|
||||||
/* AC97 */
|
/* AC97 */
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,7 @@ static int pxa2xx_ac97_resume(struct device *dev)
|
||||||
static SIMPLE_DEV_PM_OPS(pxa2xx_ac97_pm_ops, pxa2xx_ac97_suspend, pxa2xx_ac97_resume);
|
static SIMPLE_DEV_PM_OPS(pxa2xx_ac97_pm_ops, pxa2xx_ac97_suspend, pxa2xx_ac97_resume);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const struct snd_pcm_ops pxa2xx_pcm_ops = {
|
static const struct snd_pcm_ops pxa2xx_ac97_pcm_ops = {
|
||||||
.open = pxa2xx_ac97_pcm_open,
|
.open = pxa2xx_ac97_pcm_open,
|
||||||
.close = pxa2xx_ac97_pcm_close,
|
.close = pxa2xx_ac97_pcm_close,
|
||||||
.ioctl = snd_pcm_lib_ioctl,
|
.ioctl = snd_pcm_lib_ioctl,
|
||||||
|
@ -203,13 +203,13 @@ static int pxa2xx_ac97_pcm_new(struct snd_card *card)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
stream = SNDRV_PCM_STREAM_PLAYBACK;
|
stream = SNDRV_PCM_STREAM_PLAYBACK;
|
||||||
snd_pcm_set_ops(pcm, stream, &pxa2xx_pcm_ops);
|
snd_pcm_set_ops(pcm, stream, &pxa2xx_ac97_pcm_ops);
|
||||||
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, stream);
|
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, stream);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
stream = SNDRV_PCM_STREAM_CAPTURE;
|
stream = SNDRV_PCM_STREAM_CAPTURE;
|
||||||
snd_pcm_set_ops(pcm, stream, &pxa2xx_pcm_ops);
|
snd_pcm_set_ops(pcm, stream, &pxa2xx_ac97_pcm_ops);
|
||||||
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, stream);
|
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, stream);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -179,6 +179,47 @@ void pxa2xx_pcm_free_dma_buffers(struct snd_pcm *pcm)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pxa2xx_pcm_free_dma_buffers);
|
EXPORT_SYMBOL(pxa2xx_pcm_free_dma_buffers);
|
||||||
|
|
||||||
|
int pxa2xx_soc_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
||||||
|
{
|
||||||
|
struct snd_card *card = rtd->card->snd_card;
|
||||||
|
struct snd_pcm *pcm = rtd->pcm;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(32));
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) {
|
||||||
|
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
|
||||||
|
SNDRV_PCM_STREAM_PLAYBACK);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) {
|
||||||
|
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
|
||||||
|
SNDRV_PCM_STREAM_CAPTURE);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(pxa2xx_soc_pcm_new);
|
||||||
|
|
||||||
|
const struct snd_pcm_ops pxa2xx_pcm_ops = {
|
||||||
|
.open = pxa2xx_pcm_open,
|
||||||
|
.close = pxa2xx_pcm_close,
|
||||||
|
.ioctl = snd_pcm_lib_ioctl,
|
||||||
|
.hw_params = pxa2xx_pcm_hw_params,
|
||||||
|
.hw_free = pxa2xx_pcm_hw_free,
|
||||||
|
.prepare = pxa2xx_pcm_prepare,
|
||||||
|
.trigger = pxa2xx_pcm_trigger,
|
||||||
|
.pointer = pxa2xx_pcm_pointer,
|
||||||
|
.mmap = pxa2xx_pcm_mmap,
|
||||||
|
};
|
||||||
|
EXPORT_SYMBOL(pxa2xx_pcm_ops);
|
||||||
|
|
||||||
MODULE_AUTHOR("Nicolas Pitre");
|
MODULE_AUTHOR("Nicolas Pitre");
|
||||||
MODULE_DESCRIPTION("Intel PXA2xx sound library");
|
MODULE_DESCRIPTION("Intel PXA2xx sound library");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
|
@ -20,61 +20,6 @@
|
||||||
#include <sound/pxa2xx-lib.h>
|
#include <sound/pxa2xx-lib.h>
|
||||||
#include <sound/dmaengine_pcm.h>
|
#include <sound/dmaengine_pcm.h>
|
||||||
|
|
||||||
static int __pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
|
|
||||||
struct snd_pcm_hw_params *params)
|
|
||||||
{
|
|
||||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
|
||||||
struct snd_dmaengine_dai_dma_data *dma;
|
|
||||||
|
|
||||||
dma = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
|
|
||||||
|
|
||||||
/* return if this is a bufferless transfer e.g.
|
|
||||||
* codec <--> BT codec or GSM modem -- lg FIXME */
|
|
||||||
if (!dma)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return pxa2xx_pcm_hw_params(substream, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct snd_pcm_ops pxa2xx_pcm_ops = {
|
|
||||||
.open = pxa2xx_pcm_open,
|
|
||||||
.close = pxa2xx_pcm_close,
|
|
||||||
.ioctl = snd_pcm_lib_ioctl,
|
|
||||||
.hw_params = __pxa2xx_pcm_hw_params,
|
|
||||||
.hw_free = pxa2xx_pcm_hw_free,
|
|
||||||
.prepare = pxa2xx_pcm_prepare,
|
|
||||||
.trigger = pxa2xx_pcm_trigger,
|
|
||||||
.pointer = pxa2xx_pcm_pointer,
|
|
||||||
.mmap = pxa2xx_pcm_mmap,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int pxa2xx_soc_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
|
||||||
{
|
|
||||||
struct snd_card *card = rtd->card->snd_card;
|
|
||||||
struct snd_pcm *pcm = rtd->pcm;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(32));
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) {
|
|
||||||
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
|
|
||||||
SNDRV_PCM_STREAM_PLAYBACK);
|
|
||||||
if (ret)
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) {
|
|
||||||
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
|
|
||||||
SNDRV_PCM_STREAM_CAPTURE);
|
|
||||||
if (ret)
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
out:
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct snd_soc_component_driver pxa2xx_soc_platform = {
|
static const struct snd_soc_component_driver pxa2xx_soc_platform = {
|
||||||
.ops = &pxa2xx_pcm_ops,
|
.ops = &pxa2xx_pcm_ops,
|
||||||
.pcm_new = pxa2xx_soc_pcm_new,
|
.pcm_new = pxa2xx_soc_pcm_new,
|
||||||
|
|
Loading…
Reference in New Issue