aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/pxa/pxa2xx-pcm.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /sound/soc/pxa/pxa2xx-pcm.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'sound/soc/pxa/pxa2xx-pcm.c')
-rw-r--r--sound/soc/pxa/pxa2xx-pcm.c47
1 files changed, 33 insertions, 14 deletions
diff --git a/sound/soc/pxa/pxa2xx-pcm.c b/sound/soc/pxa/pxa2xx-pcm.c
index adc7e6f15f93..fab20a54e863 100644
--- a/sound/soc/pxa/pxa2xx-pcm.c
+++ b/sound/soc/pxa/pxa2xx-pcm.c
@@ -16,7 +16,6 @@
16#include <sound/soc.h> 16#include <sound/soc.h>
17#include <sound/pxa2xx-lib.h> 17#include <sound/pxa2xx-lib.h>
18 18
19#include "pxa2xx-pcm.h"
20#include "../../arm/pxa2xx-pcm.h" 19#include "../../arm/pxa2xx-pcm.h"
21 20
22static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream, 21static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
@@ -28,7 +27,7 @@ static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
28 struct pxa2xx_pcm_dma_params *dma; 27 struct pxa2xx_pcm_dma_params *dma;
29 int ret; 28 int ret;
30 29
31 dma = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream); 30 dma = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
32 31
33 /* return if this is a bufferless transfer e.g. 32 /* return if this is a bufferless transfer e.g.
34 * codec <--> BT codec or GSM modem -- lg FIXME */ 33 * codec <--> BT codec or GSM modem -- lg FIXME */
@@ -66,6 +65,7 @@ static int pxa2xx_pcm_hw_free(struct snd_pcm_substream *substream)
66 if (prtd->dma_ch >= 0) { 65 if (prtd->dma_ch >= 0) {
67 pxa_free_dma(prtd->dma_ch); 66 pxa_free_dma(prtd->dma_ch);
68 prtd->dma_ch = -1; 67 prtd->dma_ch = -1;
68 prtd->params = NULL;
69 } 69 }
70 70
71 return 0; 71 return 0;
@@ -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 (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) {
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 (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) {
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");