diff options
Diffstat (limited to 'sound/soc/pxa/pxa2xx-pcm.c')
-rw-r--r-- | sound/soc/pxa/pxa2xx-pcm.c | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/sound/soc/pxa/pxa2xx-pcm.c b/sound/soc/pxa/pxa2xx-pcm.c index adc7e6f15f93..02fb66416ddc 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 | ||
22 | static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream, | 21 | static 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 */ |
@@ -95,14 +94,14 @@ static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai, | |||
95 | if (!card->dev->coherent_dma_mask) | 94 | if (!card->dev->coherent_dma_mask) |
96 | card->dev->coherent_dma_mask = DMA_BIT_MASK(32); | 95 | card->dev->coherent_dma_mask = DMA_BIT_MASK(32); |
97 | 96 | ||
98 | if (dai->playback.channels_min) { | 97 | if (dai->driver->playback.channels_min) { |
99 | ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, | 98 | ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, |
100 | SNDRV_PCM_STREAM_PLAYBACK); | 99 | SNDRV_PCM_STREAM_PLAYBACK); |
101 | if (ret) | 100 | if (ret) |
102 | goto out; | 101 | goto out; |
103 | } | 102 | } |
104 | 103 | ||
105 | if (dai->capture.channels_min) { | 104 | if (dai->driver->capture.channels_min) { |
106 | ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, | 105 | ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, |
107 | SNDRV_PCM_STREAM_CAPTURE); | 106 | SNDRV_PCM_STREAM_CAPTURE); |
108 | if (ret) | 107 | if (ret) |
@@ -112,25 +111,44 @@ static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai, | |||
112 | return ret; | 111 | return ret; |
113 | } | 112 | } |
114 | 113 | ||
115 | struct snd_soc_platform pxa2xx_soc_platform = { | 114 | static struct snd_soc_platform_driver pxa2xx_soc_platform = { |
116 | .name = "pxa2xx-audio", | 115 | .ops = &pxa2xx_pcm_ops, |
117 | .pcm_ops = &pxa2xx_pcm_ops, | ||
118 | .pcm_new = pxa2xx_soc_pcm_new, | 116 | .pcm_new = pxa2xx_soc_pcm_new, |
119 | .pcm_free = pxa2xx_pcm_free_dma_buffers, | 117 | .pcm_free = pxa2xx_pcm_free_dma_buffers, |
120 | }; | 118 | }; |
121 | EXPORT_SYMBOL_GPL(pxa2xx_soc_platform); | ||
122 | 119 | ||
123 | static int __init pxa2xx_soc_platform_init(void) | 120 | static int __devinit pxa2xx_soc_platform_probe(struct platform_device *pdev) |
124 | { | 121 | { |
125 | return snd_soc_register_platform(&pxa2xx_soc_platform); | 122 | return snd_soc_register_platform(&pdev->dev, &pxa2xx_soc_platform); |
126 | } | 123 | } |
127 | module_init(pxa2xx_soc_platform_init); | ||
128 | 124 | ||
129 | static void __exit pxa2xx_soc_platform_exit(void) | 125 | static int __devexit pxa2xx_soc_platform_remove(struct platform_device *pdev) |
130 | { | 126 | { |
131 | snd_soc_unregister_platform(&pxa2xx_soc_platform); | 127 | snd_soc_unregister_platform(&pdev->dev); |
128 | return 0; | ||
129 | } | ||
130 | |||
131 | static struct platform_driver pxa_pcm_driver = { | ||
132 | .driver = { | ||
133 | .name = "pxa-pcm-audio", | ||
134 | .owner = THIS_MODULE, | ||
135 | }, | ||
136 | |||
137 | .probe = pxa2xx_soc_platform_probe, | ||
138 | .remove = __devexit_p(pxa2xx_soc_platform_remove), | ||
139 | }; | ||
140 | |||
141 | static int __init snd_pxa_pcm_init(void) | ||
142 | { | ||
143 | return platform_driver_register(&pxa_pcm_driver); | ||
144 | } | ||
145 | module_init(snd_pxa_pcm_init); | ||
146 | |||
147 | static void __exit snd_pxa_pcm_exit(void) | ||
148 | { | ||
149 | platform_driver_unregister(&pxa_pcm_driver); | ||
132 | } | 150 | } |
133 | module_exit(pxa2xx_soc_platform_exit); | 151 | module_exit(snd_pxa_pcm_exit); |
134 | 152 | ||
135 | MODULE_AUTHOR("Nicolas Pitre"); | 153 | MODULE_AUTHOR("Nicolas Pitre"); |
136 | MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module"); | 154 | MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module"); |