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 --- |