diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-25 11:32:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-25 11:32:05 -0400 |
commit | 33081adf8b89d5a716d7e1c60171768d39795b39 (patch) | |
tree | 275de58bbbb5f7ddffcdc087844cfc7fbe4315be /sound/soc/sh/dma-sh7760.c | |
parent | c55960499f810357a29659b32d6ea594abee9237 (diff) | |
parent | 506ecbca71d07fa327dd986be1682e90885678ee (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: (365 commits)
ALSA: hda - Disable sticky PCM stream assignment for AD codecs
ALSA: usb - Creative USB X-Fi volume knob support
ALSA: ca0106: Use card specific dac id for mute controls.
ALSA: ca0106: Allow different sound cards to use different SPI channel mappings.
ALSA: ca0106: Create a nice spot for mapping channels to dacs.
ALSA: ca0106: Move enabling of front dac out of hardcoded setup sequence.
ALSA: ca0106: Pull out dac powering routine into separate function.
ALSA: ca0106 - add Sound Blaster 5.1vx info.
ASoC: tlv320dac33: Use usleep_range for delays
ALSA: usb-audio: add Novation Launchpad support
ALSA: hda - Add workarounds for CT-IBG controllers
ALSA: hda - Fix wrong TLV mute bit for STAC/IDT codecs
ASoC: tpa6130a2: Error handling for broken chip
ASoC: max98088: Staticise m98088_eq_band
ASoC: soc-core: Fix codec->name memory leak
ALSA: hda - Apply ideapad quirk to Acer laptops with Cxt5066
ALSA: hda - Add some workarounds for Creative IBG
ALSA: hda - Fix wrong SPDIF NID assignment for CA0110
ALSA: hda - Fix codec rename rules for ALC662-compatible codecs
ALSA: hda - Add alc_init_jacks() call to other codecs
...
Diffstat (limited to 'sound/soc/sh/dma-sh7760.c')
-rw-r--r-- | sound/soc/sh/dma-sh7760.c | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/sound/soc/sh/dma-sh7760.c b/sound/soc/sh/dma-sh7760.c index 0d8bdf07729c..c326d29992fe 100644 --- a/sound/soc/sh/dma-sh7760.c +++ b/sound/soc/sh/dma-sh7760.c | |||
@@ -137,7 +137,7 @@ static void camelot_rxdma(void *data) | |||
137 | static int camelot_pcm_open(struct snd_pcm_substream *substream) | 137 | static int camelot_pcm_open(struct snd_pcm_substream *substream) |
138 | { | 138 | { |
139 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 139 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
140 | struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id]; | 140 | struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id]; |
141 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; | 141 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; |
142 | int ret, dmairq; | 142 | int ret, dmairq; |
143 | 143 | ||
@@ -150,7 +150,7 @@ static int camelot_pcm_open(struct snd_pcm_substream *substream) | |||
150 | ret = dmabrg_request_irq(dmairq, camelot_rxdma, cam); | 150 | ret = dmabrg_request_irq(dmairq, camelot_rxdma, cam); |
151 | if (unlikely(ret)) { | 151 | if (unlikely(ret)) { |
152 | pr_debug("audio unit %d irqs already taken!\n", | 152 | pr_debug("audio unit %d irqs already taken!\n", |
153 | rtd->dai->cpu_dai->id); | 153 | rtd->cpu_dai->id); |
154 | return -EBUSY; | 154 | return -EBUSY; |
155 | } | 155 | } |
156 | (void)dmabrg_request_irq(dmairq + 1,camelot_rxdma, cam); | 156 | (void)dmabrg_request_irq(dmairq + 1,camelot_rxdma, cam); |
@@ -159,7 +159,7 @@ static int camelot_pcm_open(struct snd_pcm_substream *substream) | |||
159 | ret = dmabrg_request_irq(dmairq, camelot_txdma, cam); | 159 | ret = dmabrg_request_irq(dmairq, camelot_txdma, cam); |
160 | if (unlikely(ret)) { | 160 | if (unlikely(ret)) { |
161 | pr_debug("audio unit %d irqs already taken!\n", | 161 | pr_debug("audio unit %d irqs already taken!\n", |
162 | rtd->dai->cpu_dai->id); | 162 | rtd->cpu_dai->id); |
163 | return -EBUSY; | 163 | return -EBUSY; |
164 | } | 164 | } |
165 | (void)dmabrg_request_irq(dmairq + 1, camelot_txdma, cam); | 165 | (void)dmabrg_request_irq(dmairq + 1, camelot_txdma, cam); |
@@ -170,7 +170,7 @@ static int camelot_pcm_open(struct snd_pcm_substream *substream) | |||
170 | static int camelot_pcm_close(struct snd_pcm_substream *substream) | 170 | static int camelot_pcm_close(struct snd_pcm_substream *substream) |
171 | { | 171 | { |
172 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 172 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
173 | struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id]; | 173 | struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id]; |
174 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; | 174 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; |
175 | int dmairq; | 175 | int dmairq; |
176 | 176 | ||
@@ -191,7 +191,7 @@ static int camelot_hw_params(struct snd_pcm_substream *substream, | |||
191 | struct snd_pcm_hw_params *hw_params) | 191 | struct snd_pcm_hw_params *hw_params) |
192 | { | 192 | { |
193 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 193 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
194 | struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id]; | 194 | struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id]; |
195 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; | 195 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; |
196 | int ret; | 196 | int ret; |
197 | 197 | ||
@@ -219,7 +219,7 @@ static int camelot_prepare(struct snd_pcm_substream *substream) | |||
219 | { | 219 | { |
220 | struct snd_pcm_runtime *runtime = substream->runtime; | 220 | struct snd_pcm_runtime *runtime = substream->runtime; |
221 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 221 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
222 | struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id]; | 222 | struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id]; |
223 | 223 | ||
224 | pr_debug("PCM data: addr 0x%08ulx len %d\n", | 224 | pr_debug("PCM data: addr 0x%08ulx len %d\n", |
225 | (u32)runtime->dma_addr, runtime->dma_bytes); | 225 | (u32)runtime->dma_addr, runtime->dma_bytes); |
@@ -266,7 +266,7 @@ static inline void dmabrg_rec_dma_stop(struct camelot_pcm *cam) | |||
266 | static int camelot_trigger(struct snd_pcm_substream *substream, int cmd) | 266 | static int camelot_trigger(struct snd_pcm_substream *substream, int cmd) |
267 | { | 267 | { |
268 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 268 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
269 | struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id]; | 269 | struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id]; |
270 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; | 270 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; |
271 | 271 | ||
272 | switch (cmd) { | 272 | switch (cmd) { |
@@ -293,7 +293,7 @@ static snd_pcm_uframes_t camelot_pos(struct snd_pcm_substream *substream) | |||
293 | { | 293 | { |
294 | struct snd_pcm_runtime *runtime = substream->runtime; | 294 | struct snd_pcm_runtime *runtime = substream->runtime; |
295 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 295 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
296 | struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id]; | 296 | struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id]; |
297 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; | 297 | int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1; |
298 | unsigned long pos; | 298 | unsigned long pos; |
299 | 299 | ||
@@ -342,25 +342,44 @@ static int camelot_pcm_new(struct snd_card *card, | |||
342 | return 0; | 342 | return 0; |
343 | } | 343 | } |
344 | 344 | ||
345 | struct snd_soc_platform sh7760_soc_platform = { | 345 | static struct snd_soc_platform sh7760_soc_platform = { |
346 | .name = "sh7760-pcm", | ||
347 | .pcm_ops = &camelot_pcm_ops, | 346 | .pcm_ops = &camelot_pcm_ops, |
348 | .pcm_new = camelot_pcm_new, | 347 | .pcm_new = camelot_pcm_new, |
349 | .pcm_free = camelot_pcm_free, | 348 | .pcm_free = camelot_pcm_free, |
350 | }; | 349 | }; |
351 | EXPORT_SYMBOL_GPL(sh7760_soc_platform); | ||
352 | 350 | ||
353 | static int __init sh7760_soc_platform_init(void) | 351 | static int __devinit sh7760_soc_platform_probe(struct platform_device *pdev) |
354 | { | 352 | { |
355 | return snd_soc_register_platform(&sh7760_soc_platform); | 353 | return snd_soc_register_platform(&pdev->dev, &sh7760_soc_platform); |
356 | } | 354 | } |
357 | module_init(sh7760_soc_platform_init); | ||
358 | 355 | ||
359 | static void __exit sh7760_soc_platform_exit(void) | 356 | static int __devexit sh7760_soc_platform_remove(struct platform_device *pdev) |
360 | { | 357 | { |
361 | snd_soc_unregister_platform(&sh7760_soc_platform); | 358 | snd_soc_unregister_platform(&pdev->dev); |
359 | return 0; | ||
360 | } | ||
361 | |||
362 | static struct platform_driver sh7760_pcm_driver = { | ||
363 | .driver = { | ||
364 | .name = "sh7760-pcm-audio", | ||
365 | .owner = THIS_MODULE, | ||
366 | }, | ||
367 | |||
368 | .probe = sh7760_soc_platform_probe, | ||
369 | .remove = __devexit_p(sh7760_soc_platform_remove), | ||
370 | }; | ||
371 | |||
372 | static int __init snd_sh7760_pcm_init(void) | ||
373 | { | ||
374 | return platform_driver_register(&sh7760_pcm_driver); | ||
375 | } | ||
376 | module_init(snd_sh7760_pcm_init); | ||
377 | |||
378 | static void __exit snd_sh7760_pcm_exit(void) | ||
379 | { | ||
380 | platform_driver_unregister(&sh7760_pcm_driver); | ||
362 | } | 381 | } |
363 | module_exit(sh7760_soc_platform_exit); | 382 | module_exit(snd_sh7760_pcm_exit); |
364 | 383 | ||
365 | MODULE_LICENSE("GPL"); | 384 | MODULE_LICENSE("GPL"); |
366 | MODULE_DESCRIPTION("SH7760 Audio DMA (DMABRG) driver"); | 385 | MODULE_DESCRIPTION("SH7760 Audio DMA (DMABRG) driver"); |