diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /sound/soc/pxa/pxa2xx-pcm.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (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.c | 47 |
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 | ||
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 */ |
@@ -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 | ||
115 | struct snd_soc_platform pxa2xx_soc_platform = { | 115 | static 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 | }; |
121 | EXPORT_SYMBOL_GPL(pxa2xx_soc_platform); | ||
122 | 120 | ||
123 | static int __init pxa2xx_soc_platform_init(void) | 121 | static 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 | } |
127 | module_init(pxa2xx_soc_platform_init); | ||
128 | 125 | ||
129 | static void __exit pxa2xx_soc_platform_exit(void) | 126 | static 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 | |||
132 | static 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 | |||
142 | static int __init snd_pxa_pcm_init(void) | ||
143 | { | ||
144 | return platform_driver_register(&pxa_pcm_driver); | ||
145 | } | ||
146 | module_init(snd_pxa_pcm_init); | ||
147 | |||
148 | static void __exit snd_pxa_pcm_exit(void) | ||
149 | { | ||
150 | platform_driver_unregister(&pxa_pcm_driver); | ||
132 | } | 151 | } |
133 | module_exit(pxa2xx_soc_platform_exit); | 152 | module_exit(snd_pxa_pcm_exit); |
134 | 153 | ||
135 | MODULE_AUTHOR("Nicolas Pitre"); | 154 | MODULE_AUTHOR("Nicolas Pitre"); |
136 | MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module"); | 155 | MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module"); |