aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/kirkwood/kirkwood-dma.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/kirkwood/kirkwood-dma.c')
-rw-r--r--sound/soc/kirkwood/kirkwood-dma.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/sound/soc/kirkwood/kirkwood-dma.c b/sound/soc/kirkwood/kirkwood-dma.c
index b9f16598324c..d3d4bdca1cc6 100644
--- a/sound/soc/kirkwood/kirkwood-dma.c
+++ b/sound/soc/kirkwood/kirkwood-dma.c
@@ -22,12 +22,16 @@
22#include "kirkwood.h" 22#include "kirkwood.h"
23 23
24#define KIRKWOOD_RATES \ 24#define KIRKWOOD_RATES \
25 (SNDRV_PCM_RATE_44100 | \ 25 (SNDRV_PCM_RATE_8000_192000 | \
26 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000) 26 SNDRV_PCM_RATE_CONTINUOUS | \
27 SNDRV_PCM_RATE_KNOT)
28
27#define KIRKWOOD_FORMATS \ 29#define KIRKWOOD_FORMATS \
28 (SNDRV_PCM_FMTBIT_S16_LE | \ 30 (SNDRV_PCM_FMTBIT_S16_LE | \
29 SNDRV_PCM_FMTBIT_S24_LE | \ 31 SNDRV_PCM_FMTBIT_S24_LE | \
30 SNDRV_PCM_FMTBIT_S32_LE) 32 SNDRV_PCM_FMTBIT_S32_LE | \
33 SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE | \
34 SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE)
31 35
32struct kirkwood_dma_priv { 36struct kirkwood_dma_priv {
33 struct snd_pcm_substream *play_stream; 37 struct snd_pcm_substream *play_stream;
@@ -43,10 +47,10 @@ static struct snd_pcm_hardware kirkwood_dma_snd_hw = {
43 SNDRV_PCM_INFO_PAUSE), 47 SNDRV_PCM_INFO_PAUSE),
44 .formats = KIRKWOOD_FORMATS, 48 .formats = KIRKWOOD_FORMATS,
45 .rates = KIRKWOOD_RATES, 49 .rates = KIRKWOOD_RATES,
46 .rate_min = 44100, 50 .rate_min = 8000,
47 .rate_max = 96000, 51 .rate_max = 384000,
48 .channels_min = 1, 52 .channels_min = 1,
49 .channels_max = 2, 53 .channels_max = 8,
50 .buffer_bytes_max = KIRKWOOD_SND_MAX_PERIOD_BYTES * KIRKWOOD_SND_MAX_PERIODS, 54 .buffer_bytes_max = KIRKWOOD_SND_MAX_PERIOD_BYTES * KIRKWOOD_SND_MAX_PERIODS,
51 .period_bytes_min = KIRKWOOD_SND_MIN_PERIOD_BYTES, 55 .period_bytes_min = KIRKWOOD_SND_MIN_PERIOD_BYTES,
52 .period_bytes_max = KIRKWOOD_SND_MAX_PERIOD_BYTES, 56 .period_bytes_max = KIRKWOOD_SND_MAX_PERIOD_BYTES,
@@ -71,7 +75,6 @@ static irqreturn_t kirkwood_dma_irq(int irq, void *dev_id)
71 printk(KERN_WARNING "%s: got err interrupt 0x%lx\n", 75 printk(KERN_WARNING "%s: got err interrupt 0x%lx\n",
72 __func__, cause); 76 __func__, cause);
73 writel(cause, priv->io + KIRKWOOD_ERR_CAUSE); 77 writel(cause, priv->io + KIRKWOOD_ERR_CAUSE);
74 return IRQ_HANDLED;
75 } 78 }
76 79
77 /* we've enabled only bytes interrupts ... */ 80 /* we've enabled only bytes interrupts ... */
@@ -178,7 +181,7 @@ static int kirkwood_dma_open(struct snd_pcm_substream *substream)
178 } 181 }
179 182
180 dram = mv_mbus_dram_info(); 183 dram = mv_mbus_dram_info();
181 addr = virt_to_phys(substream->dma_buffer.area); 184 addr = substream->dma_buffer.addr;
182 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 185 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
183 prdata->play_stream = substream; 186 prdata->play_stream = substream;
184 kirkwood_dma_conf_mbus_windows(priv->io, 187 kirkwood_dma_conf_mbus_windows(priv->io,
@@ -369,12 +372,12 @@ static struct snd_soc_platform_driver kirkwood_soc_platform = {
369 .pcm_free = kirkwood_dma_free_dma_buffers, 372 .pcm_free = kirkwood_dma_free_dma_buffers,
370}; 373};
371 374
372static int __devinit kirkwood_soc_platform_probe(struct platform_device *pdev) 375static int kirkwood_soc_platform_probe(struct platform_device *pdev)
373{ 376{
374 return snd_soc_register_platform(&pdev->dev, &kirkwood_soc_platform); 377 return snd_soc_register_platform(&pdev->dev, &kirkwood_soc_platform);
375} 378}
376 379
377static int __devexit kirkwood_soc_platform_remove(struct platform_device *pdev) 380static int kirkwood_soc_platform_remove(struct platform_device *pdev)
378{ 381{
379 snd_soc_unregister_platform(&pdev->dev); 382 snd_soc_unregister_platform(&pdev->dev);
380 return 0; 383 return 0;
@@ -387,7 +390,7 @@ static struct platform_driver kirkwood_pcm_driver = {
387 }, 390 },
388 391
389 .probe = kirkwood_soc_platform_probe, 392 .probe = kirkwood_soc_platform_probe,
390 .remove = __devexit_p(kirkwood_soc_platform_remove), 393 .remove = kirkwood_soc_platform_remove,
391}; 394};
392 395
393module_platform_driver(kirkwood_pcm_driver); 396module_platform_driver(kirkwood_pcm_driver);