diff options
Diffstat (limited to 'drivers/media/video/saa7134/saa7134-oss.c')
| -rw-r--r-- | drivers/media/video/saa7134/saa7134-oss.c | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/drivers/media/video/saa7134/saa7134-oss.c b/drivers/media/video/saa7134/saa7134-oss.c index 7448e386a804..d79d05f88705 100644 --- a/drivers/media/video/saa7134/saa7134-oss.c +++ b/drivers/media/video/saa7134/saa7134-oss.c | |||
| @@ -84,8 +84,7 @@ static int dsp_buffer_init(struct saa7134_dev *dev) | |||
| 84 | { | 84 | { |
| 85 | int err; | 85 | int err; |
| 86 | 86 | ||
| 87 | if (!dev->dmasound.bufsize) | 87 | BUG_ON(!dev->dmasound.bufsize); |
| 88 | BUG(); | ||
| 89 | videobuf_dma_init(&dev->dmasound.dma); | 88 | videobuf_dma_init(&dev->dmasound.dma); |
| 90 | err = videobuf_dma_init_kernel(&dev->dmasound.dma, PCI_DMA_FROMDEVICE, | 89 | err = videobuf_dma_init_kernel(&dev->dmasound.dma, PCI_DMA_FROMDEVICE, |
| 91 | (dev->dmasound.bufsize + PAGE_SIZE) >> PAGE_SHIFT); | 90 | (dev->dmasound.bufsize + PAGE_SIZE) >> PAGE_SHIFT); |
| @@ -96,8 +95,7 @@ static int dsp_buffer_init(struct saa7134_dev *dev) | |||
| 96 | 95 | ||
| 97 | static int dsp_buffer_free(struct saa7134_dev *dev) | 96 | static int dsp_buffer_free(struct saa7134_dev *dev) |
| 98 | { | 97 | { |
| 99 | if (!dev->dmasound.blksize) | 98 | BUG_ON(!dev->dmasound.blksize); |
| 100 | BUG(); | ||
| 101 | videobuf_dma_free(&dev->dmasound.dma); | 99 | videobuf_dma_free(&dev->dmasound.dma); |
| 102 | dev->dmasound.blocks = 0; | 100 | dev->dmasound.blocks = 0; |
| 103 | dev->dmasound.blksize = 0; | 101 | dev->dmasound.blksize = 0; |
| @@ -254,7 +252,7 @@ static int dsp_open(struct inode *inode, struct file *file) | |||
| 254 | if (NULL == dev) | 252 | if (NULL == dev) |
| 255 | return -ENODEV; | 253 | return -ENODEV; |
| 256 | 254 | ||
| 257 | down(&dev->dmasound.lock); | 255 | mutex_lock(&dev->dmasound.lock); |
| 258 | err = -EBUSY; | 256 | err = -EBUSY; |
| 259 | if (dev->dmasound.users_dsp) | 257 | if (dev->dmasound.users_dsp) |
| 260 | goto fail1; | 258 | goto fail1; |
| @@ -270,13 +268,13 @@ static int dsp_open(struct inode *inode, struct file *file) | |||
| 270 | if (0 != err) | 268 | if (0 != err) |
| 271 | goto fail2; | 269 | goto fail2; |
| 272 | 270 | ||
| 273 | up(&dev->dmasound.lock); | 271 | mutex_unlock(&dev->dmasound.lock); |
| 274 | return 0; | 272 | return 0; |
| 275 | 273 | ||
| 276 | fail2: | 274 | fail2: |
| 277 | dev->dmasound.users_dsp--; | 275 | dev->dmasound.users_dsp--; |
| 278 | fail1: | 276 | fail1: |
| 279 | up(&dev->dmasound.lock); | 277 | mutex_unlock(&dev->dmasound.lock); |
| 280 | return err; | 278 | return err; |
| 281 | } | 279 | } |
| 282 | 280 | ||
| @@ -284,13 +282,13 @@ static int dsp_release(struct inode *inode, struct file *file) | |||
| 284 | { | 282 | { |
| 285 | struct saa7134_dev *dev = file->private_data; | 283 | struct saa7134_dev *dev = file->private_data; |
| 286 | 284 | ||
| 287 | down(&dev->dmasound.lock); | 285 | mutex_lock(&dev->dmasound.lock); |
| 288 | if (dev->dmasound.recording_on) | 286 | if (dev->dmasound.recording_on) |
| 289 | dsp_rec_stop(dev); | 287 | dsp_rec_stop(dev); |
| 290 | dsp_buffer_free(dev); | 288 | dsp_buffer_free(dev); |
| 291 | dev->dmasound.users_dsp--; | 289 | dev->dmasound.users_dsp--; |
| 292 | file->private_data = NULL; | 290 | file->private_data = NULL; |
| 293 | up(&dev->dmasound.lock); | 291 | mutex_unlock(&dev->dmasound.lock); |
| 294 | return 0; | 292 | return 0; |
| 295 | } | 293 | } |
| 296 | 294 | ||
| @@ -304,7 +302,7 @@ static ssize_t dsp_read(struct file *file, char __user *buffer, | |||
| 304 | int err,ret = 0; | 302 | int err,ret = 0; |
| 305 | 303 | ||
| 306 | add_wait_queue(&dev->dmasound.wq, &wait); | 304 | add_wait_queue(&dev->dmasound.wq, &wait); |
| 307 | down(&dev->dmasound.lock); | 305 | mutex_lock(&dev->dmasound.lock); |
| 308 | while (count > 0) { | 306 | while (count > 0) { |
| 309 | /* wait for data if needed */ | 307 | /* wait for data if needed */ |
| 310 | if (0 == dev->dmasound.read_count) { | 308 | if (0 == dev->dmasound.read_count) { |
| @@ -328,12 +326,12 @@ static ssize_t dsp_read(struct file *file, char __user *buffer, | |||
| 328 | ret = -EAGAIN; | 326 | ret = -EAGAIN; |
| 329 | break; | 327 | break; |
| 330 | } | 328 | } |
| 331 | up(&dev->dmasound.lock); | 329 | mutex_unlock(&dev->dmasound.lock); |
| 332 | set_current_state(TASK_INTERRUPTIBLE); | 330 | set_current_state(TASK_INTERRUPTIBLE); |
| 333 | if (0 == dev->dmasound.read_count) | 331 | if (0 == dev->dmasound.read_count) |
| 334 | schedule(); | 332 | schedule(); |
| 335 | set_current_state(TASK_RUNNING); | 333 | set_current_state(TASK_RUNNING); |
| 336 | down(&dev->dmasound.lock); | 334 | mutex_lock(&dev->dmasound.lock); |
| 337 | if (signal_pending(current)) { | 335 | if (signal_pending(current)) { |
| 338 | if (0 == ret) | 336 | if (0 == ret) |
| 339 | ret = -EINTR; | 337 | ret = -EINTR; |
| @@ -362,7 +360,7 @@ static ssize_t dsp_read(struct file *file, char __user *buffer, | |||
| 362 | if (dev->dmasound.read_offset == dev->dmasound.bufsize) | 360 | if (dev->dmasound.read_offset == dev->dmasound.bufsize) |
| 363 | dev->dmasound.read_offset = 0; | 361 | dev->dmasound.read_offset = 0; |
| 364 | } | 362 | } |
| 365 | up(&dev->dmasound.lock); | 363 | mutex_unlock(&dev->dmasound.lock); |
| 366 | remove_wait_queue(&dev->dmasound.wq, &wait); | 364 | remove_wait_queue(&dev->dmasound.wq, &wait); |
| 367 | return ret; | 365 | return ret; |
| 368 | } | 366 | } |
| @@ -435,13 +433,13 @@ static int dsp_ioctl(struct inode *inode, struct file *file, | |||
| 435 | case SNDCTL_DSP_STEREO: | 433 | case SNDCTL_DSP_STEREO: |
| 436 | if (get_user(val, p)) | 434 | if (get_user(val, p)) |
| 437 | return -EFAULT; | 435 | return -EFAULT; |
| 438 | down(&dev->dmasound.lock); | 436 | mutex_lock(&dev->dmasound.lock); |
| 439 | dev->dmasound.channels = val ? 2 : 1; | 437 | dev->dmasound.channels = val ? 2 : 1; |
| 440 | if (dev->dmasound.recording_on) { | 438 | if (dev->dmasound.recording_on) { |
| 441 | dsp_rec_stop(dev); | 439 | dsp_rec_stop(dev); |
| 442 | dsp_rec_start(dev); | 440 | dsp_rec_start(dev); |
| 443 | } | 441 | } |
| 444 | up(&dev->dmasound.lock); | 442 | mutex_unlock(&dev->dmasound.lock); |
| 445 | return put_user(dev->dmasound.channels-1, p); | 443 | return put_user(dev->dmasound.channels-1, p); |
| 446 | 444 | ||
| 447 | case SNDCTL_DSP_CHANNELS: | 445 | case SNDCTL_DSP_CHANNELS: |
| @@ -449,13 +447,13 @@ static int dsp_ioctl(struct inode *inode, struct file *file, | |||
| 449 | return -EFAULT; | 447 | return -EFAULT; |
| 450 | if (val != 1 && val != 2) | 448 | if (val != 1 && val != 2) |
| 451 | return -EINVAL; | 449 | return -EINVAL; |
| 452 | down(&dev->dmasound.lock); | 450 | mutex_lock(&dev->dmasound.lock); |
| 453 | dev->dmasound.channels = val; | 451 | dev->dmasound.channels = val; |
| 454 | if (dev->dmasound.recording_on) { | 452 | if (dev->dmasound.recording_on) { |
| 455 | dsp_rec_stop(dev); | 453 | dsp_rec_stop(dev); |
| 456 | dsp_rec_start(dev); | 454 | dsp_rec_start(dev); |
| 457 | } | 455 | } |
| 458 | up(&dev->dmasound.lock); | 456 | mutex_unlock(&dev->dmasound.lock); |
| 459 | /* fall through */ | 457 | /* fall through */ |
| 460 | case SOUND_PCM_READ_CHANNELS: | 458 | case SOUND_PCM_READ_CHANNELS: |
| 461 | return put_user(dev->dmasound.channels, p); | 459 | return put_user(dev->dmasound.channels, p); |
| @@ -478,13 +476,13 @@ static int dsp_ioctl(struct inode *inode, struct file *file, | |||
| 478 | case AFMT_U16_BE: | 476 | case AFMT_U16_BE: |
| 479 | case AFMT_S16_LE: | 477 | case AFMT_S16_LE: |
| 480 | case AFMT_S16_BE: | 478 | case AFMT_S16_BE: |
| 481 | down(&dev->dmasound.lock); | 479 | mutex_lock(&dev->dmasound.lock); |
| 482 | dev->dmasound.afmt = val; | 480 | dev->dmasound.afmt = val; |
| 483 | if (dev->dmasound.recording_on) { | 481 | if (dev->dmasound.recording_on) { |
| 484 | dsp_rec_stop(dev); | 482 | dsp_rec_stop(dev); |
| 485 | dsp_rec_start(dev); | 483 | dsp_rec_start(dev); |
| 486 | } | 484 | } |
| 487 | up(&dev->dmasound.lock); | 485 | mutex_unlock(&dev->dmasound.lock); |
| 488 | return put_user(dev->dmasound.afmt, p); | 486 | return put_user(dev->dmasound.afmt, p); |
| 489 | default: | 487 | default: |
| 490 | return -EINVAL; | 488 | return -EINVAL; |
| @@ -509,10 +507,10 @@ static int dsp_ioctl(struct inode *inode, struct file *file, | |||
| 509 | return 0; | 507 | return 0; |
| 510 | 508 | ||
| 511 | case SNDCTL_DSP_RESET: | 509 | case SNDCTL_DSP_RESET: |
| 512 | down(&dev->dmasound.lock); | 510 | mutex_lock(&dev->dmasound.lock); |
| 513 | if (dev->dmasound.recording_on) | 511 | if (dev->dmasound.recording_on) |
| 514 | dsp_rec_stop(dev); | 512 | dsp_rec_stop(dev); |
| 515 | up(&dev->dmasound.lock); | 513 | mutex_unlock(&dev->dmasound.lock); |
| 516 | return 0; | 514 | return 0; |
| 517 | case SNDCTL_DSP_GETBLKSIZE: | 515 | case SNDCTL_DSP_GETBLKSIZE: |
| 518 | return put_user(dev->dmasound.blksize, p); | 516 | return put_user(dev->dmasound.blksize, p); |
| @@ -556,10 +554,10 @@ static unsigned int dsp_poll(struct file *file, struct poll_table_struct *wait) | |||
| 556 | poll_wait(file, &dev->dmasound.wq, wait); | 554 | poll_wait(file, &dev->dmasound.wq, wait); |
| 557 | 555 | ||
| 558 | if (0 == dev->dmasound.read_count) { | 556 | if (0 == dev->dmasound.read_count) { |
| 559 | down(&dev->dmasound.lock); | 557 | mutex_lock(&dev->dmasound.lock); |
| 560 | if (!dev->dmasound.recording_on) | 558 | if (!dev->dmasound.recording_on) |
| 561 | dsp_rec_start(dev); | 559 | dsp_rec_start(dev); |
| 562 | up(&dev->dmasound.lock); | 560 | mutex_unlock(&dev->dmasound.lock); |
| 563 | } else | 561 | } else |
| 564 | mask |= (POLLIN | POLLRDNORM); | 562 | mask |= (POLLIN | POLLRDNORM); |
| 565 | return mask; | 563 | return mask; |
| @@ -852,7 +850,7 @@ int saa7134_oss_init1(struct saa7134_dev *dev) | |||
| 852 | return -1; | 850 | return -1; |
| 853 | 851 | ||
| 854 | /* general */ | 852 | /* general */ |
| 855 | init_MUTEX(&dev->dmasound.lock); | 853 | mutex_init(&dev->dmasound.lock); |
| 856 | init_waitqueue_head(&dev->dmasound.wq); | 854 | init_waitqueue_head(&dev->dmasound.wq); |
| 857 | 855 | ||
| 858 | switch (dev->pci->device) { | 856 | switch (dev->pci->device) { |
