media fixes for v3.19-rc6
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJUwkroAAoJEAhfPr2O5OEVYBYP/R8uGJ6nelba4qQ/S2K7UvOK +7eCIlO3K2ugU5Va4qhSgkhNKe1z/YqF2t443WyHFdBNt2IfFCugS4lulSJI8SXF UFO0HPqmvvc2QpcLC5HX3luk6Xqwanbxi88SO3ty6GaDidnoQHBga9LTLukfiXyE 4buZ/NZReEDW/TDg+6o0Wa3Mpnzv2FKgKlbyOLmM3IHhNXm4Ejm7aWivfl+4LSIz yti8eoPgOgFGtmI0fAC5Bh3gPutsDnn/39OzxQVnOgqIDyJlIhJhGUDnCftNesqZ FvGCTHYW0iaXBPNxrdy5q2fY/vyITXCXLspI6pKhprtK5cQikvHlvzUNHKXBH36o 1vLjELOMS9evA98vj8d4OzjaspsxhdPoMSUbNBL2COaOcxpYnwNY7Ya7QCeNi63P odqZUc1Vgj18iFiSlp47AEgmI5vZw9sQL/1rzwLUgezUw91hxhMEaH1iQPLmfcpV M4pRIp7xBur/7TaSRXN+Yw3p2yNFwY2G9rXj2Vg6rgbQsYpT0S2vqSxC/3/Bdxe+ qEH/O+Hq561H1QuX8VyaC3W/x74TjQhGZhvYoTdSFUJw6gxhvCNx6vZmr4iFERph QAfKMtZBBNt8kq90JEUTw/3FO9TQbnGC7oFw8/sSVMZ2YiR0a6guAnximK4dpbdQ ks1MVaSnNaRIcCpwpbvY =yD+L -----END PGP SIGNATURE----- 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
This commit is contained in:
Коммит
af469b3748
|
@ -614,7 +614,7 @@ struct cx23885_board cx23885_boards[] = {
|
|||
.portb = CX23885_MPEG_DVB,
|
||||
},
|
||||
[CX23885_BOARD_HAUPPAUGE_HVR4400] = {
|
||||
.name = "Hauppauge WinTV-HVR4400",
|
||||
.name = "Hauppauge WinTV-HVR4400/HVR5500",
|
||||
.porta = CX23885_ANALOG_VIDEO,
|
||||
.portb = CX23885_MPEG_DVB,
|
||||
.portc = CX23885_MPEG_DVB,
|
||||
|
@ -622,6 +622,10 @@ struct cx23885_board cx23885_boards[] = {
|
|||
.tuner_addr = 0x60, /* 0xc0 >> 1 */
|
||||
.tuner_bus = 1,
|
||||
},
|
||||
[CX23885_BOARD_HAUPPAUGE_STARBURST] = {
|
||||
.name = "Hauppauge WinTV Starburst",
|
||||
.portb = CX23885_MPEG_DVB,
|
||||
},
|
||||
[CX23885_BOARD_AVERMEDIA_HC81R] = {
|
||||
.name = "AVerTV Hybrid Express Slim HC81R",
|
||||
.tuner_type = TUNER_XC2028,
|
||||
|
@ -936,19 +940,19 @@ struct cx23885_subid cx23885_subids[] = {
|
|||
}, {
|
||||
.subvendor = 0x0070,
|
||||
.subdevice = 0xc108,
|
||||
.card = CX23885_BOARD_HAUPPAUGE_HVR4400,
|
||||
.card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-4400 (Model 121xxx, Hybrid DVB-T/S2, IR) */
|
||||
}, {
|
||||
.subvendor = 0x0070,
|
||||
.subdevice = 0xc138,
|
||||
.card = CX23885_BOARD_HAUPPAUGE_HVR4400,
|
||||
.card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-5500 (Model 121xxx, Hybrid DVB-T/C/S2, IR) */
|
||||
}, {
|
||||
.subvendor = 0x0070,
|
||||
.subdevice = 0xc12a,
|
||||
.card = CX23885_BOARD_HAUPPAUGE_HVR4400,
|
||||
.card = CX23885_BOARD_HAUPPAUGE_STARBURST, /* Hauppauge WinTV Starburst (Model 121x00, DVB-S2, IR) */
|
||||
}, {
|
||||
.subvendor = 0x0070,
|
||||
.subdevice = 0xc1f8,
|
||||
.card = CX23885_BOARD_HAUPPAUGE_HVR4400,
|
||||
.card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-5500 (Model 121xxx, Hybrid DVB-T/C/S2, IR) */
|
||||
}, {
|
||||
.subvendor = 0x1461,
|
||||
.subdevice = 0xd939,
|
||||
|
@ -1545,8 +1549,9 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
|
|||
cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/
|
||||
break;
|
||||
case CX23885_BOARD_HAUPPAUGE_HVR4400:
|
||||
case CX23885_BOARD_HAUPPAUGE_STARBURST:
|
||||
/* GPIO-8 tda10071 demod reset */
|
||||
/* GPIO-9 si2165 demod reset */
|
||||
/* GPIO-9 si2165 demod reset (only HVR4400/HVR5500)*/
|
||||
|
||||
/* Put the parts into reset and back */
|
||||
cx23885_gpio_enable(dev, GPIO_8 | GPIO_9, 1);
|
||||
|
@ -1872,6 +1877,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
|
|||
case CX23885_BOARD_HAUPPAUGE_HVR1850:
|
||||
case CX23885_BOARD_HAUPPAUGE_HVR1290:
|
||||
case CX23885_BOARD_HAUPPAUGE_HVR4400:
|
||||
case CX23885_BOARD_HAUPPAUGE_STARBURST:
|
||||
case CX23885_BOARD_HAUPPAUGE_IMPACTVCBE:
|
||||
if (dev->i2c_bus[0].i2c_rc == 0)
|
||||
hauppauge_eeprom(dev, eeprom+0xc0);
|
||||
|
@ -1980,6 +1986,11 @@ void cx23885_card_setup(struct cx23885_dev *dev)
|
|||
ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
|
||||
ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
|
||||
break;
|
||||
case CX23885_BOARD_HAUPPAUGE_STARBURST:
|
||||
ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
|
||||
ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
|
||||
ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
|
||||
break;
|
||||
case CX23885_BOARD_DVBSKY_T9580:
|
||||
case CX23885_BOARD_DVBSKY_T982:
|
||||
ts1->gen_ctrl_val = 0x5; /* Parallel */
|
||||
|
|
|
@ -2049,11 +2049,11 @@ static void cx23885_finidev(struct pci_dev *pci_dev)
|
|||
|
||||
cx23885_shutdown(dev);
|
||||
|
||||
pci_disable_device(pci_dev);
|
||||
|
||||
/* unregister stuff */
|
||||
free_irq(pci_dev->irq, dev);
|
||||
|
||||
pci_disable_device(pci_dev);
|
||||
|
||||
cx23885_dev_unregister(dev);
|
||||
vb2_dma_sg_cleanup_ctx(dev->alloc_ctx);
|
||||
v4l2_ctrl_handler_free(&dev->ctrl_handler);
|
||||
|
|
|
@ -1710,6 +1710,17 @@ static int dvb_register(struct cx23885_tsport *port)
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case CX23885_BOARD_HAUPPAUGE_STARBURST:
|
||||
i2c_bus = &dev->i2c_bus[0];
|
||||
fe0->dvb.frontend = dvb_attach(tda10071_attach,
|
||||
&hauppauge_tda10071_config,
|
||||
&i2c_bus->i2c_adap);
|
||||
if (fe0->dvb.frontend != NULL) {
|
||||
dvb_attach(a8293_attach, fe0->dvb.frontend,
|
||||
&i2c_bus->i2c_adap,
|
||||
&hauppauge_a8293_config);
|
||||
}
|
||||
break;
|
||||
case CX23885_BOARD_DVBSKY_T9580:
|
||||
case CX23885_BOARD_DVBSKY_S950:
|
||||
i2c_bus = &dev->i2c_bus[0];
|
||||
|
|
|
@ -99,6 +99,7 @@
|
|||
#define CX23885_BOARD_DVBSKY_S950 49
|
||||
#define CX23885_BOARD_DVBSKY_S952 50
|
||||
#define CX23885_BOARD_DVBSKY_T982 51
|
||||
#define CX23885_BOARD_HAUPPAUGE_STARBURST 52
|
||||
|
||||
#define GPIO_0 0x00000001
|
||||
#define GPIO_1 0x00000002
|
||||
|
|
|
@ -602,10 +602,13 @@ isp_video_querycap(struct file *file, void *fh, struct v4l2_capability *cap)
|
|||
strlcpy(cap->card, video->video.name, sizeof(cap->card));
|
||||
strlcpy(cap->bus_info, "media", sizeof(cap->bus_info));
|
||||
|
||||
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OUTPUT
|
||||
| V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
else
|
||||
cap->capabilities = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;
|
||||
cap->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -760,8 +760,9 @@ static int isi_camera_querycap(struct soc_camera_host *ici,
|
|||
{
|
||||
strcpy(cap->driver, "atmel-isi");
|
||||
strcpy(cap->card, "Atmel Image Sensor Interface");
|
||||
cap->capabilities = (V4L2_CAP_VIDEO_CAPTURE |
|
||||
V4L2_CAP_STREAMING);
|
||||
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1256,7 +1256,8 @@ static int mx2_camera_querycap(struct soc_camera_host *ici,
|
|||
{
|
||||
/* cap->name is set by the friendly caller:-> */
|
||||
strlcpy(cap->card, MX2_CAM_DRIVER_DESCRIPTION, sizeof(cap->card));
|
||||
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -967,7 +967,8 @@ static int mx3_camera_querycap(struct soc_camera_host *ici,
|
|||
{
|
||||
/* cap->name is set by the firendly caller:-> */
|
||||
strlcpy(cap->card, "i.MX3x Camera", sizeof(cap->card));
|
||||
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1427,7 +1427,8 @@ static int omap1_cam_querycap(struct soc_camera_host *ici,
|
|||
{
|
||||
/* cap->name is set by the friendly caller:-> */
|
||||
strlcpy(cap->card, "OMAP1 Camera", sizeof(cap->card));
|
||||
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1576,7 +1576,8 @@ static int pxa_camera_querycap(struct soc_camera_host *ici,
|
|||
{
|
||||
/* cap->name is set by the firendly caller:-> */
|
||||
strlcpy(cap->card, pxa_cam_driver_description, sizeof(cap->card));
|
||||
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1799,7 +1799,9 @@ static int rcar_vin_querycap(struct soc_camera_host *ici,
|
|||
struct v4l2_capability *cap)
|
||||
{
|
||||
strlcpy(cap->card, "R_Car_VIN", sizeof(cap->card));
|
||||
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1652,7 +1652,9 @@ static int sh_mobile_ceu_querycap(struct soc_camera_host *ici,
|
|||
struct v4l2_capability *cap)
|
||||
{
|
||||
strlcpy(cap->card, "SuperH_Mobile_CEU", sizeof(cap->card));
|
||||
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
|
||||
cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -2232,7 +2232,7 @@ static struct dvb_usb_device_properties cxusb_mygica_t230_properties = {
|
|||
{
|
||||
"Mygica T230 DVB-T/T2/C",
|
||||
{ NULL },
|
||||
{ &cxusb_table[22], NULL },
|
||||
{ &cxusb_table[20], NULL },
|
||||
},
|
||||
}
|
||||
};
|
||||
|
|
|
@ -89,16 +89,6 @@ static int vbi_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
|
|||
module_param_array(vbi_nr, int, NULL, 0444);
|
||||
MODULE_PARM_DESC(vbi_nr, "Offset for device's vbi dev minor");
|
||||
|
||||
static struct v4l2_capability pvr_capability ={
|
||||
.driver = "pvrusb2",
|
||||
.card = "Hauppauge WinTV pvr-usb2",
|
||||
.bus_info = "usb",
|
||||
.version = LINUX_VERSION_CODE,
|
||||
.capabilities = (V4L2_CAP_VIDEO_CAPTURE |
|
||||
V4L2_CAP_TUNER | V4L2_CAP_AUDIO | V4L2_CAP_RADIO |
|
||||
V4L2_CAP_READWRITE),
|
||||
};
|
||||
|
||||
static struct v4l2_fmtdesc pvr_fmtdesc [] = {
|
||||
{
|
||||
.index = 0,
|
||||
|
@ -160,10 +150,22 @@ static int pvr2_querycap(struct file *file, void *priv, struct v4l2_capability *
|
|||
struct pvr2_v4l2_fh *fh = file->private_data;
|
||||
struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
|
||||
|
||||
memcpy(cap, &pvr_capability, sizeof(struct v4l2_capability));
|
||||
strlcpy(cap->driver, "pvrusb2", sizeof(cap->driver));
|
||||
strlcpy(cap->bus_info, pvr2_hdw_get_bus_info(hdw),
|
||||
sizeof(cap->bus_info));
|
||||
strlcpy(cap->card, pvr2_hdw_get_desc(hdw), sizeof(cap->card));
|
||||
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER |
|
||||
V4L2_CAP_AUDIO | V4L2_CAP_RADIO |
|
||||
V4L2_CAP_READWRITE | V4L2_CAP_DEVICE_CAPS;
|
||||
switch (fh->pdi->devbase.vfl_type) {
|
||||
case VFL_TYPE_GRABBER:
|
||||
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_AUDIO;
|
||||
break;
|
||||
case VFL_TYPE_RADIO:
|
||||
cap->device_caps = V4L2_CAP_RADIO;
|
||||
break;
|
||||
}
|
||||
cap->device_caps |= V4L2_CAP_TUNER | V4L2_CAP_READWRITE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -3146,27 +3146,26 @@ static int vb2_thread(void *data)
|
|||
prequeue--;
|
||||
} else {
|
||||
call_void_qop(q, wait_finish, q);
|
||||
ret = vb2_internal_dqbuf(q, &fileio->b, 0);
|
||||
if (!threadio->stop)
|
||||
ret = vb2_internal_dqbuf(q, &fileio->b, 0);
|
||||
call_void_qop(q, wait_prepare, q);
|
||||
dprintk(5, "file io: vb2_dqbuf result: %d\n", ret);
|
||||
}
|
||||
if (threadio->stop)
|
||||
break;
|
||||
if (ret)
|
||||
if (ret || threadio->stop)
|
||||
break;
|
||||
try_to_freeze();
|
||||
|
||||
vb = q->bufs[fileio->b.index];
|
||||
if (!(fileio->b.flags & V4L2_BUF_FLAG_ERROR))
|
||||
ret = threadio->fnc(vb, threadio->priv);
|
||||
if (ret)
|
||||
break;
|
||||
if (threadio->fnc(vb, threadio->priv))
|
||||
break;
|
||||
call_void_qop(q, wait_finish, q);
|
||||
if (set_timestamp)
|
||||
v4l2_get_timestamp(&fileio->b.timestamp);
|
||||
ret = vb2_internal_qbuf(q, &fileio->b);
|
||||
if (!threadio->stop)
|
||||
ret = vb2_internal_qbuf(q, &fileio->b);
|
||||
call_void_qop(q, wait_prepare, q);
|
||||
if (ret)
|
||||
if (ret || threadio->stop)
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -3235,11 +3234,11 @@ int vb2_thread_stop(struct vb2_queue *q)
|
|||
threadio->stop = true;
|
||||
vb2_internal_streamoff(q, q->type);
|
||||
call_void_qop(q, wait_prepare, q);
|
||||
err = kthread_stop(threadio->thread);
|
||||
q->fileio = NULL;
|
||||
fileio->req.count = 0;
|
||||
vb2_reqbufs(q, &fileio->req);
|
||||
kfree(fileio);
|
||||
err = kthread_stop(threadio->thread);
|
||||
threadio->thread = NULL;
|
||||
kfree(threadio);
|
||||
q->fileio = NULL;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
config VIDEO_TLG2300
|
||||
tristate "Telegent TLG2300 USB video capture support (Deprecated)"
|
||||
depends on VIDEO_DEV && I2C && SND && DVB_CORE
|
||||
depends on MEDIA_USB_SUPPORT
|
||||
select VIDEO_TUNER
|
||||
select VIDEO_TVEEPROM
|
||||
depends on RC_CORE
|
||||
|
|
Загрузка…
Ссылка в новой задаче