aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2009-12-15 03:16:04 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-02-26 13:10:26 -0500
commitdb870875c0e29ba051e58c848e1877df8e85b49f (patch)
tree51ecf35bab8b9436712ba1404a400fb7d673d7da
parent3205e4fe0d831c0457e9139794437e9999559150 (diff)
V4L/DVB (13865): gspca - main: Optimize code.
Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/gspca/gspca.c25
-rw-r--r--drivers/media/video/gspca/gspca.h1
2 files changed, 12 insertions, 14 deletions
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c
index bd6214d4ab3b..0e6a4ec0fec9 100644
--- a/drivers/media/video/gspca/gspca.c
+++ b/drivers/media/video/gspca/gspca.c
@@ -108,11 +108,8 @@ static const struct vm_operations_struct gspca_vm_ops = {
108struct gspca_frame *gspca_get_i_frame(struct gspca_dev *gspca_dev) 108struct gspca_frame *gspca_get_i_frame(struct gspca_dev *gspca_dev)
109{ 109{
110 struct gspca_frame *frame; 110 struct gspca_frame *frame;
111 int i;
112 111
113 i = gspca_dev->fr_i; 112 frame = gspca_dev->cur_frame;
114 i = gspca_dev->fr_queue[i];
115 frame = &gspca_dev->frame[i];
116 if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS) 113 if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS)
117 != V4L2_BUF_FLAG_QUEUED) 114 != V4L2_BUF_FLAG_QUEUED)
118 return NULL; 115 return NULL;
@@ -534,26 +531,22 @@ static int create_urbs(struct gspca_dev *gspca_dev,
534 nurbs = 1; 531 nurbs = 1;
535 } 532 }
536 533
537 gspca_dev->nurbs = nurbs;
538 for (n = 0; n < nurbs; n++) { 534 for (n = 0; n < nurbs; n++) {
539 urb = usb_alloc_urb(npkt, GFP_KERNEL); 535 urb = usb_alloc_urb(npkt, GFP_KERNEL);
540 if (!urb) { 536 if (!urb) {
541 err("usb_alloc_urb failed"); 537 err("usb_alloc_urb failed");
542 destroy_urbs(gspca_dev);
543 return -ENOMEM; 538 return -ENOMEM;
544 } 539 }
540 gspca_dev->urb[n] = urb;
545 urb->transfer_buffer = usb_buffer_alloc(gspca_dev->dev, 541 urb->transfer_buffer = usb_buffer_alloc(gspca_dev->dev,
546 bsize, 542 bsize,
547 GFP_KERNEL, 543 GFP_KERNEL,
548 &urb->transfer_dma); 544 &urb->transfer_dma);
549 545
550 if (urb->transfer_buffer == NULL) { 546 if (urb->transfer_buffer == NULL) {
551 usb_free_urb(urb); 547 err("usb_buffer_alloc failed");
552 err("usb_buffer_urb failed");
553 destroy_urbs(gspca_dev);
554 return -ENOMEM; 548 return -ENOMEM;
555 } 549 }
556 gspca_dev->urb[n] = urb;
557 urb->dev = gspca_dev->dev; 550 urb->dev = gspca_dev->dev;
558 urb->context = gspca_dev; 551 urb->context = gspca_dev;
559 urb->transfer_buffer_length = bsize; 552 urb->transfer_buffer_length = bsize;
@@ -585,6 +578,7 @@ static int create_urbs(struct gspca_dev *gspca_dev,
585static int gspca_init_transfer(struct gspca_dev *gspca_dev) 578static int gspca_init_transfer(struct gspca_dev *gspca_dev)
586{ 579{
587 struct usb_host_endpoint *ep; 580 struct usb_host_endpoint *ep;
581 struct urb *urb;
588 int n, ret; 582 int n, ret;
589 583
590 if (mutex_lock_interruptible(&gspca_dev->usb_lock)) 584 if (mutex_lock_interruptible(&gspca_dev->usb_lock))
@@ -615,8 +609,10 @@ static int gspca_init_transfer(struct gspca_dev *gspca_dev)
615 for (;;) { 609 for (;;) {
616 PDEBUG(D_STREAM, "init transfer alt %d", gspca_dev->alt); 610 PDEBUG(D_STREAM, "init transfer alt %d", gspca_dev->alt);
617 ret = create_urbs(gspca_dev, ep); 611 ret = create_urbs(gspca_dev, ep);
618 if (ret < 0) 612 if (ret < 0) {
613 destroy_urbs(gspca_dev);
619 goto out; 614 goto out;
615 }
620 616
621 /* clear the bulk endpoint */ 617 /* clear the bulk endpoint */
622 if (gspca_dev->cam.bulk) 618 if (gspca_dev->cam.bulk)
@@ -636,8 +632,11 @@ static int gspca_init_transfer(struct gspca_dev *gspca_dev)
636 break; 632 break;
637 633
638 /* submit the URBs */ 634 /* submit the URBs */
639 for (n = 0; n < gspca_dev->nurbs; n++) { 635 for (n = 0; n < MAX_NURBS; n++) {
640 ret = usb_submit_urb(gspca_dev->urb[n], GFP_KERNEL); 636 urb = gspca_dev->urb[n];
637 if (urb == NULL)
638 break;
639 ret = usb_submit_urb(urb, GFP_KERNEL);
641 if (ret < 0) 640 if (ret < 0)
642 break; 641 break;
643 } 642 }
diff --git a/drivers/media/video/gspca/gspca.h b/drivers/media/video/gspca/gspca.h
index 59c7941da999..f0b4cbc33bf3 100644
--- a/drivers/media/video/gspca/gspca.h
+++ b/drivers/media/video/gspca/gspca.h
@@ -187,7 +187,6 @@ struct gspca_dev {
187 char users; /* number of opens */ 187 char users; /* number of opens */
188 char present; /* device connected */ 188 char present; /* device connected */
189 char nbufread; /* number of buffers for read() */ 189 char nbufread; /* number of buffers for read() */
190 char nurbs; /* number of allocated URBs */
191 char memory; /* memory type (V4L2_MEMORY_xxx) */ 190 char memory; /* memory type (V4L2_MEMORY_xxx) */
192 __u8 iface; /* USB interface number */ 191 __u8 iface; /* USB interface number */
193 __u8 alt; /* USB alternate setting */ 192 __u8 alt; /* USB alternate setting */