aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/pxa/pxa2xx-pcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/pxa/pxa2xx-pcm.c')
-rw-r--r--sound/soc/pxa/pxa2xx-pcm.c45
1 files changed, 32 insertions, 13 deletions
diff --git a/sound/soc/pxa/pxa2xx-pcm.c b/sound/soc/pxa/pxa2xx-pcm.c
index adc7e6f15f93..5127044acfec 100644
--- a/sound/soc/pxa/pxa2xx-pcm.c
+++ b/sound/soc/pxa/pxa2xx-pcm.c
@@ -28,7 +28,7 @@ static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
28 struct pxa2xx_pcm_dma_params *dma; 28 struct pxa2xx_pcm_dma_params *dma;
29 int ret; 29 int ret;
30 30
31 dma = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream); 31 dma = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
32 32
33 /* return if this is a bufferless transfer e.g. 33 /* return if this is a bufferless transfer e.g.
34 * codec <--> BT codec or GSM modem -- lg FIXME */ 34 * codec <--> BT codec or GSM modem -- lg FIXME */
@@ -95,14 +95,14 @@ static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
95 if (!card->dev->coherent_dma_mask) 95 if (!card->dev->coherent_dma_mask)
96 card->dev->coherent_dma_mask = DMA_BIT_MASK(32); 96 card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
97 97
98 if (dai->playback.channels_min) { 98 if (dai->driver->playback.channels_min) {
99 ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, 99 ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
100 SNDRV_PCM_STREAM_PLAYBACK); 100 SNDRV_PCM_STREAM_PLAYBACK);
101 if (ret) 101 if (ret)
102 goto out; 102 goto out;
103 } 103 }
104 104
105 if (dai->capture.channels_min) { 105 if (dai->driver->capture.channels_min) {
106 ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, 106 ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
107 SNDRV_PCM_STREAM_CAPTURE); 107 SNDRV_PCM_STREAM_CAPTURE);
108 if (ret) 108 if (ret)
@@ -112,25 +112,44 @@ static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
112 return ret; 112 return ret;
113} 113}
114 114
115struct snd_soc_platform pxa2xx_soc_platform = { 115static struct snd_soc_platform_driver pxa2xx_soc_platform = {
116 .name = "pxa2xx-audio", 116 .ops = &pxa2xx_pcm_ops,
117 .pcm_ops = &pxa2xx_pcm_ops,
118 .pcm_new = pxa2xx_soc_pcm_new, 117 .pcm_new = pxa2xx_soc_pcm_new,
119 .pcm_free = pxa2xx_pcm_free_dma_buffers, 118 .pcm_free = pxa2xx_pcm_free_dma_buffers,
120}; 119};
121EXPORT_SYMBOL_GPL(pxa2xx_soc_platform);
122 120
123static int __init pxa2xx_soc_platform_init(void) 121static int __devinit pxa2xx_soc_platform_probe(struct platform_device *pdev)
124{ 122{
125 return snd_soc_register_platform(&pxa2xx_soc_platform); 123 return snd_soc_register_platform(&pdev->dev, &pxa2xx_soc_platform);
126} 124}
127module_init(pxa2xx_soc_platform_init);
128 125
129static void __exit pxa2xx_soc_platform_exit(void) 126static int __devexit pxa2xx_soc_platform_remove(struct platform_device *pdev)
130{ 127{
131 snd_soc_unregister_platform(&pxa2xx_soc_platform); 128 snd_soc_unregister_platform(&pdev->dev);
129 return 0;
130}
131
132static struct platform_driver pxa_pcm_driver = {
133 .driver = {
134 .name = "pxa-pcm-audio",
135 .owner = THIS_MODULE,
136 },
137
138 .probe = pxa2xx_soc_platform_probe,
139 .remove = __devexit_p(pxa2xx_soc_platform_remove),
140};
141
142static int __init snd_pxa_pcm_init(void)
143{
144 return platform_driver_register(&pxa_pcm_driver);
145}
146module_init(snd_pxa_pcm_init);
147
148static void __exit snd_pxa_pcm_exit(void)
149{
150 platform_driver_unregister(&pxa_pcm_driver);
132} 151}
133module_exit(pxa2xx_soc_platform_exit); 152module_exit(snd_pxa_pcm_exit);
134 153
135MODULE_AUTHOR("Nicolas Pitre"); 154MODULE_AUTHOR("Nicolas Pitre");
136MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module"); 155MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module");