kirkwood-i2s.c (dfe4c93627c4a1a7fb7e30b15e31f4ccf3ca60f5) kirkwood-i2s.c (b424ec953344e0ea612a8cc2d8e59742a0273ac1)
1/*
2 * kirkwood-i2s.c
3 *
4 * (c) 2010 Arnaud Patard <apatard@mandriva.com>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your

--- 179 unchanged lines hidden (view full) ---

188
189 value = readl(priv->io + KIRKWOOD_INT_MASK);
190 value |= KIRKWOOD_INT_CAUSE_PLAY_BYTES;
191 writel(value, priv->io + KIRKWOOD_INT_MASK);
192
193 /* configure audio & enable i2s playback */
194 value = readl(priv->io + KIRKWOOD_PLAYCTL);
195 value &= ~KIRKWOOD_PLAYCTL_BURST_MASK;
1/*
2 * kirkwood-i2s.c
3 *
4 * (c) 2010 Arnaud Patard <apatard@mandriva.com>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your

--- 179 unchanged lines hidden (view full) ---

188
189 value = readl(priv->io + KIRKWOOD_INT_MASK);
190 value |= KIRKWOOD_INT_CAUSE_PLAY_BYTES;
191 writel(value, priv->io + KIRKWOOD_INT_MASK);
192
193 /* configure audio & enable i2s playback */
194 value = readl(priv->io + KIRKWOOD_PLAYCTL);
195 value &= ~KIRKWOOD_PLAYCTL_BURST_MASK;
196 value &= ~(KIRKWOOD_PLAYCTL_PAUSE|KIRKWOOD_PLAYCTL_SPDIF_EN);
196 value &= ~(KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE
197 | KIRKWOOD_PLAYCTL_SPDIF_EN);
197
198 if (priv->burst == 32)
199 value |= KIRKWOOD_PLAYCTL_BURST_32;
200 else
201 value |= KIRKWOOD_PLAYCTL_BURST_128;
202 value |= KIRKWOOD_PLAYCTL_I2S_EN;
203 writel(value, priv->io + KIRKWOOD_PLAYCTL);
204 break;
205
206 case SNDRV_PCM_TRIGGER_STOP:
207 /* stop audio, disable interrupts */
208 value = readl(priv->io + KIRKWOOD_PLAYCTL);
198
199 if (priv->burst == 32)
200 value |= KIRKWOOD_PLAYCTL_BURST_32;
201 else
202 value |= KIRKWOOD_PLAYCTL_BURST_128;
203 value |= KIRKWOOD_PLAYCTL_I2S_EN;
204 writel(value, priv->io + KIRKWOOD_PLAYCTL);
205 break;
206
207 case SNDRV_PCM_TRIGGER_STOP:
208 /* stop audio, disable interrupts */
209 value = readl(priv->io + KIRKWOOD_PLAYCTL);
209 value |= KIRKWOOD_PLAYCTL_PAUSE;
210 value |= KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE;
210 writel(value, priv->io + KIRKWOOD_PLAYCTL);
211
212 value = readl(priv->io + KIRKWOOD_INT_MASK);
213 value &= ~KIRKWOOD_INT_CAUSE_PLAY_BYTES;
214 writel(value, priv->io + KIRKWOOD_INT_MASK);
215
216 /* disable all playbacks */
217 value = readl(priv->io + KIRKWOOD_PLAYCTL);
218 value &= ~(KIRKWOOD_PLAYCTL_I2S_EN | KIRKWOOD_PLAYCTL_SPDIF_EN);
219 writel(value, priv->io + KIRKWOOD_PLAYCTL);
220 break;
221
222 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
223 case SNDRV_PCM_TRIGGER_SUSPEND:
224 value = readl(priv->io + KIRKWOOD_PLAYCTL);
211 writel(value, priv->io + KIRKWOOD_PLAYCTL);
212
213 value = readl(priv->io + KIRKWOOD_INT_MASK);
214 value &= ~KIRKWOOD_INT_CAUSE_PLAY_BYTES;
215 writel(value, priv->io + KIRKWOOD_INT_MASK);
216
217 /* disable all playbacks */
218 value = readl(priv->io + KIRKWOOD_PLAYCTL);
219 value &= ~(KIRKWOOD_PLAYCTL_I2S_EN | KIRKWOOD_PLAYCTL_SPDIF_EN);
220 writel(value, priv->io + KIRKWOOD_PLAYCTL);
221 break;
222
223 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
224 case SNDRV_PCM_TRIGGER_SUSPEND:
225 value = readl(priv->io + KIRKWOOD_PLAYCTL);
225 value |= KIRKWOOD_PLAYCTL_PAUSE;
226 value |= KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE;
226 writel(value, priv->io + KIRKWOOD_PLAYCTL);
227 break;
228
229 case SNDRV_PCM_TRIGGER_RESUME:
230 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
231 value = readl(priv->io + KIRKWOOD_PLAYCTL);
227 writel(value, priv->io + KIRKWOOD_PLAYCTL);
228 break;
229
230 case SNDRV_PCM_TRIGGER_RESUME:
231 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
232 value = readl(priv->io + KIRKWOOD_PLAYCTL);
232 value &= ~KIRKWOOD_PLAYCTL_PAUSE;
233 value &= ~(KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE);
233 writel(value, priv->io + KIRKWOOD_PLAYCTL);
234 break;
235
236 default:
237 return -EINVAL;
238 }
239
240 return 0;

