diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-01-24 17:34:54 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-01-24 17:34:54 -0500 |
| commit | af469b374831f48744c14b60d3e6c928c5ce2ef0 (patch) | |
| tree | d0c3cefb36fb6f92cf1cc59b58aec9ff729271c3 | |
| parent | c4e00f1d31c4c83d15162782491689229bd92527 (diff) | |
| parent | 2c0108e1c02f9fc95f465adc4d2ce1ad8688290a (diff) | |
Merge tag 'media/v3.19-4' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media fixes from Mauro Carvalho Chehab:
- fix some race conditions caused by a regression on videobuf2
- fix a interrupt release bug on cx23885
- fix support for Mygica T230 and HVR4400
- fix compilation breakage when USB is not selected on tlg2300
- fix capabilities report on ompa3isp, soc-camera, rcar_vin and
pvrusb2
* tag 'media/v3.19-4' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
[media] omap3isp: Correctly set QUERYCAP capabilities
[media] cx23885: fix free interrupt bug
[media] pvrusb2: fix missing device_caps in querycap
[media] vb2: fix vb2_thread_stop race conditions
[media] rcar_vin: Update device_caps and capabilities in querycap
[media] soc-camera: fix device capabilities in multiple camera host drivers
[media] Fix Mygica T230 support
[media] cx23885: Split Hauppauge WinTV Starburst from HVR4400 card entry
[media] tlg2300: Fix media dependencies
| -rw-r--r-- | drivers/media/pci/cx23885/cx23885-cards.c | 23 | ||||
| -rw-r--r-- | drivers/media/pci/cx23885/cx23885-core.c | 4 | ||||
| -rw-r--r-- | drivers/media/pci/cx23885/cx23885-dvb.c | 11 | ||||
| -rw-r--r-- | drivers/media/pci/cx23885/cx23885.h | 1 | ||||
| -rw-r--r-- | drivers/media/platform/omap3isp/ispvideo.c | 7 | ||||
| -rw-r--r-- | drivers/media/platform/soc_camera/atmel-isi.c | 5 | ||||
| -rw-r--r-- | drivers/media/platform/soc_camera/mx2_camera.c | 3 | ||||
| -rw-r--r-- | drivers/media/platform/soc_camera/mx3_camera.c | 3 | ||||
| -rw-r--r-- | drivers/media/platform/soc_camera/omap1_camera.c | 3 | ||||
| -rw-r--r-- | drivers/media/platform/soc_camera/pxa_camera.c | 3 | ||||
| -rw-r--r-- | drivers/media/platform/soc_camera/rcar_vin.c | 4 | ||||
| -rw-r--r-- | drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c | 4 | ||||
| -rw-r--r-- | drivers/media/usb/dvb-usb/cxusb.c | 2 | ||||
| -rw-r--r-- | drivers/media/usb/pvrusb2/pvrusb2-v4l2.c | 24 | ||||
| -rw-r--r-- | drivers/media/v4l2-core/videobuf2-core.c | 19 | ||||
| -rw-r--r-- | drivers/staging/media/tlg2300/Kconfig | 1 |
16 files changed, 77 insertions, 40 deletions
diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c index db99ca2613ba..06931f6fa26c 100644 --- a/drivers/media/pci/cx23885/cx23885-cards.c +++ b/drivers/media/pci/cx23885/cx23885-cards.c | |||
| @@ -614,7 +614,7 @@ struct cx23885_board cx23885_boards[] = { | |||
| 614 | .portb = CX23885_MPEG_DVB, | 614 | .portb = CX23885_MPEG_DVB, |
| 615 | }, | 615 | }, |
| 616 | [CX23885_BOARD_HAUPPAUGE_HVR4400] = { | 616 | [CX23885_BOARD_HAUPPAUGE_HVR4400] = { |
| 617 | .name = "Hauppauge WinTV-HVR4400", | 617 | .name = "Hauppauge WinTV-HVR4400/HVR5500", |
| 618 | .porta = CX23885_ANALOG_VIDEO, | 618 | .porta = CX23885_ANALOG_VIDEO, |
| 619 | .portb = CX23885_MPEG_DVB, | 619 | .portb = CX23885_MPEG_DVB, |
| 620 | .portc = CX23885_MPEG_DVB, | 620 | .portc = CX23885_MPEG_DVB, |
| @@ -622,6 +622,10 @@ struct cx23885_board cx23885_boards[] = { | |||
| 622 | .tuner_addr = 0x60, /* 0xc0 >> 1 */ | 622 | .tuner_addr = 0x60, /* 0xc0 >> 1 */ |
| 623 | .tuner_bus = 1, | 623 | .tuner_bus = 1, |
| 624 | }, | 624 | }, |
| 625 | [CX23885_BOARD_HAUPPAUGE_STARBURST] = { | ||
| 626 | .name = "Hauppauge WinTV Starburst", | ||
| 627 | .portb = CX23885_MPEG_DVB, | ||
| 628 | }, | ||
| 625 | [CX23885_BOARD_AVERMEDIA_HC81R] = { | 629 | [CX23885_BOARD_AVERMEDIA_HC81R] = { |
| 626 | .name = "AVerTV Hybrid Express Slim HC81R", | 630 | .name = "AVerTV Hybrid Express Slim HC81R", |
| 627 | .tuner_type = TUNER_XC2028, | 631 | .tuner_type = TUNER_XC2028, |
| @@ -936,19 +940,19 @@ struct cx23885_subid cx23885_subids[] = { | |||
| 936 | }, { | 940 | }, { |
| 937 | .subvendor = 0x0070, | 941 | .subvendor = 0x0070, |
| 938 | .subdevice = 0xc108, | 942 | .subdevice = 0xc108, |
| 939 | .card = CX23885_BOARD_HAUPPAUGE_HVR4400, | 943 | .card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-4400 (Model 121xxx, Hybrid DVB-T/S2, IR) */ |
| 940 | }, { | 944 | }, { |
| 941 | .subvendor = 0x0070, | 945 | .subvendor = 0x0070, |
| 942 | .subdevice = 0xc138, | 946 | .subdevice = 0xc138, |
| 943 | .card = CX23885_BOARD_HAUPPAUGE_HVR4400, | 947 | .card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-5500 (Model 121xxx, Hybrid DVB-T/C/S2, IR) */ |
| 944 | }, { | 948 | }, { |
| 945 | .subvendor = 0x0070, | 949 | .subvendor = 0x0070, |
| 946 | .subdevice = 0xc12a, | 950 | .subdevice = 0xc12a, |
| 947 | .card = CX23885_BOARD_HAUPPAUGE_HVR4400, | 951 | .card = CX23885_BOARD_HAUPPAUGE_STARBURST, /* Hauppauge WinTV Starburst (Model 121x00, DVB-S2, IR) */ |
| 948 | }, { | 952 | }, { |
| 949 | .subvendor = 0x0070, | 953 | .subvendor = 0x0070, |
| 950 | .subdevice = 0xc1f8, | 954 | .subdevice = 0xc1f8, |
| 951 | .card = CX23885_BOARD_HAUPPAUGE_HVR4400, | 955 | .card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-5500 (Model 121xxx, Hybrid DVB-T/C/S2, IR) */ |
| 952 | }, { | 956 | }, { |
| 953 | .subvendor = 0x1461, | 957 | .subvendor = 0x1461, |
| 954 | .subdevice = 0xd939, | 958 | .subdevice = 0xd939, |
| @@ -1545,8 +1549,9 @@ void cx23885_gpio_setup(struct cx23885_dev *dev) | |||
| 1545 | cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/ | 1549 | cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/ |
| 1546 | break; | 1550 | break; |
| 1547 | case CX23885_BOARD_HAUPPAUGE_HVR4400: | 1551 | case CX23885_BOARD_HAUPPAUGE_HVR4400: |
| 1552 | case CX23885_BOARD_HAUPPAUGE_STARBURST: | ||
| 1548 | /* GPIO-8 tda10071 demod reset */ | 1553 | /* GPIO-8 tda10071 demod reset */ |
| 1549 | /* GPIO-9 si2165 demod reset */ | 1554 | /* GPIO-9 si2165 demod reset (only HVR4400/HVR5500)*/ |
| 1550 | 1555 | ||
| 1551 | /* Put the parts into reset and back */ | 1556 | /* Put the parts into reset and back */ |
| 1552 | cx23885_gpio_enable(dev, GPIO_8 | GPIO_9, 1); | 1557 | cx23885_gpio_enable(dev, GPIO_8 | GPIO_9, 1); |
| @@ -1872,6 +1877,7 @@ void cx23885_card_setup(struct cx23885_dev *dev) | |||
| 1872 | case CX23885_BOARD_HAUPPAUGE_HVR1850: | 1877 | case CX23885_BOARD_HAUPPAUGE_HVR1850: |
| 1873 | case CX23885_BOARD_HAUPPAUGE_HVR1290: | 1878 | case CX23885_BOARD_HAUPPAUGE_HVR1290: |
| 1874 | case CX23885_BOARD_HAUPPAUGE_HVR4400: | 1879 | case CX23885_BOARD_HAUPPAUGE_HVR4400: |
| 1880 | case CX23885_BOARD_HAUPPAUGE_STARBURST: | ||
| 1875 | case CX23885_BOARD_HAUPPAUGE_IMPACTVCBE: | 1881 | case CX23885_BOARD_HAUPPAUGE_IMPACTVCBE: |
| 1876 | if (dev->i2c_bus[0].i2c_rc == 0) | 1882 | if (dev->i2c_bus[0].i2c_rc == 0) |
| 1877 | hauppauge_eeprom(dev, eeprom+0xc0); | 1883 | hauppauge_eeprom(dev, eeprom+0xc0); |
| @@ -1980,6 +1986,11 @@ void cx23885_card_setup(struct cx23885_dev *dev) | |||
| 1980 | ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ | 1986 | ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ |
| 1981 | ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; | 1987 | ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; |
| 1982 | break; | 1988 | break; |
| 1989 | case CX23885_BOARD_HAUPPAUGE_STARBURST: | ||
| 1990 | ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ | ||
| 1991 | ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ | ||
| 1992 | ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; | ||
| 1993 | break; | ||
| 1983 | case CX23885_BOARD_DVBSKY_T9580: | 1994 | case CX23885_BOARD_DVBSKY_T9580: |
| 1984 | case CX23885_BOARD_DVBSKY_T982: | 1995 | case CX23885_BOARD_DVBSKY_T982: |
| 1985 | ts1->gen_ctrl_val = 0x5; /* Parallel */ | 1996 | ts1->gen_ctrl_val = 0x5; /* Parallel */ |
diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c index 1d9d0f86ca8c..1ad49946d7fa 100644 --- a/drivers/media/pci/cx23885/cx23885-core.c +++ b/drivers/media/pci/cx23885/cx23885-core.c | |||
| @@ -2049,11 +2049,11 @@ static void cx23885_finidev(struct pci_dev *pci_dev) | |||
| 2049 | 2049 | ||
| 2050 | cx23885_shutdown(dev); | 2050 | cx23885_shutdown(dev); |
| 2051 | 2051 | ||
| 2052 | pci_disable_device(pci_dev); | ||
| 2053 | |||
| 2054 | /* unregister stuff */ | 2052 | /* unregister stuff */ |
| 2055 | free_irq(pci_dev->irq, dev); | 2053 | free_irq(pci_dev->irq, dev); |
| 2056 | 2054 | ||
| 2055 | pci_disable_device(pci_dev); | ||
| 2056 | |||
| 2057 | cx23885_dev_unregister(dev); | 2057 | cx23885_dev_unregister(dev); |
| 2058 | vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); | 2058 | vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); |
| 2059 | v4l2_ctrl_handler_free(&dev->ctrl_handler); | 2059 | v4l2_ctrl_handler_free(&dev->ctrl_handler); |
diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c index c47d18270cfc..a9c450d4b54e 100644 --- a/drivers/media/pci/cx23885/cx23885-dvb.c +++ b/drivers/media/pci/cx23885/cx23885-dvb.c | |||
| @@ -1710,6 +1710,17 @@ static int dvb_register(struct cx23885_tsport *port) | |||
| 1710 | break; | 1710 | break; |
| 1711 | } | 1711 | } |
| 1712 | break; | 1712 | break; |
| 1713 | case CX23885_BOARD_HAUPPAUGE_STARBURST: | ||
| 1714 | i2c_bus = &dev->i2c_bus[0]; | ||
| 1715 | fe0->dvb.frontend = dvb_attach(tda10071_attach, | ||
| 1716 | &hauppauge_tda10071_config, | ||
| 1717 | &i2c_bus->i2c_adap); | ||
| 1718 | if (fe0->dvb.frontend != NULL) { | ||
| 1719 | dvb_attach(a8293_attach, fe0->dvb.frontend, | ||
| 1720 | &i2c_bus->i2c_adap, | ||
| 1721 | &hauppauge_a8293_config); | ||
| 1722 | } | ||
| 1723 | break; | ||
| 1713 | case CX23885_BOARD_DVBSKY_T9580: | 1724 | case CX23885_BOARD_DVBSKY_T9580: |
| 1714 | case CX23885_BOARD_DVBSKY_S950: | 1725 | case CX23885_BOARD_DVBSKY_S950: |
| 1715 | i2c_bus = &dev->i2c_bus[0]; | 1726 | i2c_bus = &dev->i2c_bus[0]; |
diff --git a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h index f55cd12da0fd..36f2f96c40e4 100644 --- a/drivers/media/pci/cx23885/cx23885.h +++ b/drivers/media/pci/cx23885/cx23885.h | |||
| @@ -99,6 +99,7 @@ | |||
| 99 | #define CX23885_BOARD_DVBSKY_S950 49 | 99 | #define CX23885_BOARD_DVBSKY_S950 49 |
| 100 | #define CX23885_BOARD_DVBSKY_S952 50 | 100 | #define CX23885_BOARD_DVBSKY_S952 50 |
| 101 | #define CX23885_BOARD_DVBSKY_T982 51 | 101 | #define CX23885_BOARD_DVBSKY_T982 51 |
| 102 | #define CX23885_BOARD_HAUPPAUGE_STARBURST 52 | ||
| 102 | 103 | ||
| 103 | #define GPIO_0 0x00000001 | 104 | #define GPIO_0 0x00000001 |
| 104 | #define GPIO_1 0x00000002 | 105 | #define GPIO_1 0x00000002 |
diff --git a/drivers/media/platform/omap3isp/ispvideo.c b/drivers/media/platform/omap3isp/ispvideo.c index b463fe172d16..3fe9047ef466 100644 --- a/drivers/media/platform/omap3isp/ispvideo.c +++ b/drivers/media/platform/omap3isp/ispvideo.c | |||
| @@ -602,10 +602,13 @@ isp_video_querycap(struct file *file, void *fh, struct v4l2_capability *cap) | |||
| 602 | strlcpy(cap->card, video->video.name, sizeof(cap->card)); | 602 | strlcpy(cap->card, video->video.name, sizeof(cap->card)); |
| 603 | strlcpy(cap->bus_info, "media", sizeof(cap->bus_info)); | 603 | strlcpy(cap->bus_info, "media", sizeof(cap->bus_info)); |
| 604 | 604 | ||
| 605 | cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OUTPUT | ||
| 606 | | V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS; | ||
| 607 | |||
| 605 | if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) | 608 | if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) |
| 606 | cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; | 609 | cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; |
| 607 | else | 610 | else |
| 608 | cap->capabilities = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING; | 611 | cap->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING; |
| 609 | 612 | ||
| 610 | return 0; | 613 | return 0; |
| 611 | } | 614 | } |
diff --git a/drivers/media/platform/soc_camera/atmel-isi.c b/drivers/media/platform/soc_camera/atmel-isi.c index 8efe40337608..6d885239b16a 100644 --- a/drivers/media/platform/soc_camera/atmel-isi.c +++ b/drivers/media/platform/soc_camera/atmel-isi.c | |||
| @@ -760,8 +760,9 @@ static int isi_camera_querycap(struct soc_camera_host *ici, | |||
| 760 | { | 760 | { |
| 761 | strcpy(cap->driver, "atmel-isi"); | 761 | strcpy(cap->driver, "atmel-isi"); |
| 762 | strcpy(cap->card, "Atmel Image Sensor Interface"); | 762 | strcpy(cap->card, "Atmel Image Sensor Interface"); |
| 763 | cap->capabilities = (V4L2_CAP_VIDEO_CAPTURE | | 763 | cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; |
| 764 | V4L2_CAP_STREAMING); | 764 | cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; |
| 765 | |||
| 765 | return 0; | 766 | return 0; |
| 766 | } | 767 | } |
| 767 | 768 | ||
diff --git a/drivers/media/platform/soc_camera/mx2_camera.c b/drivers/media/platform/soc_camera/mx2_camera.c index ce72bd26a6ac..192377f55840 100644 --- a/drivers/media/platform/soc_camera/mx2_camera.c +++ b/drivers/media/platform/soc_camera/mx2_camera.c | |||
| @@ -1256,7 +1256,8 @@ static int mx2_camera_querycap(struct soc_camera_host *ici, | |||
| 1256 | { | 1256 | { |
| 1257 | /* cap->name is set by the friendly caller:-> */ | 1257 | /* cap->name is set by the friendly caller:-> */ |
| 1258 | strlcpy(cap->card, MX2_CAM_DRIVER_DESCRIPTION, sizeof(cap->card)); | 1258 | strlcpy(cap->card, MX2_CAM_DRIVER_DESCRIPTION, sizeof(cap->card)); |
| 1259 | cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; | 1259 | cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; |
| 1260 | cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; | ||
| 1260 | 1261 | ||
| 1261 | return 0; | 1262 | return 0; |
| 1262 | } | 1263 | } |
diff --git a/drivers/media/platform/soc_camera/mx3_camera.c b/drivers/media/platform/soc_camera/mx3_camera.c index a60c3bb0e4cc..0b3299dee05d 100644 --- a/drivers/media/platform/soc_camera/mx3_camera.c +++ b/drivers/media/platform/soc_camera/mx3_camera.c | |||
| @@ -967,7 +967,8 @@ static int mx3_camera_querycap(struct soc_camera_host *ici, | |||
| 967 | { | 967 | { |
| 968 | /* cap->name is set by the firendly caller:-> */ | 968 | /* cap->name is set by the firendly caller:-> */ |
| 969 | strlcpy(cap->card, "i.MX3x Camera", sizeof(cap->card)); | 969 | strlcpy(cap->card, "i.MX3x Camera", sizeof(cap->card)); |
| 970 | cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; | 970 | cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; |
| 971 | cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; | ||
| 971 | 972 | ||
| 972 | return 0; | 973 | return 0; |
| 973 | } | 974 | } |
diff --git a/drivers/media/platform/soc_camera/omap1_camera.c b/drivers/media/platform/soc_camera/omap1_camera.c index e6b93281f246..16f65ecb70a3 100644 --- a/drivers/media/platform/soc_camera/omap1_camera.c +++ b/drivers/media/platform/soc_camera/omap1_camera.c | |||
| @@ -1427,7 +1427,8 @@ static int omap1_cam_querycap(struct soc_camera_host *ici, | |||
| 1427 | { | 1427 | { |
| 1428 | /* cap->name is set by the friendly caller:-> */ | 1428 | /* cap->name is set by the friendly caller:-> */ |
| 1429 | strlcpy(cap->card, "OMAP1 Camera", sizeof(cap->card)); | 1429 | strlcpy(cap->card, "OMAP1 Camera", sizeof(cap->card)); |
| 1430 | cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; | 1430 | cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; |
| 1431 | cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; | ||
| 1431 | 1432 | ||
| 1432 | return 0; | 1433 | return 0; |
| 1433 | } | 1434 | } |
diff --git a/drivers/media/platform/soc_camera/pxa_camera.c b/drivers/media/platform/soc_camera/pxa_camera.c index 951226af0eba..8d6e343fec0f 100644 --- a/drivers/media/platform/soc_camera/pxa_camera.c +++ b/drivers/media/platform/soc_camera/pxa_camera.c | |||
| @@ -1576,7 +1576,8 @@ static int pxa_camera_querycap(struct soc_camera_host *ici, | |||
| 1576 | { | 1576 | { |
| 1577 | /* cap->name is set by the firendly caller:-> */ | 1577 | /* cap->name is set by the firendly caller:-> */ |
| 1578 | strlcpy(cap->card, pxa_cam_driver_description, sizeof(cap->card)); | 1578 | strlcpy(cap->card, pxa_cam_driver_description, sizeof(cap->card)); |
| 1579 | cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; | 1579 | cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; |
| 1580 | cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; | ||
| 1580 | 1581 | ||
| 1581 | return 0; | 1582 | return 0; |
| 1582 | } | 1583 | } |
diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c index 0c1f55648106..9f1473c0a0cf 100644 --- a/drivers/media/platform/soc_camera/rcar_vin.c +++ b/drivers/media/platform/soc_camera/rcar_vin.c | |||
| @@ -1799,7 +1799,9 @@ static int rcar_vin_querycap(struct soc_camera_host *ici, | |||
| 1799 | struct v4l2_capability *cap) | 1799 | struct v4l2_capability *cap) |
| 1800 | { | 1800 | { |
| 1801 | strlcpy(cap->card, "R_Car_VIN", sizeof(cap->card)); | 1801 | strlcpy(cap->card, "R_Car_VIN", sizeof(cap->card)); |
| 1802 | cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; | 1802 | cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; |
| 1803 | cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; | ||
| 1804 | |||
| 1803 | return 0; | 1805 | return 0; |
| 1804 | } | 1806 | } |
| 1805 | 1807 | ||
diff --git a/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c b/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c index 8b27b3eb2b25..71787702d4a2 100644 --- a/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c +++ b/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c | |||
| @@ -1652,7 +1652,9 @@ static int sh_mobile_ceu_querycap(struct soc_camera_host *ici, | |||
| 1652 | struct v4l2_capability *cap) | 1652 | struct v4l2_capability *cap) |
| 1653 | { | 1653 | { |
| 1654 | strlcpy(cap->card, "SuperH_Mobile_CEU", sizeof(cap->card)); | 1654 | strlcpy(cap->card, "SuperH_Mobile_CEU", sizeof(cap->card)); |
| 1655 | cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; | 1655 | cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; |
| 1656 | cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; | ||
| 1657 | |||
| 1656 | return 0; | 1658 | return 0; |
| 1657 | } | 1659 | } |
| 1658 | 1660 | ||
diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c index 0f345b1f9014..f327c49d7e09 100644 --- a/drivers/media/usb/dvb-usb/cxusb.c +++ b/drivers/media/usb/dvb-usb/cxusb.c | |||
| @@ -2232,7 +2232,7 @@ static struct dvb_usb_device_properties cxusb_mygica_t230_properties = { | |||
| 2232 | { | 2232 | { |
| 2233 | "Mygica T230 DVB-T/T2/C", | 2233 | "Mygica T230 DVB-T/T2/C", |
| 2234 | { NULL }, | 2234 | { NULL }, |
| 2235 | { &cxusb_table[22], NULL }, | 2235 | { &cxusb_table[20], NULL }, |
| 2236 | }, | 2236 | }, |
| 2237 | } | 2237 | } |
| 2238 | }; | 2238 | }; |
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c index 1b158f1167ed..536210b39428 100644 --- a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c +++ b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c | |||
| @@ -89,16 +89,6 @@ static int vbi_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1}; | |||
| 89 | module_param_array(vbi_nr, int, NULL, 0444); | 89 | module_param_array(vbi_nr, int, NULL, 0444); |
| 90 | MODULE_PARM_DESC(vbi_nr, "Offset for device's vbi dev minor"); | 90 | MODULE_PARM_DESC(vbi_nr, "Offset for device's vbi dev minor"); |
| 91 | 91 | ||
| 92 | static struct v4l2_capability pvr_capability ={ | ||
| 93 | .driver = "pvrusb2", | ||
| 94 | .card = "Hauppauge WinTV pvr-usb2", | ||
| 95 | .bus_info = "usb", | ||
| 96 | .version = LINUX_VERSION_CODE, | ||
| 97 | .capabilities = (V4L2_CAP_VIDEO_CAPTURE | | ||
| 98 | V4L2_CAP_TUNER | V4L2_CAP_AUDIO | V4L2_CAP_RADIO | | ||
| 99 | V4L2_CAP_READWRITE), | ||
| 100 | }; | ||
| 101 | |||
| 102 | static struct v4l2_fmtdesc pvr_fmtdesc [] = { | 92 | static struct v4l2_fmtdesc pvr_fmtdesc [] = { |
| 103 | { | 93 | { |
| 104 | .index = 0, | 94 | .index = 0, |
| @@ -160,10 +150,22 @@ static int pvr2_querycap(struct file *file, void *priv, struct v4l2_capability * | |||
| 160 | struct pvr2_v4l2_fh *fh = file->private_data; | 150 | struct pvr2_v4l2_fh *fh = file->private_data; |
| 161 | struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; | 151 | struct pvr2_hdw *hdw = fh->channel.mc_head->hdw; |
| 162 | 152 | ||
| 163 | memcpy(cap, &pvr_capability, sizeof(struct v4l2_capability)); | 153 | strlcpy(cap->driver, "pvrusb2", sizeof(cap->driver)); |
| 164 | strlcpy(cap->bus_info, pvr2_hdw_get_bus_info(hdw), | 154 | strlcpy(cap->bus_info, pvr2_hdw_get_bus_info(hdw), |
| 165 | sizeof(cap->bus_info)); | 155 | sizeof(cap->bus_info)); |
| 166 | strlcpy(cap->card, pvr2_hdw_get_desc(hdw), sizeof(cap->card)); | 156 | strlcpy(cap->card, pvr2_hdw_get_desc(hdw), sizeof(cap->card)); |
| 157 | cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | | ||
| 158 | V4L2_CAP_AUDIO | V4L2_CAP_RADIO | | ||
| 159 | V4L2_CAP_READWRITE | V4L2_CAP_DEVICE_CAPS; | ||
| 160 | switch (fh->pdi->devbase.vfl_type) { | ||
| 161 | case VFL_TYPE_GRABBER: | ||
| 162 | cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_AUDIO; | ||
| 163 | break; | ||
| 164 | case VFL_TYPE_RADIO: | ||
| 165 | cap->device_caps = V4L2_CAP_RADIO; | ||
| 166 | break; | ||
| 167 | } | ||
| 168 | cap->device_caps |= V4L2_CAP_TUNER | V4L2_CAP_READWRITE; | ||
| 167 | return 0; | 169 | return 0; |
| 168 | } | 170 | } |
| 169 | 171 | ||
diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index d09a8916e940..bc08a829bc13 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c | |||
| @@ -3146,27 +3146,26 @@ static int vb2_thread(void *data) | |||
| 3146 | prequeue--; | 3146 | prequeue--; |
| 3147 | } else { | 3147 | } else { |
| 3148 | call_void_qop(q, wait_finish, q); | 3148 | call_void_qop(q, wait_finish, q); |
| 3149 | ret = vb2_internal_dqbuf(q, &fileio->b, 0); | 3149 | if (!threadio->stop) |
| 3150 | ret = vb2_internal_dqbuf(q, &fileio->b, 0); | ||
| 3150 | call_void_qop(q, wait_prepare, q); | 3151 | call_void_qop(q, wait_prepare, q); |
| 3151 | dprintk(5, "file io: vb2_dqbuf result: %d\n", ret); | 3152 | dprintk(5, "file io: vb2_dqbuf result: %d\n", ret); |
| 3152 | } | 3153 | } |
| 3153 | if (threadio->stop) | 3154 | if (ret || threadio->stop) |
| 3154 | break; | ||
| 3155 | if (ret) | ||
| 3156 | break; | 3155 | break; |
| 3157 | try_to_freeze(); | 3156 | try_to_freeze(); |
| 3158 | 3157 | ||
| 3159 | vb = q->bufs[fileio->b.index]; | 3158 | vb = q->bufs[fileio->b.index]; |
| 3160 | if (!(fileio->b.flags & V4L2_BUF_FLAG_ERROR)) | 3159 | if (!(fileio->b.flags & V4L2_BUF_FLAG_ERROR)) |
| 3161 | ret = threadio->fnc(vb, threadio->priv); | 3160 | if (threadio->fnc(vb, threadio->priv)) |
| 3162 | if (ret) | 3161 | break; |
| 3163 | break; | ||
| 3164 | call_void_qop(q, wait_finish, q); | 3162 | call_void_qop(q, wait_finish, q); |
| 3165 | if (set_timestamp) | 3163 | if (set_timestamp) |
| 3166 | v4l2_get_timestamp(&fileio->b.timestamp); | 3164 | v4l2_get_timestamp(&fileio->b.timestamp); |
| 3167 | ret = vb2_internal_qbuf(q, &fileio->b); | 3165 | if (!threadio->stop) |
| 3166 | ret = vb2_internal_qbuf(q, &fileio->b); | ||
| 3168 | call_void_qop(q, wait_prepare, q); | 3167 | call_void_qop(q, wait_prepare, q); |
| 3169 | if (ret) | 3168 | if (ret || threadio->stop) |
| 3170 | break; | 3169 | break; |
| 3171 | } | 3170 | } |
| 3172 | 3171 | ||
| @@ -3235,11 +3234,11 @@ int vb2_thread_stop(struct vb2_queue *q) | |||
| 3235 | threadio->stop = true; | 3234 | threadio->stop = true; |
| 3236 | vb2_internal_streamoff(q, q->type); | 3235 | vb2_internal_streamoff(q, q->type); |
| 3237 | call_void_qop(q, wait_prepare, q); | 3236 | call_void_qop(q, wait_prepare, q); |
| 3237 | err = kthread_stop(threadio->thread); | ||
| 3238 | q->fileio = NULL; | 3238 | q->fileio = NULL; |
| 3239 | fileio->req.count = 0; | 3239 | fileio->req.count = 0; |
| 3240 | vb2_reqbufs(q, &fileio->req); | 3240 | vb2_reqbufs(q, &fileio->req); |
| 3241 | kfree(fileio); | 3241 | kfree(fileio); |
| 3242 | err = kthread_stop(threadio->thread); | ||
| 3243 | threadio->thread = NULL; | 3242 | threadio->thread = NULL; |
| 3244 | kfree(threadio); | 3243 | kfree(threadio); |
| 3245 | q->fileio = NULL; | 3244 | q->fileio = NULL; |
diff --git a/drivers/staging/media/tlg2300/Kconfig b/drivers/staging/media/tlg2300/Kconfig index 81784c6f7b88..77d8753f6ba4 100644 --- a/drivers/staging/media/tlg2300/Kconfig +++ b/drivers/staging/media/tlg2300/Kconfig | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | config VIDEO_TLG2300 | 1 | config VIDEO_TLG2300 |
| 2 | tristate "Telegent TLG2300 USB video capture support (Deprecated)" | 2 | tristate "Telegent TLG2300 USB video capture support (Deprecated)" |
| 3 | depends on VIDEO_DEV && I2C && SND && DVB_CORE | 3 | depends on VIDEO_DEV && I2C && SND && DVB_CORE |
| 4 | depends on MEDIA_USB_SUPPORT | ||
| 4 | select VIDEO_TUNER | 5 | select VIDEO_TUNER |
| 5 | select VIDEO_TVEEPROM | 6 | select VIDEO_TVEEPROM |
| 6 | depends on RC_CORE | 7 | depends on RC_CORE |
