diff options
author | Jean-Francois Moine <moinejf@free.fr> | 2009-12-15 03:16:04 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-02-26 13:10:26 -0500 |
commit | db870875c0e29ba051e58c848e1877df8e85b49f (patch) | |
tree | 51ecf35bab8b9436712ba1404a400fb7d673d7da | |
parent | 3205e4fe0d831c0457e9139794437e9999559150 (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.c | 25 | ||||
-rw-r--r-- | drivers/media/video/gspca/gspca.h | 1 |
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 = { | |||
108 | struct gspca_frame *gspca_get_i_frame(struct gspca_dev *gspca_dev) | 108 | struct 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, | |||
585 | static int gspca_init_transfer(struct gspca_dev *gspca_dev) | 578 | static 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 */ |