--- 16 unchanged lines hidden (view full) ---

257 value = readl(priv->io + KIRKWOOD_INT_MASK);
258 value |= KIRKWOOD_INT_CAUSE_REC_BYTES;
259 writel(value, priv->io + KIRKWOOD_INT_MASK);
260
261 /* configure audio & enable i2s record */
262 value = readl(priv->io + KIRKWOOD_RECCTL);
263 value &= ~KIRKWOOD_RECCTL_BURST_MASK;
264 value &= ~KIRKWOOD_RECCTL_MONO;
234 writel(value, priv->io + KIRKWOOD_PLAYCTL);
235 break;
236
237 default:
238 return -EINVAL;
239 }
240
241 return 0;

--- 16 unchanged lines hidden (view full) ---

258 value = readl(priv->io + KIRKWOOD_INT_MASK);
259 value |= KIRKWOOD_INT_CAUSE_REC_BYTES;
260 writel(value, priv->io + KIRKWOOD_INT_MASK);
261
262 /* configure audio & enable i2s record */
263 value = readl(priv->io + KIRKWOOD_RECCTL);
264 value &= ~KIRKWOOD_RECCTL_BURST_MASK;
265 value &= ~KIRKWOOD_RECCTL_MONO;
265 value &= ~(KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_SPDIF_EN);
266 value &= ~(KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_MUTE
267 | KIRKWOOD_RECCTL_SPDIF_EN);
266
267 if (priv->burst == 32)
268 value |= KIRKWOOD_RECCTL_BURST_32;
269 else
270 value |= KIRKWOOD_RECCTL_BURST_128;
271 value |= KIRKWOOD_RECCTL_I2S_EN;
272
273 writel(value, priv->io + KIRKWOOD_RECCTL);
274 break;
275
276 case SNDRV_PCM_TRIGGER_STOP:
277 /* stop audio, disable interrupts */
278 value = readl(priv->io + KIRKWOOD_RECCTL);
268
269 if (priv->burst == 32)
270 value |= KIRKWOOD_RECCTL_BURST_32;
271 else
272 value |= KIRKWOOD_RECCTL_BURST_128;
273 value |= KIRKWOOD_RECCTL_I2S_EN;
274
275 writel(value, priv->io + KIRKWOOD_RECCTL);
276 break;
277
278 case SNDRV_PCM_TRIGGER_STOP:
279 /* stop audio, disable interrupts */
280 value = readl(priv->io + KIRKWOOD_RECCTL);
279 value |= KIRKWOOD_RECCTL_PAUSE;
281 value |= KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_MUTE;
280 writel(value, priv->io + KIRKWOOD_RECCTL);
281
282 value = readl(priv->io + KIRKWOOD_INT_MASK);
283 value &= ~KIRKWOOD_INT_CAUSE_REC_BYTES;
284 writel(value, priv->io + KIRKWOOD_INT_MASK);
285
286 /* disable all records */
287 value = readl(priv->io + KIRKWOOD_RECCTL);
288 value &= ~(KIRKWOOD_RECCTL_I2S_EN | KIRKWOOD_RECCTL_SPDIF_EN);
289 writel(value, priv->io + KIRKWOOD_RECCTL);
290 break;
291
292 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
293 case SNDRV_PCM_TRIGGER_SUSPEND:
294 value = readl(priv->io + KIRKWOOD_RECCTL);
282 writel(value, priv->io + KIRKWOOD_RECCTL);
283
284 value = readl(priv->io + KIRKWOOD_INT_MASK);
285 value &= ~KIRKWOOD_INT_CAUSE_REC_BYTES;
286 writel(value, priv->io + KIRKWOOD_INT_MASK);
287
288 /* disable all records */
289 value = readl(priv->io + KIRKWOOD_RECCTL);
290 value &= ~(KIRKWOOD_RECCTL_I2S_EN | KIRKWOOD_RECCTL_SPDIF_EN);
291 writel(value, priv->io + KIRKWOOD_RECCTL);
292 break;
293
294 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
295 case SNDRV_PCM_TRIGGER_SUSPEND:
296 value = readl(priv->io + KIRKWOOD_RECCTL);
295 value |= KIRKWOOD_RECCTL_PAUSE;
297 value |= KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_MUTE;
296 writel(value, priv->io + KIRKWOOD_RECCTL);
297 break;
298
299 case SNDRV_PCM_TRIGGER_RESUME:
300 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
301 value = readl(priv->io + KIRKWOOD_RECCTL);
298 writel(value, priv->io + KIRKWOOD_RECCTL);
299 break;
300
301 case SNDRV_PCM_TRIGGER_RESUME:
302 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
303 value = readl(priv->io + KIRKWOOD_RECCTL);
302 value &= ~KIRKWOOD_RECCTL_PAUSE;
304 value &= ~(KIRKWOOD_RECCTL_PAUSE | KIRKWOOD_RECCTL_MUTE);
303 writel(value, priv->io + KIRKWOOD_RECCTL);
304 break;
305
306 default:
307 return -EINVAL;
308 }
309
310 return 0;

--- 183 unchanged lines hidden ---
305 writel(value, priv->io + KIRKWOOD_RECCTL);
306 break;
307
308 default:
309 return -EINVAL;
310 }
311
312 return 0;

--- 183 unchanged lines hidden ---