diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-04-12 08:57:04 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-04-12 08:57:04 -0400 |
commit | 38e8c895d33b0642dc341f83cce0adde4cffbc82 (patch) | |
tree | 3657c043986d5c944f971c9685ae4a68f5a5b035 /sound/soc/cirrus | |
parent | d66e065c5b8b64b03a9d9b8a7c5d674c7dfa2e3d (diff) | |
parent | 69b6f19622ce0aef41df884b75e3f789c64b89c0 (diff) |
Merge remote-tracking branch 'asoc/topic/dma' into asoc-next
Diffstat (limited to 'sound/soc/cirrus')
-rw-r--r-- | sound/soc/cirrus/edb93xx.c | 1 | ||||
-rw-r--r-- | sound/soc/cirrus/ep93xx-ac97.c | 9 | ||||
-rw-r--r-- | sound/soc/cirrus/ep93xx-i2s.c | 16 | ||||
-rw-r--r-- | sound/soc/cirrus/ep93xx-pcm.c | 37 | ||||
-rw-r--r-- | sound/soc/cirrus/ep93xx-pcm.h | 20 | ||||
-rw-r--r-- | sound/soc/cirrus/simone.c | 2 | ||||
-rw-r--r-- | sound/soc/cirrus/snappercl15.c | 1 |
7 files changed, 16 insertions, 70 deletions
diff --git a/sound/soc/cirrus/edb93xx.c b/sound/soc/cirrus/edb93xx.c index 5db68cf7b281..c43fb214558a 100644 --- a/sound/soc/cirrus/edb93xx.c +++ b/sound/soc/cirrus/edb93xx.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <sound/soc.h> | 27 | #include <sound/soc.h> |
28 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
29 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
30 | #include "ep93xx-pcm.h" | ||
31 | 30 | ||
32 | static int edb93xx_hw_params(struct snd_pcm_substream *substream, | 31 | static int edb93xx_hw_params(struct snd_pcm_substream *substream, |
33 | struct snd_pcm_hw_params *params) | 32 | struct snd_pcm_hw_params *params) |
diff --git a/sound/soc/cirrus/ep93xx-ac97.c b/sound/soc/cirrus/ep93xx-ac97.c index e593c1e4e1dd..7798fbd5e81d 100644 --- a/sound/soc/cirrus/ep93xx-ac97.c +++ b/sound/soc/cirrus/ep93xx-ac97.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <sound/soc.h> | 23 | #include <sound/soc.h> |
24 | 24 | ||
25 | #include <linux/platform_data/dma-ep93xx.h> | 25 | #include <linux/platform_data/dma-ep93xx.h> |
26 | #include "ep93xx-pcm.h" | ||
27 | 26 | ||
28 | /* | 27 | /* |
29 | * Per channel (1-4) registers. | 28 | * Per channel (1-4) registers. |
@@ -101,14 +100,16 @@ struct ep93xx_ac97_info { | |||
101 | /* currently ALSA only supports a single AC97 device */ | 100 | /* currently ALSA only supports a single AC97 device */ |
102 | static struct ep93xx_ac97_info *ep93xx_ac97_info; | 101 | static struct ep93xx_ac97_info *ep93xx_ac97_info; |
103 | 102 | ||
104 | static struct ep93xx_pcm_dma_params ep93xx_ac97_pcm_out = { | 103 | static struct ep93xx_dma_data ep93xx_ac97_pcm_out = { |
105 | .name = "ac97-pcm-out", | 104 | .name = "ac97-pcm-out", |
106 | .dma_port = EP93XX_DMA_AAC1, | 105 | .dma_port = EP93XX_DMA_AAC1, |
106 | .direction = DMA_MEM_TO_DEV, | ||
107 | }; | 107 | }; |
108 | 108 | ||
109 | static struct ep93xx_pcm_dma_params ep93xx_ac97_pcm_in = { | 109 | static struct ep93xx_dma_data ep93xx_ac97_pcm_in = { |
110 | .name = "ac97-pcm-in", | 110 | .name = "ac97-pcm-in", |
111 | .dma_port = EP93XX_DMA_AAC1, | 111 | .dma_port = EP93XX_DMA_AAC1, |
112 | .direction = DMA_DEV_TO_MEM, | ||
112 | }; | 113 | }; |
113 | 114 | ||
114 | static inline unsigned ep93xx_ac97_read_reg(struct ep93xx_ac97_info *info, | 115 | static inline unsigned ep93xx_ac97_read_reg(struct ep93xx_ac97_info *info, |
@@ -316,7 +317,7 @@ static int ep93xx_ac97_trigger(struct snd_pcm_substream *substream, | |||
316 | static int ep93xx_ac97_startup(struct snd_pcm_substream *substream, | 317 | static int ep93xx_ac97_startup(struct snd_pcm_substream *substream, |
317 | struct snd_soc_dai *dai) | 318 | struct snd_soc_dai *dai) |
318 | { | 319 | { |
319 | struct ep93xx_pcm_dma_params *dma_data; | 320 | struct ep93xx_dma_data *dma_data; |
320 | 321 | ||
321 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) | 322 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) |
322 | dma_data = &ep93xx_ac97_pcm_out; | 323 | dma_data = &ep93xx_ac97_pcm_out; |
diff --git a/sound/soc/cirrus/ep93xx-i2s.c b/sound/soc/cirrus/ep93xx-i2s.c index 8d244be275d6..5c1102e9e159 100644 --- a/sound/soc/cirrus/ep93xx-i2s.c +++ b/sound/soc/cirrus/ep93xx-i2s.c | |||
@@ -30,8 +30,6 @@ | |||
30 | #include <mach/ep93xx-regs.h> | 30 | #include <mach/ep93xx-regs.h> |
31 | #include <linux/platform_data/dma-ep93xx.h> | 31 | #include <linux/platform_data/dma-ep93xx.h> |
32 | 32 | ||
33 | #include "ep93xx-pcm.h" | ||
34 | |||
35 | #define EP93XX_I2S_TXCLKCFG 0x00 | 33 | #define EP93XX_I2S_TXCLKCFG 0x00 |
36 | #define EP93XX_I2S_RXCLKCFG 0x04 | 34 | #define EP93XX_I2S_RXCLKCFG 0x04 |
37 | #define EP93XX_I2S_GLCTRL 0x0C | 35 | #define EP93XX_I2S_GLCTRL 0x0C |
@@ -62,18 +60,20 @@ struct ep93xx_i2s_info { | |||
62 | struct clk *mclk; | 60 | struct clk *mclk; |
63 | struct clk *sclk; | 61 | struct clk *sclk; |
64 | struct clk *lrclk; | 62 | struct clk *lrclk; |
65 | struct ep93xx_pcm_dma_params *dma_params; | 63 | struct ep93xx_dma_data *dma_data; |
66 | void __iomem *regs; | 64 | void __iomem *regs; |
67 | }; | 65 | }; |
68 | 66 | ||
69 | struct ep93xx_pcm_dma_params ep93xx_i2s_dma_params[] = { | 67 | struct ep93xx_dma_data ep93xx_i2s_dma_data[] = { |
70 | [SNDRV_PCM_STREAM_PLAYBACK] = { | 68 | [SNDRV_PCM_STREAM_PLAYBACK] = { |
71 | .name = "i2s-pcm-out", | 69 | .name = "i2s-pcm-out", |
72 | .dma_port = EP93XX_DMA_I2S1, | 70 | .port = EP93XX_DMA_I2S1, |
71 | .direction = DMA_MEM_TO_DEV, | ||
73 | }, | 72 | }, |
74 | [SNDRV_PCM_STREAM_CAPTURE] = { | 73 | [SNDRV_PCM_STREAM_CAPTURE] = { |
75 | .name = "i2s-pcm-in", | 74 | .name = "i2s-pcm-in", |
76 | .dma_port = EP93XX_DMA_I2S1, | 75 | .port = EP93XX_DMA_I2S1, |
76 | .direction = DMA_DEV_TO_MEM, | ||
77 | }, | 77 | }, |
78 | }; | 78 | }; |
79 | 79 | ||
@@ -147,7 +147,7 @@ static int ep93xx_i2s_startup(struct snd_pcm_substream *substream, | |||
147 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 147 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
148 | 148 | ||
149 | snd_soc_dai_set_dma_data(cpu_dai, substream, | 149 | snd_soc_dai_set_dma_data(cpu_dai, substream, |
150 | &info->dma_params[substream->stream]); | 150 | &info->dma_data[substream->stream]); |
151 | return 0; | 151 | return 0; |
152 | } | 152 | } |
153 | 153 | ||
@@ -407,7 +407,7 @@ static int ep93xx_i2s_probe(struct platform_device *pdev) | |||
407 | } | 407 | } |
408 | 408 | ||
409 | dev_set_drvdata(&pdev->dev, info); | 409 | dev_set_drvdata(&pdev->dev, info); |
410 | info->dma_params = ep93xx_i2s_dma_params; | 410 | info->dma_data = ep93xx_i2s_dma_data; |
411 | 411 | ||
412 | err = snd_soc_register_component(&pdev->dev, &ep93xx_i2s_component, | 412 | err = snd_soc_register_component(&pdev->dev, &ep93xx_i2s_component, |
413 | &ep93xx_i2s_dai, 1); | 413 | &ep93xx_i2s_dai, 1); |
diff --git a/sound/soc/cirrus/ep93xx-pcm.c b/sound/soc/cirrus/ep93xx-pcm.c index 72eb7a49e16a..298946f790eb 100644 --- a/sound/soc/cirrus/ep93xx-pcm.c +++ b/sound/soc/cirrus/ep93xx-pcm.c | |||
@@ -29,8 +29,6 @@ | |||
29 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
30 | #include <mach/ep93xx-regs.h> | 30 | #include <mach/ep93xx-regs.h> |
31 | 31 | ||
32 | #include "ep93xx-pcm.h" | ||
33 | |||
34 | static const struct snd_pcm_hardware ep93xx_pcm_hardware = { | 32 | static const struct snd_pcm_hardware ep93xx_pcm_hardware = { |
35 | .info = (SNDRV_PCM_INFO_MMAP | | 33 | .info = (SNDRV_PCM_INFO_MMAP | |
36 | SNDRV_PCM_INFO_MMAP_VALID | | 34 | SNDRV_PCM_INFO_MMAP_VALID | |
@@ -68,40 +66,11 @@ static bool ep93xx_pcm_dma_filter(struct dma_chan *chan, void *filter_param) | |||
68 | static int ep93xx_pcm_open(struct snd_pcm_substream *substream) | 66 | static int ep93xx_pcm_open(struct snd_pcm_substream *substream) |
69 | { | 67 | { |
70 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 68 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
71 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | ||
72 | struct ep93xx_pcm_dma_params *dma_params; | ||
73 | struct ep93xx_dma_data *dma_data; | ||
74 | int ret; | ||
75 | 69 | ||
76 | snd_soc_set_runtime_hwparams(substream, &ep93xx_pcm_hardware); | 70 | snd_soc_set_runtime_hwparams(substream, &ep93xx_pcm_hardware); |
77 | 71 | ||
78 | dma_data = kmalloc(sizeof(*dma_data), GFP_KERNEL); | 72 | return snd_dmaengine_pcm_open(substream, ep93xx_pcm_dma_filter, |
79 | if (!dma_data) | 73 | snd_soc_dai_get_dma_data(rtd->cpu_dai, substream)); |
80 | return -ENOMEM; | ||
81 | |||
82 | dma_params = snd_soc_dai_get_dma_data(cpu_dai, substream); | ||
83 | dma_data->port = dma_params->dma_port; | ||
84 | dma_data->name = dma_params->name; | ||
85 | dma_data->direction = snd_pcm_substream_to_dma_direction(substream); | ||
86 | |||
87 | ret = snd_dmaengine_pcm_open(substream, ep93xx_pcm_dma_filter, dma_data); | ||
88 | if (ret) { | ||
89 | kfree(dma_data); | ||
90 | return ret; | ||
91 | } | ||
92 | |||
93 | snd_dmaengine_pcm_set_data(substream, dma_data); | ||
94 | |||
95 | return 0; | ||
96 | } | ||
97 | |||
98 | static int ep93xx_pcm_close(struct snd_pcm_substream *substream) | ||
99 | { | ||
100 | struct dma_data *dma_data = snd_dmaengine_pcm_get_data(substream); | ||
101 | |||
102 | snd_dmaengine_pcm_close(substream); | ||
103 | kfree(dma_data); | ||
104 | return 0; | ||
105 | } | 74 | } |
106 | 75 | ||
107 | static int ep93xx_pcm_hw_params(struct snd_pcm_substream *substream, | 76 | static int ep93xx_pcm_hw_params(struct snd_pcm_substream *substream, |
@@ -131,7 +100,7 @@ static int ep93xx_pcm_mmap(struct snd_pcm_substream *substream, | |||
131 | 100 | ||
132 | static struct snd_pcm_ops ep93xx_pcm_ops = { | 101 | static struct snd_pcm_ops ep93xx_pcm_ops = { |
133 | .open = ep93xx_pcm_open, | 102 | .open = ep93xx_pcm_open, |
134 | .close = ep93xx_pcm_close, | 103 | .close = snd_dmaengine_pcm_close, |
135 | .ioctl = snd_pcm_lib_ioctl, | 104 | .ioctl = snd_pcm_lib_ioctl, |
136 | .hw_params = ep93xx_pcm_hw_params, | 105 | .hw_params = ep93xx_pcm_hw_params, |
137 | .hw_free = ep93xx_pcm_hw_free, | 106 | .hw_free = ep93xx_pcm_hw_free, |
diff --git a/sound/soc/cirrus/ep93xx-pcm.h b/sound/soc/cirrus/ep93xx-pcm.h deleted file mode 100644 index 111e1121ecb8..000000000000 --- a/sound/soc/cirrus/ep93xx-pcm.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | /* | ||
2 | * sound/soc/ep93xx/ep93xx-pcm.h - EP93xx ALSA PCM interface | ||
3 | * | ||
4 | * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org> | ||
5 | * Copyright (C) 2006 Applied Data Systems | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef _EP93XX_SND_SOC_PCM_H | ||
13 | #define _EP93XX_SND_SOC_PCM_H | ||
14 | |||
15 | struct ep93xx_pcm_dma_params { | ||
16 | char *name; | ||
17 | int dma_port; | ||
18 | }; | ||
19 | |||
20 | #endif /* _EP93XX_SND_SOC_PCM_H */ | ||
diff --git a/sound/soc/cirrus/simone.c b/sound/soc/cirrus/simone.c index a397bb0d8179..4d094d00c34a 100644 --- a/sound/soc/cirrus/simone.c +++ b/sound/soc/cirrus/simone.c | |||
@@ -21,8 +21,6 @@ | |||
21 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
22 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
23 | 23 | ||
24 | #include "ep93xx-pcm.h" | ||
25 | |||
26 | static struct snd_soc_dai_link simone_dai = { | 24 | static struct snd_soc_dai_link simone_dai = { |
27 | .name = "AC97", | 25 | .name = "AC97", |
28 | .stream_name = "AC97 HiFi", | 26 | .stream_name = "AC97 HiFi", |
diff --git a/sound/soc/cirrus/snappercl15.c b/sound/soc/cirrus/snappercl15.c index 9d77fe28dfcc..69041074f2c1 100644 --- a/sound/soc/cirrus/snappercl15.c +++ b/sound/soc/cirrus/snappercl15.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <mach/hardware.h> | 21 | #include <mach/hardware.h> |
22 | 22 | ||
23 | #include "../codecs/tlv320aic23.h" | 23 | #include "../codecs/tlv320aic23.h" |
24 | #include "ep93xx-pcm.h" | ||
25 | 24 | ||
26 | #define CODEC_CLOCK 5644800 | 25 | #define CODEC_CLOCK 5644800 |
27 | 26 | ||