~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/media/video/uvc/uvc_queue.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
        }
105
105
 
106
106
        if (queue->count) {
 
107
                uvc_queue_cancel(queue, 0);
 
108
                INIT_LIST_HEAD(&queue->mainqueue);
107
109
                vfree(queue->mem);
108
110
                queue->count = 0;
109
111
        }
424
426
                        break;
425
427
        }
426
428
 
427
 
        if (i == queue->count || size != queue->buf_size) {
 
429
        if (i == queue->count || PAGE_ALIGN(size) != queue->buf_size) {
428
430
                ret = -EINVAL;
429
431
                goto done;
430
432
        }
436
438
        vma->vm_flags |= VM_IO;
437
439
 
438
440
        addr = (unsigned long)queue->mem + buffer->buf.m.offset;
 
441
#ifdef CONFIG_MMU
439
442
        while (size > 0) {
440
443
                page = vmalloc_to_page((void *)addr);
441
444
                if ((ret = vm_insert_page(vma, start, page)) < 0)
445
448
                addr += PAGE_SIZE;
446
449
                size -= PAGE_SIZE;
447
450
        }
 
451
#endif
448
452
 
449
453
        vma->vm_ops = &uvc_vm_ops;
450
454
        vma->vm_private_data = buffer;
488
492
        return mask;
489
493
}
490
494
 
 
495
#ifndef CONFIG_MMU
 
496
/*
 
497
 * Get unmapped area.
 
498
 *
 
499
 * NO-MMU arch need this function to make mmap() work correctly.
 
500
 */
 
501
unsigned long uvc_queue_get_unmapped_area(struct uvc_video_queue *queue,
 
502
                unsigned long pgoff)
 
503
{
 
504
        struct uvc_buffer *buffer;
 
505
        unsigned int i;
 
506
        unsigned long ret;
 
507
 
 
508
        mutex_lock(&queue->mutex);
 
509
        for (i = 0; i < queue->count; ++i) {
 
510
                buffer = &queue->buffer[i];
 
511
                if ((buffer->buf.m.offset >> PAGE_SHIFT) == pgoff)
 
512
                        break;
 
513
        }
 
514
        if (i == queue->count) {
 
515
                ret = -EINVAL;
 
516
                goto done;
 
517
        }
 
518
        ret = (unsigned long)queue->mem + buffer->buf.m.offset;
 
519
done:
 
520
        mutex_unlock(&queue->mutex);
 
521
        return ret;
 
522
}
 
523
#endif
 
524
 
491
525
/*
492
526
 * Enable or disable the video buffers queue.
493
527
 *