aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/at91/at91rm9200-i2s.c52
-rw-r--r--sound/soc/codecs/wm8731.c184
-rw-r--r--sound/soc/codecs/wm8750.c316
-rw-r--r--sound/soc/codecs/wm9712.c7
-rw-r--r--sound/soc/pxa/pxa2xx-i2s.c91
5 files changed, 483 insertions, 167 deletions
diff --git a/sound/soc/at91/at91rm9200-i2s.c b/sound/soc/at91/at91rm9200-i2s.c
index 044a774b4301..91f1daa44f19 100644
--- a/sound/soc/at91/at91rm9200-i2s.c
+++ b/sound/soc/at91/at91rm9200-i2s.c
@@ -51,24 +51,52 @@
51static struct snd_soc_dai_mode at91rm9200_i2s[] = { 51static struct snd_soc_dai_mode at91rm9200_i2s[] = {
52 52
53 /* 8k: BCLK = (MCLK/10) = (60MHz/50) = 1.2MHz */ 53 /* 8k: BCLK = (MCLK/10) = (60MHz/50) = 1.2MHz */
54 { AT91RM9200_I2S_DAIFMT, SND_SOC_DAITDM_LRDW(0,0), 54 {
55 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_8000, AT91RM9200_I2S_DIR, 55 .fmt = AT91RM9200_I2S_DAIFMT,
56 SND_SOC_DAI_BFS_DIV, 1500, SND_SOC_FSBD(10), (25 << 16 | 74) }, 56 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
57 .pcmrate = SNDRV_PCM_RATE_8000,
58 .pcmdir = AT91RM9200_I2S_DIR,
59 .flags = SND_SOC_DAI_BFS_DIV,
60 .fs = 1500,
61 .bfs = SND_SOC_FSBD(10),
62 .priv = (25 << 16 | 74),
63 },
57 64
58 /* 16k: BCLK = (MCLK/3) ~= (60MHz/14) = 4.285714MHz */ 65 /* 16k: BCLK = (MCLK/3) ~= (60MHz/14) = 4.285714MHz */
59 { AT91RM9200_I2S_DAIFMT, SND_SOC_DAITDM_LRDW(0,0), 66 {
60 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_16000, AT91RM9200_I2S_DIR, 67 .fmt = AT91RM9200_I2S_DAIFMT,
61 SND_SOC_DAI_BFS_DIV, 750, SND_SOC_FSBD(3) , (7 << 16 | 133) }, 68 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
69 .pcmrate = SNDRV_PCM_RATE_16000,
70 .pcmdir = AT91RM9200_I2S_DIR,
71 .flags = SND_SOC_DAI_BFS_DIV,
72 .fs = 750,
73 .bfs = SND_SOC_FSBD(3),
74 .flags (7 << 16 | 133),
75 },
62 76
63 /* 24k: BCLK = (MCLK/10) = (60MHz/50) = 1.2MHz */ 77 /* 24k: BCLK = (MCLK/10) = (60MHz/50) = 1.2MHz */
64 { AT91RM9200_I2S_DAIFMT, SND_SOC_DAITDM_LRDW(0,0), 78 {
65 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_22050, AT91RM9200_I2S_DIR, 79 .fmt = AT91RM9200_I2S_DAIFMT,
66 SND_SOC_DAI_BFS_DIV, 500, SND_SOC_FSBD(10), (25 << 16 | 24) }, 80 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
81 .pcmrate = SNDRV_PCM_RATE_22050,
82 .pcmdir = AT91RM9200_I2S_DIR,
83 .flags = SND_SOC_DAI_BFS_DIV,
84 .fs = 500,
85 .bfs = SND_SOC_FSBD(10),
86 .priv = (25 << 16 | 24),
87 },
67 88
68 /* 48kHz: BCLK = (MCLK/5) ~= (60MHz/26) = 2.3076923MHz */ 89 /* 48kHz: BCLK = (MCLK/5) ~= (60MHz/26) = 2.3076923MHz */
69 { AT91RM9200_I2S_DAIFMT, SND_SOC_DAITDM_LRDW(0,0), 90 {
70 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_48000, AT91RM9200_I2S_DIR, 91 .fmt = AT91RM9200_I2S_DAIFMT,
71 SND_SOC_DAI_BFS_DIV, 250, SND_SOC_FSBD(5), (13 << 16 | 23) }, 92 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
93 .pcmrate = SNDRV_PCM_RATE_48000,
94 .pcmdir = AT91RM9200_I2S_DIR,
95 .flags = SND_SOC_DAI_BFS_DIV,
96 .fs = 250,
97 .bfs SND_SOC_FSBD(5),
98 .priv = (13 << 16 | 23),
99 },
72}; 100};
73 101
74 102
diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
index cd0ece650f31..03a6bb9b8773 100644
--- a/sound/soc/codecs/wm8731.c
+++ b/sound/soc/codecs/wm8731.c
@@ -85,74 +85,160 @@ static const u16 wm8731_reg[WM8731_CACHEREGNUM] = {
85static struct snd_soc_dai_mode wm8731_modes[] = { 85static struct snd_soc_dai_mode wm8731_modes[] = {
86 /* codec frame and clock master modes */ 86 /* codec frame and clock master modes */
87 /* 8k */ 87 /* 8k */
88 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 88 {
89 WM8731_HIFI_BITS, SNDRV_PCM_RATE_8000, WM8731_DIR, 0, 89 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
90 1536, SND_SOC_FSB(64)}, 90 .pcmfmt = WM8731_HIFI_BITS,
91 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 91 .pcmrate = SNDRV_PCM_RATE_8000,
92 WM8731_HIFI_BITS, SNDRV_PCM_RATE_8000, WM8731_DIR, 0, 92 .pcmdir = WM8731_DIR,
93 2304, SND_SOC_FSB(64)}, 93 .fs = 1536,
94 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 94 .bfs = SND_SOC_FSB(64),
95 WM8731_HIFI_BITS, SNDRV_PCM_RATE_8000, WM8731_DIR, 0, 95 },
96 1408, SND_SOC_FSB(64)}, 96 {
97 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 97 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
98 WM8731_HIFI_BITS, SNDRV_PCM_RATE_8000, WM8731_DIR, 0, 98 .pcmfmt = WM8731_HIFI_BITS,
99 2112, SND_SOC_FSB(64)}, 99 .pcmrate = SNDRV_PCM_RATE_8000,
100 .pcmdir = WM8731_DIR,
101 .fs = 2304,
102 .bfs = SND_SOC_FSB(64),
103 },
104 {
105 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
106 .pcmfmt = WM8731_HIFI_BITS,
107 .pcmrate = SNDRV_PCM_RATE_8000,
108 .pcmdir = WM8731_DIR,
109 .fs = 1408,
110 .bfs = SND_SOC_FSB(64),
111 },
112 {
113 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
114 .pcmfmt = WM8731_HIFI_BITS,
115 .pcmrate = SNDRV_PCM_RATE_8000,
116 .pcmdir = WM8731_DIR,
117 .fs = 2112,
118 .bfs = SND_SOC_FSB(64),
119 },
100 120
101 /* 32k */ 121 /* 32k */
102 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 122 {
103 WM8731_HIFI_BITS, SNDRV_PCM_RATE_32000, WM8731_DIR, 0, 123 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
104 384, SND_SOC_FSB(64)}, 124 .pcmfmt = WM8731_HIFI_BITS,
105 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 125 .pcmrate = SNDRV_PCM_RATE_32000,
106 WM8731_HIFI_BITS, SNDRV_PCM_RATE_32000, WM8731_DIR, 0, 126 .pcmdir = WM8731_DIR,
107 576, SND_SOC_FSB(64)}, 127 .fs = 384,
128 .bfs = SND_SOC_FSB(64),
129 },
130 {
131 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
132 .pcmfmt = WM8731_HIFI_BITS,
133 .pcmrate = SNDRV_PCM_RATE_32000,
134 .pcmdir = WM8731_DIR,
135 .fs = 576,
136 .bfs = SND_SOC_FSB(64),
137 },
108 138
109 /* 44.1k & 48k */ 139 /* 44.1k & 48k */
110 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 140 {
111 WM8731_HIFI_BITS, SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000, 141 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
112 WM8731_DIR, 0, 256, SND_SOC_FSB(64)}, 142 .pcmfmt = WM8731_HIFI_BITS,
113 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 143 .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
114 WM8731_HIFI_BITS, SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000, 144 .pcmdir = WM8731_DIR,
115 WM8731_DIR, 0, 384, SND_SOC_FSB(64)}, 145 .fs = 256,
146 .bfs = SND_SOC_FSB(64),
147 },
148 {
149 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
150 .pcmfmt = WM8731_HIFI_BITS,
151 .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
152 .pcmdir = WM8731_DIR,
153 .fs = 384,
154 .bfs = SND_SOC_FSB(64),
155 },
116 156
117 /* 88.2 & 96k */ 157 /* 88.2 & 96k */
118 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 158 {
119 WM8731_HIFI_BITS, SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, 159 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
120 WM8731_DIR, 0, 128, SND_SOC_FSB(64)}, 160 .pcmfmt = WM8731_HIFI_BITS,
121 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 161 .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
122 WM8731_HIFI_BITS, SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, 162 .pcmdir = WM8731_DIR,
123 WM8731_DIR, 0, 192, SND_SOC_FSB(64)}, 163 .fs = 128,
124 164 .bfs = SND_SOC_FSB(64),
165
166 },
167 {
168 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
169 .pcmfmt = WM8731_HIFI_BITS,
170 .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
171 .pcmdir = WM8731_DIR,
172 .fs = 192,
173 .bfs = SND_SOC_FSB(64),
174 },
125 175
126 /* USB codec frame and clock master modes */ 176 /* USB codec frame and clock master modes */
127 /* 8k */ 177 /* 8k */
128 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 178 {
129 WM8731_HIFI_BITS, SNDRV_PCM_RATE_8000, WM8731_DIR, 179 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
130 SND_SOC_DAI_BFS_DIV, 1500, SND_SOC_FSBD(1)}, 180 .pcmfmt = WM8731_HIFI_BITS,
181 .pcmrate = SNDRV_PCM_RATE_8000,
182 .pcmdir = WM8731_DIR,
183 .flags = SND_SOC_DAI_BFS_DIV,
184 .fs = 1500,
185 .bfs = SND_SOC_FSBD(1),
186 },
131 187
132 /* 44.1k */ 188 /* 44.1k */
133 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 189 {
134 WM8731_HIFI_BITS, SNDRV_PCM_RATE_44100, WM8731_DIR, 190 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
135 SND_SOC_DAI_BFS_DIV, 272, SND_SOC_FSBD(1)}, 191 .pcmfmt = WM8731_HIFI_BITS,
192 .pcmrate = SNDRV_PCM_RATE_44100,
193 .pcmdir = WM8731_DIR,
194 .flags = SND_SOC_DAI_BFS_DIV,
195 .fs = 272,
196 .bfs = SND_SOC_FSBD(1),
197 },
136 198
137 /* 48k */ 199 /* 48k */
138 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 200 {
139 WM8731_HIFI_BITS, SNDRV_PCM_RATE_48000, WM8731_DIR, 201 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
140 SND_SOC_DAI_BFS_DIV, 250, SND_SOC_FSBD(1)}, 202 .pcmfmt = WM8731_HIFI_BITS,
203 .pcmrate = SNDRV_PCM_RATE_48000,
204 .pcmdir = WM8731_DIR,
205 .flags = SND_SOC_DAI_BFS_DIV,
206 .fs = 250,
207 .bfs = SND_SOC_FSBD(1),
208 },
141 209
142 /* 88.2k */ 210 /* 88.2k */
143 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 211 {
144 WM8731_HIFI_BITS, SNDRV_PCM_RATE_88200, WM8731_DIR, 212 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
145 SND_SOC_DAI_BFS_DIV, 136, SND_SOC_FSBD(1)}, 213 .pcmfmt = WM8731_HIFI_BITS,
214 .pcmrate = SNDRV_PCM_RATE_88200,
215 .pcmdir = WM8731_DIR,
216 .flags = SND_SOC_DAI_BFS_DIV,
217 .fs = 136,
218 .bfs = SND_SOC_FSBD(1),
219 },
146 220
147 /* 96k */ 221 /* 96k */
148 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, SND_SOC_DAITDM_LRDW(0,0), 222 {
149 WM8731_HIFI_BITS, SNDRV_PCM_RATE_96000, WM8731_DIR, 223 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
150 SND_SOC_DAI_BFS_DIV, 125, SND_SOC_FSBD(1)}, 224 .pcmfmt = WM8731_HIFI_BITS,
225 .pcmrate = SNDRV_PCM_RATE_96000,
226 .pcmdir = WM8731_DIR,
227 .flags = SND_SOC_DAI_BFS_DIV,
228 .fs = 125,
229 .bfs = SND_SOC_FSBD(1),
230 },
151 231
152 /* codec frame and clock slave modes */ 232 /* codec frame and clock slave modes */
153 {WM8731_DAIFMT | SND_SOC_DAIFMT_CBS_CFS, SND_SOC_DAITDM_LRDW(0,0), 233 {
154 WM8731_HIFI_BITS, WM8731_RATES, WM8731_DIR, SND_SOC_DAI_BFS_DIV, 234 .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
155 SND_SOC_FS_ALL, SND_SOC_FSBD_ALL}, 235 .pcmfmt = WM8731_HIFI_BITS,
236 .pcmrate = WM8731_RATES,
237 .pcmdir = WM8731_DIR,
238 .flags = SND_SOC_DAI_BFS_DIV,
239 .fs = SND_SOC_FS_ALL,
240 .bfs = SND_SOC_FSBD_ALL,
241 },
156}; 242};
157 243
158/* 244/*
diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c
index 6a8b2799b3b1..b07a6ed6aa66 100644
--- a/sound/soc/codecs/wm8750.c
+++ b/sound/soc/codecs/wm8750.c
@@ -97,102 +97,254 @@ static const u16 wm8750_reg[] = {
97static struct snd_soc_dai_mode wm8750_modes[] = { 97static struct snd_soc_dai_mode wm8750_modes[] = {
98 /* common codec frame and clock master modes */ 98 /* common codec frame and clock master modes */
99 /* 8k */ 99 /* 8k */
100 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 100 {
101 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_8000, 101 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
102 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 1536, WM8750_HIFI_FSB}, 102 .pcmfmt = WM8750_HIFI_BITS,
103 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 103 .pcmrate = SNDRV_PCM_RATE_8000,
104 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_8000, 104 .pcmdir = WM8750_DIR,
105 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 1408, WM8750_HIFI_FSB}, 105 .flags = SND_SOC_DAI_BFS_DIV,
106 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 106 .fs = 1536,
107 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_8000, 107 .bfs = WM8750_HIFI_FSB,
108 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 2304, WM8750_HIFI_FSB}, 108 },
109 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 109 {
110 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_8000, 110 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
111 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 2112, WM8750_HIFI_FSB}, 111 .pcmfmt = WM8750_HIFI_BITS,
112 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 112 .pcmrate = SNDRV_PCM_RATE_8000,
113 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_8000, 113 .pcmdir = WM8750_DIR,
114 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 1500, WM8750_HIFI_FSB}, 114 .flags = SND_SOC_DAI_BFS_DIV,
115 .fs = 1408,
116 .bfs = WM8750_HIFI_FSB,
117 },
118 {
119 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
120 .pcmfmt = WM8750_HIFI_BITS,
121 .pcmrate = SNDRV_PCM_RATE_8000,
122 .pcmdir = WM8750_DIR,
123 .flags = SND_SOC_DAI_BFS_DIV,
124 .fs = 2304,
125 .bfs = WM8750_HIFI_FSB,
126 },
127 {
128 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
129 .pcmfmt = WM8750_HIFI_BITS,
130 .pcmrate = SNDRV_PCM_RATE_8000,
131 .pcmdir = WM8750_DIR,
132 .flags = SND_SOC_DAI_BFS_DIV,
133 .fs = 2112,
134 .bfs = WM8750_HIFI_FSB,
135 },
136 {
137 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
138 .pcmfmt = WM8750_HIFI_BITS,
139 .pcmrate = SNDRV_PCM_RATE_8000,
140 .pcmdir = WM8750_DIR,
141 .flags = SND_SOC_DAI_BFS_DIV,
142 .fs = 1500,
143 .bfs = WM8750_HIFI_FSB,
144 },
115 145
116 /* 11.025k */ 146 /* 11.025k */
117 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 147 {
118 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_11025, 148 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
119 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 1024, WM8750_HIFI_FSB}, 149 .pcmfmt = WM8750_HIFI_BITS,
120 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 150 .pcmrate = SNDRV_PCM_RATE_11025,
121 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_11025, 151 .pcmdir = WM8750_DIR,
122 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 1536, WM8750_HIFI_FSB}, 152 .flags = SND_SOC_DAI_BFS_DIV,
123 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 153 .fs = 1024,
124 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_11025, 154 .bfs = WM8750_HIFI_FSB,
125 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 1088, WM8750_HIFI_FSB}, 155 },
156 {
157 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
158 .pcmfmt = WM8750_HIFI_BITS,
159 .pcmrate = SNDRV_PCM_RATE_11025,
160 .pcmdir = WM8750_DIR,
161 .flags = SND_SOC_DAI_BFS_DIV,
162 .fs = 1536,
163 .bfs = WM8750_HIFI_FSB,
164 },
165 {
166 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
167 .pcmfmt = WM8750_HIFI_BITS,
168 .pcmrate = SNDRV_PCM_RATE_11025,
169 .pcmdir = WM8750_DIR,
170 .flags = SND_SOC_DAI_BFS_DIV,
171 .fs = 1088,
172 .bfs = WM8750_HIFI_FSB,
173 },
126 174
127 /* 16k */ 175 /* 16k */
128 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 176 {
129 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_16000, 177 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
130 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 768, WM8750_HIFI_FSB}, 178 .pcmfmt = WM8750_HIFI_BITS,
131 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 179 .pcmrate = SNDRV_PCM_RATE_16000,
132 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_16000, 180 .pcmdir = WM8750_DIR,
133 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 1152, WM8750_HIFI_FSB}, 181 .flags = SND_SOC_DAI_BFS_DIV,
134 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 182 .fs = 768,
135 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_16000, 183 .bfs = WM8750_HIFI_FSB,
136 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 750, WM8750_HIFI_FSB}, 184 },
185 {
186 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
187 .pcmfmt = WM8750_HIFI_BITS,
188 .pcmrate = SNDRV_PCM_RATE_16000,
189 .pcmdir = WM8750_DIR,
190 .flags = SND_SOC_DAI_BFS_DIV,
191 .fs = 1152,
192 .bfs = WM8750_HIFI_FSB
193 },
194 {
195 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
196 .pcmfmt = WM8750_HIFI_BITS,
197 .pcmrate = SNDRV_PCM_RATE_16000,
198 .pcmdir = WM8750_DIR,
199 .flags = SND_SOC_DAI_BFS_DIV,
200 .fs = 750,
201 .bfs = WM8750_HIFI_FSB,
202 },
137 203
138 /* 22.05k */ 204 /* 22.05k */
139 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 205 {
140 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_22050, 206 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
141 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 512, WM8750_HIFI_FSB}, 207 .pcmfmt = WM8750_HIFI_BITS,
142 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 208 .pcmrate = SNDRV_PCM_RATE_22050,
143 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_22050, 209 .pcmdir = WM8750_DIR,
144 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 768, WM8750_HIFI_FSB}, 210 .flags = SND_SOC_DAI_BFS_DIV,
145 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 211 .fs = 512,
146 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_22050, 212 .bfs = WM8750_HIFI_FSB,
147 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 544, WM8750_HIFI_FSB}, 213 },
214 {
215 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
216 .pcmfmt = WM8750_HIFI_BITS,
217 .pcmrate = SNDRV_PCM_RATE_22050,
218 .pcmdir = WM8750_DIR,
219 .flags = SND_SOC_DAI_BFS_DIV,
220 .fs = 768,
221 .bfs = WM8750_HIFI_FSB,
222 },
223 {
224 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
225 .pcmfmt = WM8750_HIFI_BITS,
226 .pcmrate = SNDRV_PCM_RATE_22050,
227 .pcmdir = WM8750_DIR,
228 .flags = SND_SOC_DAI_BFS_DIV,
229 .fs = 544,
230 .bfs = WM8750_HIFI_FSB,
231 },
148 232
149 /* 32k */ 233 /* 32k */
150 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 234 {
151 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_16000, 235 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
152 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 384, WM8750_HIFI_FSB}, 236 .pcmfmt = WM8750_HIFI_BITS,
153 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 237 .pcmrate = SNDRV_PCM_RATE_32000,
154 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_16000, 238 .pcmdir = WM8750_DIR,
155 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 576, WM8750_HIFI_FSB}, 239 .flags = SND_SOC_DAI_BFS_DIV,
156 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 240 .fs = 384,
157 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_16000, 241 .bfs = WM8750_HIFI_FSB,
158 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 375, WM8750_HIFI_FSB}, 242 },
243 {
244 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
245 .pcmfmt = WM8750_HIFI_BITS,
246 .pcmrate = SNDRV_PCM_RATE_32000,
247 .pcmdir = WM8750_DIR,
248 .flags = SND_SOC_DAI_BFS_DIV,
249 .fs = 576,
250 .bfs = WM8750_HIFI_FSB,
251 },
252 {
253 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
254 .pcmfmt = WM8750_HIFI_BITS,
255 .pcmrate = SNDRV_PCM_RATE_32000,
256 .pcmdir = WM8750_DIR,
257 .flags = SND_SOC_DAI_BFS_DIV,
258 .fs = 375,
259 .bfs = WM8750_HIFI_FSB,
260 },
159 261
160 /* 44.1k & 48k */ 262 /* 44.1k & 48k */
161 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 263 {
162 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_44100 | 264 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
163 SNDRV_PCM_RATE_48000, WM8750_DIR, SND_SOC_DAI_BFS_DIV, 256, 265 .pcmfmt = WM8750_HIFI_BITS,
164 WM8750_HIFI_FSB}, 266 .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
165 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 267 .pcmdir = WM8750_DIR,
166 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_44100 | 268 .flags = SND_SOC_DAI_BFS_DIV,
167 SNDRV_PCM_RATE_48000, WM8750_DIR, SND_SOC_DAI_BFS_DIV, 384, 269 .fs = 256,
168 WM8750_HIFI_FSB}, 270 .bfs = WM8750_HIFI_FSB,
169 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 271 },
170 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_44100, 272 {
171 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 272, WM8750_HIFI_FSB}, 273 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
172 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 274 .pcmfmt = WM8750_HIFI_BITS,
173 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_48000, 275 .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
174 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 250, WM8750_HIFI_FSB}, 276 .pcmdir = WM8750_DIR,
277 .flags = SND_SOC_DAI_BFS_DIV,
278 .fs = 384,
279 .bfs = WM8750_HIFI_FSB,
280 },
281 {
282 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
283 .pcmfmt = WM8750_HIFI_BITS,
284 .pcmrate = SNDRV_PCM_RATE_44100,
285 .pcmdir = WM8750_DIR,
286 .flags = SND_SOC_DAI_BFS_DIV,
287 .fs = 272,
288 .bfs = WM8750_HIFI_FSB,
289 },
290 {
291 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
292 .pcmfmt = WM8750_HIFI_BITS,
293 .pcmrate = SNDRV_PCM_RATE_48000,
294 .pcmdir = WM8750_DIR,
295 .flags = SND_SOC_DAI_BFS_DIV,
296 .fs = 250,
297 .bfs = WM8750_HIFI_FSB,
298 },
175 299
176 /* 88.2k & 96k */ 300 /* 88.2k & 96k */
177 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 301 {
178 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_88200 | 302 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
179 SNDRV_PCM_RATE_96000, WM8750_DIR, SND_SOC_DAI_BFS_DIV, 128, 303 .pcmfmt = WM8750_HIFI_BITS,
180 WM8750_HIFI_FSB}, 304 .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
181 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 305 .pcmdir = WM8750_DIR,
182 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_88200 | 306 .flags = SND_SOC_DAI_BFS_DIV,
183 SNDRV_PCM_RATE_96000, WM8750_DIR, SND_SOC_DAI_BFS_DIV, 192, 307 .fs = 128,
184 WM8750_HIFI_FSB}, 308 .bfs = WM8750_HIFI_FSB,
185 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 309 },
186 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_88200, 310 {
187 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 136, WM8750_HIFI_FSB}, 311 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
188 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM, 312 .pcmfmt = WM8750_HIFI_BITS,
189 SND_SOC_DAITDM_LRDW(0,0), WM8750_HIFI_BITS, SNDRV_PCM_RATE_96000, 313 .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
190 WM8750_DIR, SND_SOC_DAI_BFS_DIV, 125, WM8750_HIFI_FSB}, 314 .pcmdir = WM8750_DIR,
315 .flags = SND_SOC_DAI_BFS_DIV,
316 .fs = 192,
317 .bfs = WM8750_HIFI_FSB,
318 },
319 {
320 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
321 .pcmfmt = WM8750_HIFI_BITS,
322 .pcmrate = SNDRV_PCM_RATE_88200,
323 .pcmdir = WM8750_DIR,
324 .flags = SND_SOC_DAI_BFS_DIV,
325 .fs = 136,
326 .bfs = WM8750_HIFI_FSB,
327 },
328 {
329 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
330 .pcmfmt = WM8750_HIFI_BITS,
331 .pcmrate = SNDRV_PCM_RATE_96000,
332 .pcmdir = WM8750_DIR,
333 .flags = SND_SOC_DAI_BFS_DIV,
334 .fs = 125,
335 .bfs = WM8750_HIFI_FSB,
336 },
191 337
192 /* codec frame and clock slave modes */ 338 /* codec frame and clock slave modes */
193 {WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBS_CFS, SND_SOC_DAITDM_LRDW(0,0), 339 {
194 WM8750_HIFI_BITS, WM8750_HIFI_RATES, WM8750_DIR, 340 .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
195 SND_SOC_DAI_BFS_DIV, SND_SOC_FS_ALL, SND_SOC_FSBD_ALL}, 341 .pcmfmt = WM8750_HIFI_BITS,
342 .pcmrate = WM8750_HIFI_RATES,
343 .pcmdir = WM8750_DIR,
344 .flags = SND_SOC_DAI_BFS_DIV,
345 .fs = SND_SOC_FS_ALL,
346 .bfs = SND_SOC_FSBD_ALL,
347 },
196}; 348};
197 349
198/* 350/*
diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c
index 4850550e2e31..c6b7de426460 100644
--- a/sound/soc/codecs/wm9712.c
+++ b/sound/soc/codecs/wm9712.c
@@ -44,8 +44,11 @@ static int ac97_write(struct snd_soc_codec *codec,
44 44
45/* may need to expand this */ 45/* may need to expand this */
46static struct snd_soc_dai_mode ac97_modes[] = { 46static struct snd_soc_dai_mode ac97_modes[] = {
47 {0, 0, SNDRV_PCM_FMTBIT_S16_LE, AC97_RATES}, 47 {
48 {0, 0, SNDRV_PCM_FMTBIT_S18_3LE, AC97_RATES}, 48 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE,
49 .pcmrate = AC97_RATES,
50 .pcmdir = AC97_DIR,
51 },
49}; 52};
50 53
51/* 54/*
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c
index c3b7a4bb7bd7..db2310f87fbe 100644
--- a/sound/soc/pxa/pxa2xx-i2s.c
+++ b/sound/soc/pxa/pxa2xx-i2s.c
@@ -58,30 +58,77 @@ static struct pxa_i2s_port pxa_i2s;
58/* priv is divider */ 58/* priv is divider */
59static struct snd_soc_dai_mode pxa2xx_i2s_modes[] = { 59static struct snd_soc_dai_mode pxa2xx_i2s_modes[] = {
60 /* pxa2xx I2S frame and clock master modes */ 60 /* pxa2xx I2S frame and clock master modes */
61 {PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS, SND_SOC_DAITDM_LRDW(0,0), 61 {
62 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_8000, PXA_I2S_DIR, 62 .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
63 SND_SOC_DAI_BFS_DIV, 256, SND_SOC_FSBD(4), 0x48}, 63 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
64 {PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS, SND_SOC_DAITDM_LRDW(0,0), 64 .pcmrate = SNDRV_PCM_RATE_8000,
65 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_11025, PXA_I2S_DIR, 65 .pcmdir = PXA_I2S_DIR,
66 SND_SOC_DAI_BFS_DIV, 256, SND_SOC_FSBD(4), 0x34}, 66 .flags = SND_SOC_DAI_BFS_DIV,
67 {PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS, SND_SOC_DAITDM_LRDW(0,0), 67 .fs = 256,
68 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_16000, PXA_I2S_DIR, 68 .bfs = SND_SOC_FSBD(4),
69 SND_SOC_DAI_BFS_DIV, 256, SND_SOC_FSBD(4), 0x24}, 69 .priv = 0x48,
70 {PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS, SND_SOC_DAITDM_LRDW(0,0), 70 },
71 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_22050, PXA_I2S_DIR, 71 {
72 SND_SOC_DAI_BFS_DIV, 256, SND_SOC_FSBD(4), 0x1a}, 72 .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
73 {PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS, SND_SOC_DAITDM_LRDW(0,0), 73 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
74 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_44100, PXA_I2S_DIR, 74 .pcmrate = SNDRV_PCM_RATE_11025,
75 SND_SOC_DAI_BFS_DIV, 256, SND_SOC_FSBD(4), 0xd}, 75 .pcmdir = PXA_I2S_DIR,
76 {PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS, SND_SOC_DAITDM_LRDW(0,0), 76 .flags = SND_SOC_DAI_BFS_DIV,
77 SNDRV_PCM_FMTBIT_S16_LE, SNDRV_PCM_RATE_48000, PXA_I2S_DIR, 77 .fs = 256,
78 SND_SOC_DAI_BFS_DIV, 256, SND_SOC_FSBD(4), 0xc}, 78 .bfs = SND_SOC_FSBD(4),
79 .priv = 0x34,
80 },
81 {
82 .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
83 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
84 .pcmrate = SNDRV_PCM_RATE_16000,
85 .pcmdir = PXA_I2S_DIR,
86 .flags = SND_SOC_DAI_BFS_DIV,
87 .fs = 256,
88 .bfs = SND_SOC_FSBD(4),
89 .priv = 0x24,
90 },
91 {
92 .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
93 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
94 .pcmrate = SNDRV_PCM_RATE_22050,
95 .pcmdir = PXA_I2S_DIR,
96 .flags = SND_SOC_DAI_BFS_DIV,
97 .fs = 256,
98 .bfs = SND_SOC_FSBD(4),
99 .priv = 0x1a,
100 },
101 {
102 .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
103 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
104 .pcmrate = SNDRV_PCM_RATE_44100,
105 .pcmdir = PXA_I2S_DIR,
106 .flags = SND_SOC_DAI_BFS_DIV,
107 .fs = 256,
108 .bfs = SND_SOC_FSBD(4),
109 .priv = 0xd,
110 },
111 {
112 .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
113 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
114 .pcmrate = SNDRV_PCM_RATE_48000,
115 .pcmdir = PXA_I2S_DIR,
116 .flags = SND_SOC_DAI_BFS_DIV,
117 .fs = 256,
118 .bfs = SND_SOC_FSBD(4),
119 .priv = 0xc,
120 },
79 121
80 /* pxa2xx I2S frame master and clock slave mode */ 122 /* pxa2xx I2S frame master and clock slave mode */
81 {PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBM_CFS, SND_SOC_DAITDM_LRDW(0,0), 123 {
82 SNDRV_PCM_FMTBIT_S16_LE, PXA_I2S_RATES, PXA_I2S_DIR, 0, 124 .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBM_CFS,
83 SND_SOC_FS_ALL, SND_SOC_FSB(64), 0x48}, 125 .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
84 126 .pcmrate = PXA_I2S_RATES,
127 .pcmdir = PXA_I2S_DIR,
128 .fs = SND_SOC_FS_ALL,
129 .bfs = SND_SOC_FSB(64),
130 .priv = 0x48,
131 },
85}; 132};
86 133
87static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_out = { 134static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_out = {