aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7134/saa7134-oss.c
diff options
context:
space:
mode:
authorRicardo Cerqueira <v4l@cerqueira.org>2005-11-09 00:38:54 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-09 10:56:32 -0500
commitb54134be53be720da423692665ec215eb14a678b (patch)
treecf9c5a895a6c657ef23317c6256e7eb284e93b95 /drivers/media/video/saa7134/saa7134-oss.c
parent79dd0c69f05fccb0396bdcd861ad4686ce888cda (diff)
[PATCH] V4L: 926: Saa7134 alsa can only be autoloaded after saa7134 is active
- Saa7134-alsa can only be autoloaded after saa7134 is active - Applied pertinent changes proposed by the ALSA team - dsp_nr replaced by ALSA's index[] Signed-off-by: Ricardo Cerqueira <v4l@cerqueira.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/media/video/saa7134/saa7134-oss.c')
-rw-r--r--drivers/media/video/saa7134/saa7134-oss.c308
1 files changed, 154 insertions, 154 deletions
diff --git a/drivers/media/video/saa7134/saa7134-oss.c b/drivers/media/video/saa7134/saa7134-oss.c
index f1b0e0d93d7b..fd53dfcc1644 100644
--- a/drivers/media/video/saa7134/saa7134-oss.c
+++ b/drivers/media/video/saa7134/saa7134-oss.c
@@ -59,9 +59,9 @@ static int dsp_buffer_conf(struct saa7134_dev *dev, int blksize, int blocks)
59 if ((blksize * blocks) > 1024*1024) 59 if ((blksize * blocks) > 1024*1024)
60 blocks = 1024*1024 / blksize; 60 blocks = 1024*1024 / blksize;
61 61
62 dev->oss.blocks = blocks; 62 dev->dmasound.blocks = blocks;
63 dev->oss.blksize = blksize; 63 dev->dmasound.blksize = blksize;
64 dev->oss.bufsize = blksize * blocks; 64 dev->dmasound.bufsize = blksize * blocks;
65 65
66 dprintk("buffer config: %d blocks / %d bytes, %d kB total\n", 66 dprintk("buffer config: %d blocks / %d bytes, %d kB total\n",
67 blocks,blksize,blksize * blocks / 1024); 67 blocks,blksize,blksize * blocks / 1024);
@@ -72,11 +72,11 @@ static int dsp_buffer_init(struct saa7134_dev *dev)
72{ 72{
73 int err; 73 int err;
74 74
75 if (!dev->oss.bufsize) 75 if (!dev->dmasound.bufsize)
76 BUG(); 76 BUG();
77 videobuf_dma_init(&dev->oss.dma); 77 videobuf_dma_init(&dev->dmasound.dma);
78 err = videobuf_dma_init_kernel(&dev->oss.dma, PCI_DMA_FROMDEVICE, 78 err = videobuf_dma_init_kernel(&dev->dmasound.dma, PCI_DMA_FROMDEVICE,
79 (dev->oss.bufsize + PAGE_SIZE) >> PAGE_SHIFT); 79 (dev->dmasound.bufsize + PAGE_SIZE) >> PAGE_SHIFT);
80 if (0 != err) 80 if (0 != err)
81 return err; 81 return err;
82 return 0; 82 return 0;
@@ -84,26 +84,26 @@ static int dsp_buffer_init(struct saa7134_dev *dev)
84 84
85static int dsp_buffer_free(struct saa7134_dev *dev) 85static int dsp_buffer_free(struct saa7134_dev *dev)
86{ 86{
87 if (!dev->oss.blksize) 87 if (!dev->dmasound.blksize)
88 BUG(); 88 BUG();
89 videobuf_dma_free(&dev->oss.dma); 89 videobuf_dma_free(&dev->dmasound.dma);
90 dev->oss.blocks = 0; 90 dev->dmasound.blocks = 0;
91 dev->oss.blksize = 0; 91 dev->dmasound.blksize = 0;
92 dev->oss.bufsize = 0; 92 dev->dmasound.bufsize = 0;
93 return 0; 93 return 0;
94} 94}
95 95
96static void dsp_dma_start(struct saa7134_dev *dev) 96static void dsp_dma_start(struct saa7134_dev *dev)
97{ 97{
98 dev->oss.dma_blk = 0; 98 dev->dmasound.dma_blk = 0;
99 dev->oss.dma_running = 1; 99 dev->dmasound.dma_running = 1;
100 saa7134_set_dmabits(dev); 100 saa7134_set_dmabits(dev);
101} 101}
102 102
103static void dsp_dma_stop(struct saa7134_dev *dev) 103static void dsp_dma_stop(struct saa7134_dev *dev)
104{ 104{
105 dev->oss.dma_blk = -1; 105 dev->dmasound.dma_blk = -1;
106 dev->oss.dma_running = 0; 106 dev->dmasound.dma_running = 0;
107 saa7134_set_dmabits(dev); 107 saa7134_set_dmabits(dev);
108} 108}
109 109
@@ -114,18 +114,18 @@ static int dsp_rec_start(struct saa7134_dev *dev)
114 unsigned long flags; 114 unsigned long flags;
115 115
116 /* prepare buffer */ 116 /* prepare buffer */
117 if (0 != (err = videobuf_dma_pci_map(dev->pci,&dev->oss.dma))) 117 if (0 != (err = videobuf_dma_pci_map(dev->pci,&dev->dmasound.dma)))
118 return err; 118 return err;
119 if (0 != (err = saa7134_pgtable_alloc(dev->pci,&dev->oss.pt))) 119 if (0 != (err = saa7134_pgtable_alloc(dev->pci,&dev->dmasound.pt)))
120 goto fail1; 120 goto fail1;
121 if (0 != (err = saa7134_pgtable_build(dev->pci,&dev->oss.pt, 121 if (0 != (err = saa7134_pgtable_build(dev->pci,&dev->dmasound.pt,
122 dev->oss.dma.sglist, 122 dev->dmasound.dma.sglist,
123 dev->oss.dma.sglen, 123 dev->dmasound.dma.sglen,
124 0))) 124 0)))
125 goto fail2; 125 goto fail2;
126 126
127 /* sample format */ 127 /* sample format */
128 switch (dev->oss.afmt) { 128 switch (dev->dmasound.afmt) {
129 case AFMT_U8: 129 case AFMT_U8:
130 case AFMT_S8: fmt = 0x00; break; 130 case AFMT_S8: fmt = 0x00; break;
131 case AFMT_U16_LE: 131 case AFMT_U16_LE:
@@ -137,14 +137,14 @@ static int dsp_rec_start(struct saa7134_dev *dev)
137 goto fail2; 137 goto fail2;
138 } 138 }
139 139
140 switch (dev->oss.afmt) { 140 switch (dev->dmasound.afmt) {
141 case AFMT_S8: 141 case AFMT_S8:
142 case AFMT_S16_LE: 142 case AFMT_S16_LE:
143 case AFMT_S16_BE: sign = 1; break; 143 case AFMT_S16_BE: sign = 1; break;
144 default: sign = 0; break; 144 default: sign = 0; break;
145 } 145 }
146 146
147 switch (dev->oss.afmt) { 147 switch (dev->dmasound.afmt) {
148 case AFMT_U16_BE: 148 case AFMT_U16_BE:
149 case AFMT_S16_BE: bswap = 1; break; 149 case AFMT_S16_BE: bswap = 1; break;
150 default: bswap = 0; break; 150 default: bswap = 0; break;
@@ -152,58 +152,58 @@ static int dsp_rec_start(struct saa7134_dev *dev)
152 152
153 switch (dev->pci->device) { 153 switch (dev->pci->device) {
154 case PCI_DEVICE_ID_PHILIPS_SAA7134: 154 case PCI_DEVICE_ID_PHILIPS_SAA7134:
155 if (1 == dev->oss.channels) 155 if (1 == dev->dmasound.channels)
156 fmt |= (1 << 3); 156 fmt |= (1 << 3);
157 if (2 == dev->oss.channels) 157 if (2 == dev->dmasound.channels)
158 fmt |= (3 << 3); 158 fmt |= (3 << 3);
159 if (sign) 159 if (sign)
160 fmt |= 0x04; 160 fmt |= 0x04;
161 fmt |= (TV == dev->oss.input) ? 0xc0 : 0x80; 161 fmt |= (TV == dev->dmasound.input) ? 0xc0 : 0x80;
162 162
163 saa_writeb(SAA7134_NUM_SAMPLES0, ((dev->oss.blksize - 1) & 0x0000ff)); 163 saa_writeb(SAA7134_NUM_SAMPLES0, ((dev->dmasound.blksize - 1) & 0x0000ff));
164 saa_writeb(SAA7134_NUM_SAMPLES1, ((dev->oss.blksize - 1) & 0x00ff00) >> 8); 164 saa_writeb(SAA7134_NUM_SAMPLES1, ((dev->dmasound.blksize - 1) & 0x00ff00) >> 8);
165 saa_writeb(SAA7134_NUM_SAMPLES2, ((dev->oss.blksize - 1) & 0xff0000) >> 16); 165 saa_writeb(SAA7134_NUM_SAMPLES2, ((dev->dmasound.blksize - 1) & 0xff0000) >> 16);
166 saa_writeb(SAA7134_AUDIO_FORMAT_CTRL, fmt); 166 saa_writeb(SAA7134_AUDIO_FORMAT_CTRL, fmt);
167 167
168 break; 168 break;
169 case PCI_DEVICE_ID_PHILIPS_SAA7133: 169 case PCI_DEVICE_ID_PHILIPS_SAA7133:
170 case PCI_DEVICE_ID_PHILIPS_SAA7135: 170 case PCI_DEVICE_ID_PHILIPS_SAA7135:
171 if (1 == dev->oss.channels) 171 if (1 == dev->dmasound.channels)
172 fmt |= (1 << 4); 172 fmt |= (1 << 4);
173 if (2 == dev->oss.channels) 173 if (2 == dev->dmasound.channels)
174 fmt |= (2 << 4); 174 fmt |= (2 << 4);
175 if (!sign) 175 if (!sign)
176 fmt |= 0x04; 176 fmt |= 0x04;
177 saa_writel(SAA7133_NUM_SAMPLES, dev->oss.blksize -4); 177 saa_writel(SAA7133_NUM_SAMPLES, dev->dmasound.blksize -4);
178 saa_writel(SAA7133_AUDIO_CHANNEL, 0x543210 | (fmt << 24)); 178 saa_writel(SAA7133_AUDIO_CHANNEL, 0x543210 | (fmt << 24));
179 break; 179 break;
180 } 180 }
181 dprintk("rec_start: afmt=%d ch=%d => fmt=0x%x swap=%c\n", 181 dprintk("rec_start: afmt=%d ch=%d => fmt=0x%x swap=%c\n",
182 dev->oss.afmt, dev->oss.channels, fmt, 182 dev->dmasound.afmt, dev->dmasound.channels, fmt,
183 bswap ? 'b' : '-'); 183 bswap ? 'b' : '-');
184 184
185 /* dma: setup channel 6 (= AUDIO) */ 185 /* dma: setup channel 6 (= AUDIO) */
186 control = SAA7134_RS_CONTROL_BURST_16 | 186 control = SAA7134_RS_CONTROL_BURST_16 |
187 SAA7134_RS_CONTROL_ME | 187 SAA7134_RS_CONTROL_ME |
188 (dev->oss.pt.dma >> 12); 188 (dev->dmasound.pt.dma >> 12);
189 if (bswap) 189 if (bswap)
190 control |= SAA7134_RS_CONTROL_BSWAP; 190 control |= SAA7134_RS_CONTROL_BSWAP;
191 saa_writel(SAA7134_RS_BA1(6),0); 191 saa_writel(SAA7134_RS_BA1(6),0);
192 saa_writel(SAA7134_RS_BA2(6),dev->oss.blksize); 192 saa_writel(SAA7134_RS_BA2(6),dev->dmasound.blksize);
193 saa_writel(SAA7134_RS_PITCH(6),0); 193 saa_writel(SAA7134_RS_PITCH(6),0);
194 saa_writel(SAA7134_RS_CONTROL(6),control); 194 saa_writel(SAA7134_RS_CONTROL(6),control);
195 195
196 /* start dma */ 196 /* start dma */
197 dev->oss.recording_on = 1; 197 dev->dmasound.recording_on = 1;
198 spin_lock_irqsave(&dev->slock,flags); 198 spin_lock_irqsave(&dev->slock,flags);
199 dsp_dma_start(dev); 199 dsp_dma_start(dev);
200 spin_unlock_irqrestore(&dev->slock,flags); 200 spin_unlock_irqrestore(&dev->slock,flags);
201 return 0; 201 return 0;
202 202
203 fail2: 203 fail2:
204 saa7134_pgtable_free(dev->pci,&dev->oss.pt); 204 saa7134_pgtable_free(dev->pci,&dev->dmasound.pt);
205 fail1: 205 fail1:
206 videobuf_dma_pci_unmap(dev->pci,&dev->oss.dma); 206 videobuf_dma_pci_unmap(dev->pci,&dev->dmasound.dma);
207 return err; 207 return err;
208} 208}
209 209
@@ -211,17 +211,17 @@ static int dsp_rec_stop(struct saa7134_dev *dev)
211{ 211{
212 unsigned long flags; 212 unsigned long flags;
213 213
214 dprintk("rec_stop dma_blk=%d\n",dev->oss.dma_blk); 214 dprintk("rec_stop dma_blk=%d\n",dev->dmasound.dma_blk);
215 215
216 /* stop dma */ 216 /* stop dma */
217 dev->oss.recording_on = 0; 217 dev->dmasound.recording_on = 0;
218 spin_lock_irqsave(&dev->slock,flags); 218 spin_lock_irqsave(&dev->slock,flags);
219 dsp_dma_stop(dev); 219 dsp_dma_stop(dev);
220 spin_unlock_irqrestore(&dev->slock,flags); 220 spin_unlock_irqrestore(&dev->slock,flags);
221 221
222 /* unlock buffer */ 222 /* unlock buffer */
223 saa7134_pgtable_free(dev->pci,&dev->oss.pt); 223 saa7134_pgtable_free(dev->pci,&dev->dmasound.pt);
224 videobuf_dma_pci_unmap(dev->pci,&dev->oss.dma); 224 videobuf_dma_pci_unmap(dev->pci,&dev->dmasound.dma);
225 return 0; 225 return 0;
226} 226}
227 227
@@ -236,35 +236,35 @@ static int dsp_open(struct inode *inode, struct file *file)
236 236
237 list_for_each(list,&saa7134_devlist) { 237 list_for_each(list,&saa7134_devlist) {
238 h = list_entry(list, struct saa7134_dev, devlist); 238 h = list_entry(list, struct saa7134_dev, devlist);
239 if (h->oss.minor_dsp == minor) 239 if (h->dmasound.minor_dsp == minor)
240 dev = h; 240 dev = h;
241 } 241 }
242 if (NULL == dev) 242 if (NULL == dev)
243 return -ENODEV; 243 return -ENODEV;
244 244
245 down(&dev->oss.lock); 245 down(&dev->dmasound.lock);
246 err = -EBUSY; 246 err = -EBUSY;
247 if (dev->oss.users_dsp) 247 if (dev->dmasound.users_dsp)
248 goto fail1; 248 goto fail1;
249 dev->oss.users_dsp++; 249 dev->dmasound.users_dsp++;
250 file->private_data = dev; 250 file->private_data = dev;
251 251
252 dev->oss.afmt = AFMT_U8; 252 dev->dmasound.afmt = AFMT_U8;
253 dev->oss.channels = 1; 253 dev->dmasound.channels = 1;
254 dev->oss.read_count = 0; 254 dev->dmasound.read_count = 0;
255 dev->oss.read_offset = 0; 255 dev->dmasound.read_offset = 0;
256 dsp_buffer_conf(dev,PAGE_SIZE,64); 256 dsp_buffer_conf(dev,PAGE_SIZE,64);
257 err = dsp_buffer_init(dev); 257 err = dsp_buffer_init(dev);
258 if (0 != err) 258 if (0 != err)
259 goto fail2; 259 goto fail2;
260 260
261 up(&dev->oss.lock); 261 up(&dev->dmasound.lock);
262 return 0; 262 return 0;
263 263
264 fail2: 264 fail2:
265 dev->oss.users_dsp--; 265 dev->dmasound.users_dsp--;
266 fail1: 266 fail1:
267 up(&dev->oss.lock); 267 up(&dev->dmasound.lock);
268 return err; 268 return err;
269} 269}
270 270
@@ -272,13 +272,13 @@ static int dsp_release(struct inode *inode, struct file *file)
272{ 272{
273 struct saa7134_dev *dev = file->private_data; 273 struct saa7134_dev *dev = file->private_data;
274 274
275 down(&dev->oss.lock); 275 down(&dev->dmasound.lock);
276 if (dev->oss.recording_on) 276 if (dev->dmasound.recording_on)
277 dsp_rec_stop(dev); 277 dsp_rec_stop(dev);
278 dsp_buffer_free(dev); 278 dsp_buffer_free(dev);
279 dev->oss.users_dsp--; 279 dev->dmasound.users_dsp--;
280 file->private_data = NULL; 280 file->private_data = NULL;
281 up(&dev->oss.lock); 281 up(&dev->dmasound.lock);
282 return 0; 282 return 0;
283} 283}
284 284
@@ -291,12 +291,12 @@ static ssize_t dsp_read(struct file *file, char __user *buffer,
291 unsigned long flags; 291 unsigned long flags;
292 int err,ret = 0; 292 int err,ret = 0;
293 293
294 add_wait_queue(&dev->oss.wq, &wait); 294 add_wait_queue(&dev->dmasound.wq, &wait);
295 down(&dev->oss.lock); 295 down(&dev->dmasound.lock);
296 while (count > 0) { 296 while (count > 0) {
297 /* wait for data if needed */ 297 /* wait for data if needed */
298 if (0 == dev->oss.read_count) { 298 if (0 == dev->dmasound.read_count) {
299 if (!dev->oss.recording_on) { 299 if (!dev->dmasound.recording_on) {
300 err = dsp_rec_start(dev); 300 err = dsp_rec_start(dev);
301 if (err < 0) { 301 if (err < 0) {
302 if (0 == ret) 302 if (0 == ret)
@@ -304,8 +304,8 @@ static ssize_t dsp_read(struct file *file, char __user *buffer,
304 break; 304 break;
305 } 305 }
306 } 306 }
307 if (dev->oss.recording_on && 307 if (dev->dmasound.recording_on &&
308 !dev->oss.dma_running) { 308 !dev->dmasound.dma_running) {
309 /* recover from overruns */ 309 /* recover from overruns */
310 spin_lock_irqsave(&dev->slock,flags); 310 spin_lock_irqsave(&dev->slock,flags);
311 dsp_dma_start(dev); 311 dsp_dma_start(dev);
@@ -316,12 +316,12 @@ static ssize_t dsp_read(struct file *file, char __user *buffer,
316 ret = -EAGAIN; 316 ret = -EAGAIN;
317 break; 317 break;
318 } 318 }
319 up(&dev->oss.lock); 319 up(&dev->dmasound.lock);
320 set_current_state(TASK_INTERRUPTIBLE); 320 set_current_state(TASK_INTERRUPTIBLE);
321 if (0 == dev->oss.read_count) 321 if (0 == dev->dmasound.read_count)
322 schedule(); 322 schedule();
323 set_current_state(TASK_RUNNING); 323 set_current_state(TASK_RUNNING);
324 down(&dev->oss.lock); 324 down(&dev->dmasound.lock);
325 if (signal_pending(current)) { 325 if (signal_pending(current)) {
326 if (0 == ret) 326 if (0 == ret)
327 ret = -EINTR; 327 ret = -EINTR;
@@ -331,12 +331,12 @@ static ssize_t dsp_read(struct file *file, char __user *buffer,
331 331
332 /* copy data to userspace */ 332 /* copy data to userspace */
333 bytes = count; 333 bytes = count;
334 if (bytes > dev->oss.read_count) 334 if (bytes > dev->dmasound.read_count)
335 bytes = dev->oss.read_count; 335 bytes = dev->dmasound.read_count;
336 if (bytes > dev->oss.bufsize - dev->oss.read_offset) 336 if (bytes > dev->dmasound.bufsize - dev->dmasound.read_offset)
337 bytes = dev->oss.bufsize - dev->oss.read_offset; 337 bytes = dev->dmasound.bufsize - dev->dmasound.read_offset;
338 if (copy_to_user(buffer + ret, 338 if (copy_to_user(buffer + ret,
339 dev->oss.dma.vmalloc + dev->oss.read_offset, 339 dev->dmasound.dma.vmalloc + dev->dmasound.read_offset,
340 bytes)) { 340 bytes)) {
341 if (0 == ret) 341 if (0 == ret)
342 ret = -EFAULT; 342 ret = -EFAULT;
@@ -345,13 +345,13 @@ static ssize_t dsp_read(struct file *file, char __user *buffer,
345 345
346 ret += bytes; 346 ret += bytes;
347 count -= bytes; 347 count -= bytes;
348 dev->oss.read_count -= bytes; 348 dev->dmasound.read_count -= bytes;
349 dev->oss.read_offset += bytes; 349 dev->dmasound.read_offset += bytes;
350 if (dev->oss.read_offset == dev->oss.bufsize) 350 if (dev->dmasound.read_offset == dev->dmasound.bufsize)
351 dev->oss.read_offset = 0; 351 dev->dmasound.read_offset = 0;
352 } 352 }
353 up(&dev->oss.lock); 353 up(&dev->dmasound.lock);
354 remove_wait_queue(&dev->oss.wq, &wait); 354 remove_wait_queue(&dev->dmasound.wq, &wait);
355 return ret; 355 return ret;
356} 356}
357 357
@@ -382,35 +382,35 @@ static int dsp_ioctl(struct inode *inode, struct file *file,
382 return -EFAULT; 382 return -EFAULT;
383 /* fall through */ 383 /* fall through */
384 case SOUND_PCM_READ_RATE: 384 case SOUND_PCM_READ_RATE:
385 return put_user(dev->oss.rate, p); 385 return put_user(dev->dmasound.rate, p);
386 386
387 case SNDCTL_DSP_STEREO: 387 case SNDCTL_DSP_STEREO:
388 if (get_user(val, p)) 388 if (get_user(val, p))
389 return -EFAULT; 389 return -EFAULT;
390 down(&dev->oss.lock); 390 down(&dev->dmasound.lock);
391 dev->oss.channels = val ? 2 : 1; 391 dev->dmasound.channels = val ? 2 : 1;
392 if (dev->oss.recording_on) { 392 if (dev->dmasound.recording_on) {
393 dsp_rec_stop(dev); 393 dsp_rec_stop(dev);
394 dsp_rec_start(dev); 394 dsp_rec_start(dev);
395 } 395 }
396 up(&dev->oss.lock); 396 up(&dev->dmasound.lock);
397 return put_user(dev->oss.channels-1, p); 397 return put_user(dev->dmasound.channels-1, p);
398 398
399 case SNDCTL_DSP_CHANNELS: 399 case SNDCTL_DSP_CHANNELS:
400 if (get_user(val, p)) 400 if (get_user(val, p))
401 return -EFAULT; 401 return -EFAULT;
402 if (val != 1 && val != 2) 402 if (val != 1 && val != 2)
403 return -EINVAL; 403 return -EINVAL;
404 down(&dev->oss.lock); 404 down(&dev->dmasound.lock);
405 dev->oss.channels = val; 405 dev->dmasound.channels = val;
406 if (dev->oss.recording_on) { 406 if (dev->dmasound.recording_on) {
407 dsp_rec_stop(dev); 407 dsp_rec_stop(dev);
408 dsp_rec_start(dev); 408 dsp_rec_start(dev);
409 } 409 }
410 up(&dev->oss.lock); 410 up(&dev->dmasound.lock);
411 /* fall through */ 411 /* fall through */
412 case SOUND_PCM_READ_CHANNELS: 412 case SOUND_PCM_READ_CHANNELS:
413 return put_user(dev->oss.channels, p); 413 return put_user(dev->dmasound.channels, p);
414 414
415 case SNDCTL_DSP_GETFMTS: /* Returns a mask */ 415 case SNDCTL_DSP_GETFMTS: /* Returns a mask */
416 return put_user(AFMT_U8 | AFMT_S8 | 416 return put_user(AFMT_U8 | AFMT_S8 |
@@ -430,20 +430,20 @@ static int dsp_ioctl(struct inode *inode, struct file *file,
430 case AFMT_U16_BE: 430 case AFMT_U16_BE:
431 case AFMT_S16_LE: 431 case AFMT_S16_LE:
432 case AFMT_S16_BE: 432 case AFMT_S16_BE:
433 down(&dev->oss.lock); 433 down(&dev->dmasound.lock);
434 dev->oss.afmt = val; 434 dev->dmasound.afmt = val;
435 if (dev->oss.recording_on) { 435 if (dev->dmasound.recording_on) {
436 dsp_rec_stop(dev); 436 dsp_rec_stop(dev);
437 dsp_rec_start(dev); 437 dsp_rec_start(dev);
438 } 438 }
439 up(&dev->oss.lock); 439 up(&dev->dmasound.lock);
440 return put_user(dev->oss.afmt, p); 440 return put_user(dev->dmasound.afmt, p);
441 default: 441 default:
442 return -EINVAL; 442 return -EINVAL;
443 } 443 }
444 444
445 case SOUND_PCM_READ_BITS: 445 case SOUND_PCM_READ_BITS:
446 switch (dev->oss.afmt) { 446 switch (dev->dmasound.afmt) {
447 case AFMT_U8: 447 case AFMT_U8:
448 case AFMT_S8: 448 case AFMT_S8:
449 return put_user(8, p); 449 return put_user(8, p);
@@ -461,18 +461,18 @@ static int dsp_ioctl(struct inode *inode, struct file *file,
461 return 0; 461 return 0;
462 462
463 case SNDCTL_DSP_RESET: 463 case SNDCTL_DSP_RESET:
464 down(&dev->oss.lock); 464 down(&dev->dmasound.lock);
465 if (dev->oss.recording_on) 465 if (dev->dmasound.recording_on)
466 dsp_rec_stop(dev); 466 dsp_rec_stop(dev);
467 up(&dev->oss.lock); 467 up(&dev->dmasound.lock);
468 return 0; 468 return 0;
469 case SNDCTL_DSP_GETBLKSIZE: 469 case SNDCTL_DSP_GETBLKSIZE:
470 return put_user(dev->oss.blksize, p); 470 return put_user(dev->dmasound.blksize, p);
471 471
472 case SNDCTL_DSP_SETFRAGMENT: 472 case SNDCTL_DSP_SETFRAGMENT:
473 if (get_user(val, p)) 473 if (get_user(val, p))
474 return -EFAULT; 474 return -EFAULT;
475 if (dev->oss.recording_on) 475 if (dev->dmasound.recording_on)
476 return -EBUSY; 476 return -EBUSY;
477 dsp_buffer_free(dev); 477 dsp_buffer_free(dev);
478 /* used to be arg >> 16 instead of val >> 16; fixed */ 478 /* used to be arg >> 16 instead of val >> 16; fixed */
@@ -487,9 +487,9 @@ static int dsp_ioctl(struct inode *inode, struct file *file,
487 case SNDCTL_DSP_GETISPACE: 487 case SNDCTL_DSP_GETISPACE:
488 { 488 {
489 audio_buf_info info; 489 audio_buf_info info;
490 info.fragsize = dev->oss.blksize; 490 info.fragsize = dev->dmasound.blksize;
491 info.fragstotal = dev->oss.blocks; 491 info.fragstotal = dev->dmasound.blocks;
492 info.bytes = dev->oss.read_count; 492 info.bytes = dev->dmasound.read_count;
493 info.fragments = info.bytes / info.fragsize; 493 info.fragments = info.bytes / info.fragsize;
494 if (copy_to_user(argp, &info, sizeof(info))) 494 if (copy_to_user(argp, &info, sizeof(info)))
495 return -EFAULT; 495 return -EFAULT;
@@ -505,13 +505,13 @@ static unsigned int dsp_poll(struct file *file, struct poll_table_struct *wait)
505 struct saa7134_dev *dev = file->private_data; 505 struct saa7134_dev *dev = file->private_data;
506 unsigned int mask = 0; 506 unsigned int mask = 0;
507 507
508 poll_wait(file, &dev->oss.wq, wait); 508 poll_wait(file, &dev->dmasound.wq, wait);
509 509
510 if (0 == dev->oss.read_count) { 510 if (0 == dev->dmasound.read_count) {
511 down(&dev->oss.lock); 511 down(&dev->dmasound.lock);
512 if (!dev->oss.recording_on) 512 if (!dev->dmasound.recording_on)
513 dsp_rec_start(dev); 513 dsp_rec_start(dev);
514 up(&dev->oss.lock); 514 up(&dev->dmasound.lock);
515 } else 515 } else
516 mask |= (POLLIN | POLLRDNORM); 516 mask |= (POLLIN | POLLRDNORM);
517 return mask; 517 return mask;
@@ -535,7 +535,7 @@ mixer_recsrc_7134(struct saa7134_dev *dev)
535{ 535{
536 int analog_io,rate; 536 int analog_io,rate;
537 537
538 switch (dev->oss.input) { 538 switch (dev->dmasound.input) {
539 case TV: 539 case TV:
540 saa_andorb(SAA7134_AUDIO_FORMAT_CTRL, 0xc0, 0xc0); 540 saa_andorb(SAA7134_AUDIO_FORMAT_CTRL, 0xc0, 0xc0);
541 saa_andorb(SAA7134_SIF_SAMPLE_FREQ, 0x03, 0x00); 541 saa_andorb(SAA7134_SIF_SAMPLE_FREQ, 0x03, 0x00);
@@ -543,8 +543,8 @@ mixer_recsrc_7134(struct saa7134_dev *dev)
543 case LINE1: 543 case LINE1:
544 case LINE2: 544 case LINE2:
545 case LINE2_LEFT: 545 case LINE2_LEFT:
546 analog_io = (LINE1 == dev->oss.input) ? 0x00 : 0x08; 546 analog_io = (LINE1 == dev->dmasound.input) ? 0x00 : 0x08;
547 rate = (32000 == dev->oss.rate) ? 0x01 : 0x03; 547 rate = (32000 == dev->dmasound.rate) ? 0x01 : 0x03;
548 saa_andorb(SAA7134_ANALOG_IO_SELECT, 0x08, analog_io); 548 saa_andorb(SAA7134_ANALOG_IO_SELECT, 0x08, analog_io);
549 saa_andorb(SAA7134_AUDIO_FORMAT_CTRL, 0xc0, 0x80); 549 saa_andorb(SAA7134_AUDIO_FORMAT_CTRL, 0xc0, 0x80);
550 saa_andorb(SAA7134_SIF_SAMPLE_FREQ, 0x03, rate); 550 saa_andorb(SAA7134_SIF_SAMPLE_FREQ, 0x03, rate);
@@ -560,7 +560,7 @@ mixer_recsrc_7133(struct saa7134_dev *dev)
560 560
561 xbarin = 0x03; // adc 561 xbarin = 0x03; // adc
562 anabar = 0; 562 anabar = 0;
563 switch (dev->oss.input) { 563 switch (dev->dmasound.input) {
564 case TV: 564 case TV:
565 xbarin = 0; // Demodulator 565 xbarin = 0; // Demodulator
566 anabar = 2; // DACs 566 anabar = 2; // DACs
@@ -586,9 +586,9 @@ mixer_recsrc(struct saa7134_dev *dev, enum saa7134_audio_in src)
586{ 586{
587 static const char *iname[] = { "Oops", "TV", "LINE1", "LINE2" }; 587 static const char *iname[] = { "Oops", "TV", "LINE1", "LINE2" };
588 588
589 dev->oss.count++; 589 dev->dmasound.count++;
590 dev->oss.input = src; 590 dev->dmasound.input = src;
591 dprintk("mixer input = %s\n",iname[dev->oss.input]); 591 dprintk("mixer input = %s\n",iname[dev->dmasound.input]);
592 592
593 switch (dev->pci->device) { 593 switch (dev->pci->device) {
594 case PCI_DEVICE_ID_PHILIPS_SAA7134: 594 case PCI_DEVICE_ID_PHILIPS_SAA7134:
@@ -640,7 +640,7 @@ static int mixer_open(struct inode *inode, struct file *file)
640 640
641 list_for_each(list,&saa7134_devlist) { 641 list_for_each(list,&saa7134_devlist) {
642 h = list_entry(list, struct saa7134_dev, devlist); 642 h = list_entry(list, struct saa7134_dev, devlist);
643 if (h->oss.minor_mixer == minor) 643 if (h->dmasound.minor_mixer == minor)
644 dev = h; 644 dev = h;
645 } 645 }
646 if (NULL == dev) 646 if (NULL == dev)
@@ -676,7 +676,7 @@ static int mixer_ioctl(struct inode *inode, struct file *file,
676 memset(&info,0,sizeof(info)); 676 memset(&info,0,sizeof(info));
677 strlcpy(info.id, "TV audio", sizeof(info.id)); 677 strlcpy(info.id, "TV audio", sizeof(info.id));
678 strlcpy(info.name, dev->name, sizeof(info.name)); 678 strlcpy(info.name, dev->name, sizeof(info.name));
679 info.modify_counter = dev->oss.count; 679 info.modify_counter = dev->dmasound.count;
680 if (copy_to_user(argp, &info, sizeof(info))) 680 if (copy_to_user(argp, &info, sizeof(info)))
681 return -EFAULT; 681 return -EFAULT;
682 return 0; 682 return 0;
@@ -698,26 +698,26 @@ static int mixer_ioctl(struct inode *inode, struct file *file,
698 case MIXER_READ(SOUND_MIXER_RECMASK): 698 case MIXER_READ(SOUND_MIXER_RECMASK):
699 case MIXER_READ(SOUND_MIXER_DEVMASK): 699 case MIXER_READ(SOUND_MIXER_DEVMASK):
700 val = SOUND_MASK_LINE1 | SOUND_MASK_LINE2; 700 val = SOUND_MASK_LINE1 | SOUND_MASK_LINE2;
701 if (32000 == dev->oss.rate) 701 if (32000 == dev->dmasound.rate)
702 val |= SOUND_MASK_VIDEO; 702 val |= SOUND_MASK_VIDEO;
703 return put_user(val, p); 703 return put_user(val, p);
704 704
705 case MIXER_WRITE(SOUND_MIXER_RECSRC): 705 case MIXER_WRITE(SOUND_MIXER_RECSRC):
706 if (get_user(val, p)) 706 if (get_user(val, p))
707 return -EFAULT; 707 return -EFAULT;
708 input = dev->oss.input; 708 input = dev->dmasound.input;
709 if (32000 == dev->oss.rate && 709 if (32000 == dev->dmasound.rate &&
710 val & SOUND_MASK_VIDEO && dev->oss.input != TV) 710 val & SOUND_MASK_VIDEO && dev->dmasound.input != TV)
711 input = TV; 711 input = TV;
712 if (val & SOUND_MASK_LINE1 && dev->oss.input != LINE1) 712 if (val & SOUND_MASK_LINE1 && dev->dmasound.input != LINE1)
713 input = LINE1; 713 input = LINE1;
714 if (val & SOUND_MASK_LINE2 && dev->oss.input != LINE2) 714 if (val & SOUND_MASK_LINE2 && dev->dmasound.input != LINE2)
715 input = LINE2; 715 input = LINE2;
716 if (input != dev->oss.input) 716 if (input != dev->dmasound.input)
717 mixer_recsrc(dev,input); 717 mixer_recsrc(dev,input);
718 /* fall throuth */ 718 /* fall throuth */
719 case MIXER_READ(SOUND_MIXER_RECSRC): 719 case MIXER_READ(SOUND_MIXER_RECSRC):
720 switch (dev->oss.input) { 720 switch (dev->dmasound.input) {
721 case TV: ret = SOUND_MASK_VIDEO; break; 721 case TV: ret = SOUND_MASK_VIDEO; break;
722 case LINE1: ret = SOUND_MASK_LINE1; break; 722 case LINE1: ret = SOUND_MASK_LINE1; break;
723 case LINE2: ret = SOUND_MASK_LINE2; break; 723 case LINE2: ret = SOUND_MASK_LINE2; break;
@@ -727,7 +727,7 @@ static int mixer_ioctl(struct inode *inode, struct file *file,
727 727
728 case MIXER_WRITE(SOUND_MIXER_VIDEO): 728 case MIXER_WRITE(SOUND_MIXER_VIDEO):
729 case MIXER_READ(SOUND_MIXER_VIDEO): 729 case MIXER_READ(SOUND_MIXER_VIDEO):
730 if (32000 != dev->oss.rate) 730 if (32000 != dev->dmasound.rate)
731 return -EINVAL; 731 return -EINVAL;
732 return put_user(100 | 100 << 8, p); 732 return put_user(100 | 100 << 8, p);
733 733
@@ -736,22 +736,22 @@ static int mixer_ioctl(struct inode *inode, struct file *file,
736 return -EFAULT; 736 return -EFAULT;
737 val &= 0xff; 737 val &= 0xff;
738 val = (val <= 50) ? 50 : 100; 738 val = (val <= 50) ? 50 : 100;
739 dev->oss.line1 = val; 739 dev->dmasound.line1 = val;
740 mixer_level(dev,LINE1,dev->oss.line1); 740 mixer_level(dev,LINE1,dev->dmasound.line1);
741 /* fall throuth */ 741 /* fall throuth */
742 case MIXER_READ(SOUND_MIXER_LINE1): 742 case MIXER_READ(SOUND_MIXER_LINE1):
743 return put_user(dev->oss.line1 | dev->oss.line1 << 8, p); 743 return put_user(dev->dmasound.line1 | dev->dmasound.line1 << 8, p);
744 744
745 case MIXER_WRITE(SOUND_MIXER_LINE2): 745 case MIXER_WRITE(SOUND_MIXER_LINE2):
746 if (get_user(val, p)) 746 if (get_user(val, p))
747 return -EFAULT; 747 return -EFAULT;
748 val &= 0xff; 748 val &= 0xff;
749 val = (val <= 50) ? 50 : 100; 749 val = (val <= 50) ? 50 : 100;
750 dev->oss.line2 = val; 750 dev->dmasound.line2 = val;
751 mixer_level(dev,LINE2,dev->oss.line2); 751 mixer_level(dev,LINE2,dev->dmasound.line2);
752 /* fall throuth */ 752 /* fall throuth */
753 case MIXER_READ(SOUND_MIXER_LINE2): 753 case MIXER_READ(SOUND_MIXER_LINE2):
754 return put_user(dev->oss.line2 | dev->oss.line2 << 8, p); 754 return put_user(dev->dmasound.line2 | dev->dmasound.line2 << 8, p);
755 755
756 default: 756 default:
757 return -EINVAL; 757 return -EINVAL;
@@ -771,8 +771,8 @@ struct file_operations saa7134_mixer_fops = {
771int saa7134_oss_init1(struct saa7134_dev *dev) 771int saa7134_oss_init1(struct saa7134_dev *dev)
772{ 772{
773 /* general */ 773 /* general */
774 init_MUTEX(&dev->oss.lock); 774 init_MUTEX(&dev->dmasound.lock);
775 init_waitqueue_head(&dev->oss.wq); 775 init_waitqueue_head(&dev->dmasound.wq);
776 776
777 switch (dev->pci->device) { 777 switch (dev->pci->device) {
778 case PCI_DEVICE_ID_PHILIPS_SAA7133: 778 case PCI_DEVICE_ID_PHILIPS_SAA7133:
@@ -784,17 +784,17 @@ int saa7134_oss_init1(struct saa7134_dev *dev)
784 } 784 }
785 785
786 /* dsp */ 786 /* dsp */
787 dev->oss.rate = 32000; 787 dev->dmasound.rate = 32000;
788 if (oss_rate) 788 if (oss_rate)
789 dev->oss.rate = oss_rate; 789 dev->dmasound.rate = oss_rate;
790 dev->oss.rate = (dev->oss.rate > 40000) ? 48000 : 32000; 790 dev->dmasound.rate = (dev->dmasound.rate > 40000) ? 48000 : 32000;
791 791
792 /* mixer */ 792 /* mixer */
793 dev->oss.line1 = 50; 793 dev->dmasound.line1 = 50;
794 dev->oss.line2 = 50; 794 dev->dmasound.line2 = 50;
795 mixer_level(dev,LINE1,dev->oss.line1); 795 mixer_level(dev,LINE1,dev->dmasound.line1);
796 mixer_level(dev,LINE2,dev->oss.line2); 796 mixer_level(dev,LINE2,dev->dmasound.line2);
797 mixer_recsrc(dev, (dev->oss.rate == 32000) ? TV : LINE2); 797 mixer_recsrc(dev, (dev->dmasound.rate == 32000) ? TV : LINE2);
798 798
799 return 0; 799 return 0;
800} 800}
@@ -810,7 +810,7 @@ void saa7134_irq_oss_done(struct saa7134_dev *dev, unsigned long status)
810 int next_blk, reg = 0; 810 int next_blk, reg = 0;
811 811
812 spin_lock(&dev->slock); 812 spin_lock(&dev->slock);
813 if (UNSET == dev->oss.dma_blk) { 813 if (UNSET == dev->dmasound.dma_blk) {
814 dprintk("irq: recording stopped\n"); 814 dprintk("irq: recording stopped\n");
815 goto done; 815 goto done;
816 } 816 }
@@ -818,11 +818,11 @@ void saa7134_irq_oss_done(struct saa7134_dev *dev, unsigned long status)
818 dprintk("irq: lost %ld\n", (status >> 24) & 0x0f); 818 dprintk("irq: lost %ld\n", (status >> 24) & 0x0f);
819 if (0 == (status & 0x10000000)) { 819 if (0 == (status & 0x10000000)) {
820 /* odd */ 820 /* odd */
821 if (0 == (dev->oss.dma_blk & 0x01)) 821 if (0 == (dev->dmasound.dma_blk & 0x01))
822 reg = SAA7134_RS_BA1(6); 822 reg = SAA7134_RS_BA1(6);
823 } else { 823 } else {
824 /* even */ 824 /* even */
825 if (1 == (dev->oss.dma_blk & 0x01)) 825 if (1 == (dev->dmasound.dma_blk & 0x01))
826 reg = SAA7134_RS_BA2(6); 826 reg = SAA7134_RS_BA2(6);
827 } 827 }
828 if (0 == reg) { 828 if (0 == reg) {
@@ -830,25 +830,25 @@ void saa7134_irq_oss_done(struct saa7134_dev *dev, unsigned long status)
830 (status & 0x10000000) ? "even" : "odd"); 830 (status & 0x10000000) ? "even" : "odd");
831 goto done; 831 goto done;
832 } 832 }
833 if (dev->oss.read_count >= dev->oss.blksize * (dev->oss.blocks-2)) { 833 if (dev->dmasound.read_count >= dev->dmasound.blksize * (dev->dmasound.blocks-2)) {
834 dprintk("irq: overrun [full=%d/%d]\n",dev->oss.read_count, 834 dprintk("irq: overrun [full=%d/%d]\n",dev->dmasound.read_count,
835 dev->oss.bufsize); 835 dev->dmasound.bufsize);
836 dsp_dma_stop(dev); 836 dsp_dma_stop(dev);
837 goto done; 837 goto done;
838 } 838 }
839 839
840 /* next block addr */ 840 /* next block addr */
841 next_blk = (dev->oss.dma_blk + 2) % dev->oss.blocks; 841 next_blk = (dev->dmasound.dma_blk + 2) % dev->dmasound.blocks;
842 saa_writel(reg,next_blk * dev->oss.blksize); 842 saa_writel(reg,next_blk * dev->dmasound.blksize);
843 if (oss_debug > 2) 843 if (oss_debug > 2)
844 dprintk("irq: ok, %s, next_blk=%d, addr=%x\n", 844 dprintk("irq: ok, %s, next_blk=%d, addr=%x\n",
845 (status & 0x10000000) ? "even" : "odd ", next_blk, 845 (status & 0x10000000) ? "even" : "odd ", next_blk,
846 next_blk * dev->oss.blksize); 846 next_blk * dev->dmasound.blksize);
847 847
848 /* update status & wake waiting readers */ 848 /* update status & wake waiting readers */
849 dev->oss.dma_blk = (dev->oss.dma_blk + 1) % dev->oss.blocks; 849 dev->dmasound.dma_blk = (dev->dmasound.dma_blk + 1) % dev->dmasound.blocks;
850 dev->oss.read_count += dev->oss.blksize; 850 dev->dmasound.read_count += dev->dmasound.blksize;
851 wake_up(&dev->oss.wq); 851 wake_up(&dev->dmasound.wq);
852 852
853 done: 853 done:
854 spin_unlock(&dev->slock); 854 spin_unlock(&dev->slock);