[media] pvrusb2: fix missing device_caps in querycap
The VIDIOC_QUERYCAP function should set device_caps, but this was missing. In addition, it set the version field as well, but that should be done by the core, not by the driver. If a driver doesn't set device_caps the v4l2 core will issue a WARN_ON, so it's important that this is set correctly. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
6cf11ee630
commit
42639f6de6
|
@ -89,16 +89,6 @@ static int vbi_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
|
||||||
module_param_array(vbi_nr, int, NULL, 0444);
|
module_param_array(vbi_nr, int, NULL, 0444);
|
||||||
MODULE_PARM_DESC(vbi_nr, "Offset for device's vbi dev minor");
|
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 [] = {
|
static struct v4l2_fmtdesc pvr_fmtdesc [] = {
|
||||||
{
|
{
|
||||||
.index = 0,
|
.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_v4l2_fh *fh = file->private_data;
|
||||||
struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
|
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),
|
strlcpy(cap->bus_info, pvr2_hdw_get_bus_info(hdw),
|
||||||
sizeof(cap->bus_info));
|
sizeof(cap->bus_info));
|
||||||
strlcpy(cap->card, pvr2_hdw_get_desc(hdw), sizeof(cap->card));
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue