diff options
| -rw-r--r-- | drivers/media/video/gspca/conex.c | 3 | ||||
| -rw-r--r-- | drivers/media/video/gspca/finepix.c | 8 | ||||
| -rw-r--r-- | drivers/media/video/gspca/gspca.c | 17 | ||||
| -rw-r--r-- | drivers/media/video/gspca/gspca.h | 2 | ||||
| -rw-r--r-- | drivers/media/video/gspca/pac7311.c | 3 | ||||
| -rw-r--r-- | drivers/media/video/gspca/spca501.c | 3 | ||||
| -rw-r--r-- | drivers/media/video/gspca/spca505.c | 4 | ||||
| -rw-r--r-- | drivers/media/video/gspca/spca561.c | 3 | ||||
| -rw-r--r-- | drivers/media/video/gspca/vc032x.c | 3 | ||||
| -rw-r--r-- | drivers/media/video/gspca/zc3xx.c | 3 |
10 files changed, 39 insertions, 10 deletions
diff --git a/drivers/media/video/gspca/conex.c b/drivers/media/video/gspca/conex.c index a9d51ba7c57..de28354ea5b 100644 --- a/drivers/media/video/gspca/conex.c +++ b/drivers/media/video/gspca/conex.c | |||
| @@ -846,10 +846,13 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
| 846 | return 0; | 846 | return 0; |
| 847 | } | 847 | } |
| 848 | 848 | ||
| 849 | /* called on streamoff with alt 0 and on disconnect */ | ||
| 849 | static void sd_stop0(struct gspca_dev *gspca_dev) | 850 | static void sd_stop0(struct gspca_dev *gspca_dev) |
| 850 | { | 851 | { |
| 851 | int retry = 50; | 852 | int retry = 50; |
| 852 | 853 | ||
| 854 | if (!gspca_dev->present) | ||
| 855 | return; | ||
| 853 | reg_w_val(gspca_dev, 0x0000, 0x00); | 856 | reg_w_val(gspca_dev, 0x0000, 0x00); |
| 854 | reg_r(gspca_dev, 0x0002, 1); | 857 | reg_r(gspca_dev, 0x0002, 1); |
| 855 | reg_w_val(gspca_dev, 0x0053, 0x00); | 858 | reg_w_val(gspca_dev, 0x0053, 0x00); |
diff --git a/drivers/media/video/gspca/finepix.c b/drivers/media/video/gspca/finepix.c index 65d3cbfe6b2..607942fd797 100644 --- a/drivers/media/video/gspca/finepix.c +++ b/drivers/media/video/gspca/finepix.c | |||
| @@ -276,6 +276,12 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
| 276 | /* Stop the state machine */ | 276 | /* Stop the state machine */ |
| 277 | if (dev->state != FPIX_NOP) | 277 | if (dev->state != FPIX_NOP) |
| 278 | wait_for_completion(&dev->can_close); | 278 | wait_for_completion(&dev->can_close); |
| 279 | } | ||
| 280 | |||
| 281 | /* called on streamoff with alt 0 and disconnect */ | ||
| 282 | static void sd_stop0(struct gspca_dev *gspca_dev) | ||
| 283 | { | ||
| 284 | struct usb_fpix *dev = (struct usb_fpix *) gspca_dev; | ||
| 279 | 285 | ||
| 280 | usb_free_urb(dev->control_urb); | 286 | usb_free_urb(dev->control_urb); |
| 281 | dev->control_urb = NULL; | 287 | dev->control_urb = NULL; |
| @@ -385,6 +391,7 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
| 385 | error: | 391 | error: |
| 386 | /* Free the ressources */ | 392 | /* Free the ressources */ |
| 387 | sd_stopN(gspca_dev); | 393 | sd_stopN(gspca_dev); |
| 394 | sd_stop0(gspca_dev); | ||
| 388 | return ret; | 395 | return ret; |
| 389 | } | 396 | } |
| 390 | 397 | ||
| @@ -425,6 +432,7 @@ static const struct sd_desc sd_desc = { | |||
| 425 | .init = sd_init, | 432 | .init = sd_init, |
| 426 | .start = sd_start, | 433 | .start = sd_start, |
| 427 | .stopN = sd_stopN, | 434 | .stopN = sd_stopN, |
| 435 | .stop0 = sd_stop0, | ||
| 428 | }; | 436 | }; |
| 429 | 437 | ||
| 430 | /* -- device connect -- */ | 438 | /* -- device connect -- */ |
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c index e48fbfc8ad0..f28d2f4acea 100644 --- a/drivers/media/video/gspca/gspca.c +++ b/drivers/media/video/gspca/gspca.c | |||
| @@ -646,15 +646,14 @@ static void gspca_stream_off(struct gspca_dev *gspca_dev) | |||
| 646 | { | 646 | { |
| 647 | gspca_dev->streaming = 0; | 647 | gspca_dev->streaming = 0; |
| 648 | atomic_set(&gspca_dev->nevent, 0); | 648 | atomic_set(&gspca_dev->nevent, 0); |
| 649 | if (gspca_dev->present) { | 649 | if (gspca_dev->present |
| 650 | if (gspca_dev->sd_desc->stopN) | 650 | && gspca_dev->sd_desc->stopN) |
| 651 | gspca_dev->sd_desc->stopN(gspca_dev); | 651 | gspca_dev->sd_desc->stopN(gspca_dev); |
| 652 | destroy_urbs(gspca_dev); | 652 | destroy_urbs(gspca_dev); |
| 653 | gspca_set_alt0(gspca_dev); | 653 | gspca_set_alt0(gspca_dev); |
| 654 | if (gspca_dev->sd_desc->stop0) | 654 | if (gspca_dev->sd_desc->stop0) |
| 655 | gspca_dev->sd_desc->stop0(gspca_dev); | 655 | gspca_dev->sd_desc->stop0(gspca_dev); |
| 656 | PDEBUG(D_STREAM, "stream off OK"); | 656 | PDEBUG(D_STREAM, "stream off OK"); |
| 657 | } | ||
| 658 | } | 657 | } |
| 659 | 658 | ||
| 660 | static void gspca_set_default_mode(struct gspca_dev *gspca_dev) | 659 | static void gspca_set_default_mode(struct gspca_dev *gspca_dev) |
diff --git a/drivers/media/video/gspca/gspca.h b/drivers/media/video/gspca/gspca.h index 1d9dc90b479..c35d7b97112 100644 --- a/drivers/media/video/gspca/gspca.h +++ b/drivers/media/video/gspca/gspca.h | |||
| @@ -97,7 +97,7 @@ struct sd_desc { | |||
| 97 | cam_pkt_op pkt_scan; | 97 | cam_pkt_op pkt_scan; |
| 98 | /* optional operations */ | 98 | /* optional operations */ |
| 99 | cam_v_op stopN; /* called on stream off - main alt */ | 99 | cam_v_op stopN; /* called on stream off - main alt */ |
| 100 | cam_v_op stop0; /* called on stream off - alt 0 */ | 100 | cam_v_op stop0; /* called on stream off & disconnect - alt 0 */ |
| 101 | cam_v_op dq_callback; /* called when a frame has been dequeued */ | 101 | cam_v_op dq_callback; /* called when a frame has been dequeued */ |
| 102 | cam_jpg_op get_jcomp; | 102 | cam_jpg_op get_jcomp; |
| 103 | cam_jpg_op set_jcomp; | 103 | cam_jpg_op set_jcomp; |
diff --git a/drivers/media/video/gspca/pac7311.c b/drivers/media/video/gspca/pac7311.c index e5ff9a6199e..fbd45e235d9 100644 --- a/drivers/media/video/gspca/pac7311.c +++ b/drivers/media/video/gspca/pac7311.c | |||
| @@ -749,10 +749,13 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
| 749 | reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ | 749 | reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ |
| 750 | } | 750 | } |
| 751 | 751 | ||
| 752 | /* called on streamoff with alt 0 and on disconnect */ | ||
| 752 | static void sd_stop0(struct gspca_dev *gspca_dev) | 753 | static void sd_stop0(struct gspca_dev *gspca_dev) |
| 753 | { | 754 | { |
| 754 | struct sd *sd = (struct sd *) gspca_dev; | 755 | struct sd *sd = (struct sd *) gspca_dev; |
| 755 | 756 | ||
| 757 | if (!gspca_dev->present) | ||
| 758 | return; | ||
| 756 | if (sd->sensor == SENSOR_PAC7302) { | 759 | if (sd->sensor == SENSOR_PAC7302) { |
| 757 | reg_w(gspca_dev, 0xff, 0x01); | 760 | reg_w(gspca_dev, 0xff, 0x01); |
| 758 | reg_w(gspca_dev, 0x78, 0x40); | 761 | reg_w(gspca_dev, 0x78, 0x40); |
diff --git a/drivers/media/video/gspca/spca501.c b/drivers/media/video/gspca/spca501.c index b742f260c7c..e29954c1c38 100644 --- a/drivers/media/video/gspca/spca501.c +++ b/drivers/media/video/gspca/spca501.c | |||
| @@ -2022,8 +2022,11 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
| 2022 | reg_write(gspca_dev->dev, SPCA501_REG_CTLRL, 0x01, 0x00); | 2022 | reg_write(gspca_dev->dev, SPCA501_REG_CTLRL, 0x01, 0x00); |
| 2023 | } | 2023 | } |
| 2024 | 2024 | ||
| 2025 | /* called on streamoff with alt 0 and on disconnect */ | ||
| 2025 | static void sd_stop0(struct gspca_dev *gspca_dev) | 2026 | static void sd_stop0(struct gspca_dev *gspca_dev) |
| 2026 | { | 2027 | { |
| 2028 | if (!gspca_dev->present) | ||
| 2029 | return; | ||
| 2027 | reg_write(gspca_dev->dev, SPCA501_REG_CTLRL, 0x05, 0x00); | 2030 | reg_write(gspca_dev->dev, SPCA501_REG_CTLRL, 0x05, 0x00); |
| 2028 | } | 2031 | } |
| 2029 | 2032 | ||
diff --git a/drivers/media/video/gspca/spca505.c b/drivers/media/video/gspca/spca505.c index b345749213c..895b9fe4018 100644 --- a/drivers/media/video/gspca/spca505.c +++ b/drivers/media/video/gspca/spca505.c | |||
| @@ -742,8 +742,12 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
| 742 | reg_write(gspca_dev->dev, 0x02, 0x00, 0x00); | 742 | reg_write(gspca_dev->dev, 0x02, 0x00, 0x00); |
| 743 | } | 743 | } |
| 744 | 744 | ||
| 745 | /* called on streamoff with alt 0 and on disconnect */ | ||
| 745 | static void sd_stop0(struct gspca_dev *gspca_dev) | 746 | static void sd_stop0(struct gspca_dev *gspca_dev) |
| 746 | { | 747 | { |
| 748 | if (!gspca_dev->present) | ||
| 749 | return; | ||
| 750 | |||
| 747 | /* This maybe reset or power control */ | 751 | /* This maybe reset or power control */ |
| 748 | reg_write(gspca_dev->dev, 0x03, 0x03, 0x20); | 752 | reg_write(gspca_dev->dev, 0x03, 0x03, 0x20); |
| 749 | reg_write(gspca_dev->dev, 0x03, 0x01, 0x0); | 753 | reg_write(gspca_dev->dev, 0x03, 0x01, 0x0); |
diff --git a/drivers/media/video/gspca/spca561.c b/drivers/media/video/gspca/spca561.c index 020a03c466c..c3de4e44123 100644 --- a/drivers/media/video/gspca/spca561.c +++ b/drivers/media/video/gspca/spca561.c | |||
| @@ -766,10 +766,13 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
| 766 | } | 766 | } |
| 767 | } | 767 | } |
| 768 | 768 | ||
| 769 | /* called on streamoff with alt 0 and on disconnect */ | ||
| 769 | static void sd_stop0(struct gspca_dev *gspca_dev) | 770 | static void sd_stop0(struct gspca_dev *gspca_dev) |
| 770 | { | 771 | { |
| 771 | struct sd *sd = (struct sd *) gspca_dev; | 772 | struct sd *sd = (struct sd *) gspca_dev; |
| 772 | 773 | ||
| 774 | if (!gspca_dev->present) | ||
| 775 | return; | ||
| 773 | if (sd->chip_revision == Rev012A) { | 776 | if (sd->chip_revision == Rev012A) { |
| 774 | reg_w_val(gspca_dev->dev, 0x8118, 0x29); | 777 | reg_w_val(gspca_dev->dev, 0x8118, 0x29); |
| 775 | reg_w_val(gspca_dev->dev, 0x8114, 0x08); | 778 | reg_w_val(gspca_dev->dev, 0x8114, 0x08); |
diff --git a/drivers/media/video/gspca/vc032x.c b/drivers/media/video/gspca/vc032x.c index be46d923254..17af353ddd1 100644 --- a/drivers/media/video/gspca/vc032x.c +++ b/drivers/media/video/gspca/vc032x.c | |||
| @@ -1633,10 +1633,13 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
| 1633 | reg_w(dev, 0xa0, 0x09, 0xb003); | 1633 | reg_w(dev, 0xa0, 0x09, 0xb003); |
| 1634 | } | 1634 | } |
| 1635 | 1635 | ||
| 1636 | /* called on streamoff with alt 0 and on disconnect */ | ||
| 1636 | static void sd_stop0(struct gspca_dev *gspca_dev) | 1637 | static void sd_stop0(struct gspca_dev *gspca_dev) |
| 1637 | { | 1638 | { |
| 1638 | struct usb_device *dev = gspca_dev->dev; | 1639 | struct usb_device *dev = gspca_dev->dev; |
| 1639 | 1640 | ||
| 1641 | if (!gspca_dev->present) | ||
| 1642 | return; | ||
| 1640 | reg_w(dev, 0x89, 0xffff, 0xffff); | 1643 | reg_w(dev, 0x89, 0xffff, 0xffff); |
| 1641 | } | 1644 | } |
| 1642 | 1645 | ||
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c index 8b3101d347c..0befacf4985 100644 --- a/drivers/media/video/gspca/zc3xx.c +++ b/drivers/media/video/gspca/zc3xx.c | |||
| @@ -7336,10 +7336,13 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
| 7336 | return 0; | 7336 | return 0; |
| 7337 | } | 7337 | } |
| 7338 | 7338 | ||
| 7339 | /* called on streamoff with alt 0 and on disconnect */ | ||
| 7339 | static void sd_stop0(struct gspca_dev *gspca_dev) | 7340 | static void sd_stop0(struct gspca_dev *gspca_dev) |
| 7340 | { | 7341 | { |
| 7341 | struct sd *sd = (struct sd *) gspca_dev; | 7342 | struct sd *sd = (struct sd *) gspca_dev; |
| 7342 | 7343 | ||
| 7344 | if (!gspca_dev->present) | ||
| 7345 | return; | ||
| 7343 | send_unknown(gspca_dev->dev, sd->sensor); | 7346 | send_unknown(gspca_dev->dev, sd->sensor); |
| 7344 | } | 7347 | } |
| 7345 | 7348 | ||
