diff options
Diffstat (limited to 'sound/soc/kirkwood/kirkwood-dma.c')
| -rw-r--r-- | sound/soc/kirkwood/kirkwood-dma.c | 25 |
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 | ||
| 32 | struct kirkwood_dma_priv { | 36 | struct 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 | ||
| 372 | static int __devinit kirkwood_soc_platform_probe(struct platform_device *pdev) | 375 | static 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 | ||
| 377 | static int __devexit kirkwood_soc_platform_remove(struct platform_device *pdev) | 380 | static 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 | ||
| 393 | module_platform_driver(kirkwood_pcm_driver); | 396 | module_platform_driver(kirkwood_pcm_driver); |
