|
@@ -1129,7 +1129,7 @@ int cx231xx_enum_input(struct file *file, void *priv,
|
|
|
(CX231XX_VMUX_CABLE == INPUT(n)->type))
|
|
|
i->type = V4L2_INPUT_TYPE_TUNER;
|
|
|
|
|
|
- i->std = dev->vdev->tvnorms;
|
|
|
+ i->std = dev->vdev.tvnorms;
|
|
|
|
|
|
/* If they are asking about the active input, read signal status */
|
|
|
if (n == dev->video_input) {
|
|
@@ -1524,7 +1524,7 @@ int cx231xx_querycap(struct file *file, void *priv,
|
|
|
cap->capabilities = cap->device_caps | V4L2_CAP_READWRITE |
|
|
|
V4L2_CAP_VBI_CAPTURE | V4L2_CAP_VIDEO_CAPTURE |
|
|
|
V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS;
|
|
|
- if (dev->radio_dev)
|
|
|
+ if (video_is_registered(&dev->radio_dev))
|
|
|
cap->capabilities |= V4L2_CAP_RADIO;
|
|
|
|
|
|
return 0;
|
|
@@ -1802,34 +1802,21 @@ void cx231xx_release_analog_resources(struct cx231xx *dev)
|
|
|
|
|
|
/*FIXME: I2C IR should be disconnected */
|
|
|
|
|
|
- if (dev->radio_dev) {
|
|
|
- if (video_is_registered(dev->radio_dev))
|
|
|
- video_unregister_device(dev->radio_dev);
|
|
|
- else
|
|
|
- video_device_release(dev->radio_dev);
|
|
|
- dev->radio_dev = NULL;
|
|
|
- }
|
|
|
- if (dev->vbi_dev) {
|
|
|
+ if (video_is_registered(&dev->radio_dev))
|
|
|
+ video_unregister_device(&dev->radio_dev);
|
|
|
+ if (video_is_registered(&dev->vbi_dev)) {
|
|
|
dev_info(dev->dev, "V4L2 device %s deregistered\n",
|
|
|
- video_device_node_name(dev->vbi_dev));
|
|
|
- if (video_is_registered(dev->vbi_dev))
|
|
|
- video_unregister_device(dev->vbi_dev);
|
|
|
- else
|
|
|
- video_device_release(dev->vbi_dev);
|
|
|
- dev->vbi_dev = NULL;
|
|
|
+ video_device_node_name(&dev->vbi_dev));
|
|
|
+ video_unregister_device(&dev->vbi_dev);
|
|
|
}
|
|
|
- if (dev->vdev) {
|
|
|
+ if (video_is_registered(&dev->vdev)) {
|
|
|
dev_info(dev->dev, "V4L2 device %s deregistered\n",
|
|
|
- video_device_node_name(dev->vdev));
|
|
|
+ video_device_node_name(&dev->vdev));
|
|
|
|
|
|
if (dev->board.has_417)
|
|
|
cx231xx_417_unregister(dev);
|
|
|
|
|
|
- if (video_is_registered(dev->vdev))
|
|
|
- video_unregister_device(dev->vdev);
|
|
|
- else
|
|
|
- video_device_release(dev->vdev);
|
|
|
- dev->vdev = NULL;
|
|
|
+ video_unregister_device(&dev->vdev);
|
|
|
}
|
|
|
v4l2_ctrl_handler_free(&dev->ctrl_handler);
|
|
|
v4l2_ctrl_handler_free(&dev->radio_ctrl_handler);
|
|
@@ -2086,7 +2073,7 @@ static struct video_device cx231xx_vbi_template;
|
|
|
|
|
|
static const struct video_device cx231xx_video_template = {
|
|
|
.fops = &cx231xx_v4l_fops,
|
|
|
- .release = video_device_release,
|
|
|
+ .release = video_device_release_empty,
|
|
|
.ioctl_ops = &video_ioctl_ops,
|
|
|
.tvnorms = V4L2_STD_ALL,
|
|
|
};
|
|
@@ -2122,19 +2109,14 @@ static struct video_device cx231xx_radio_template = {
|
|
|
|
|
|
/******************************** usb interface ******************************/
|
|
|
|
|
|
-static struct video_device *cx231xx_vdev_init(struct cx231xx *dev,
|
|
|
- const struct video_device
|
|
|
- *template, const char *type_name)
|
|
|
+static void cx231xx_vdev_init(struct cx231xx *dev,
|
|
|
+ struct video_device *vfd,
|
|
|
+ const struct video_device *template,
|
|
|
+ const char *type_name)
|
|
|
{
|
|
|
- struct video_device *vfd;
|
|
|
-
|
|
|
- vfd = video_device_alloc();
|
|
|
- if (NULL == vfd)
|
|
|
- return NULL;
|
|
|
-
|
|
|
*vfd = *template;
|
|
|
vfd->v4l2_dev = &dev->v4l2_dev;
|
|
|
- vfd->release = video_device_release;
|
|
|
+ vfd->release = video_device_release_empty;
|
|
|
vfd->lock = &dev->lock;
|
|
|
|
|
|
snprintf(vfd->name, sizeof(vfd->name), "%s %s", dev->name, type_name);
|
|
@@ -2146,7 +2128,6 @@ static struct video_device *cx231xx_vdev_init(struct cx231xx *dev,
|
|
|
v4l2_disable_ioctl(vfd, VIDIOC_G_TUNER);
|
|
|
v4l2_disable_ioctl(vfd, VIDIOC_S_TUNER);
|
|
|
}
|
|
|
- return vfd;
|
|
|
}
|
|
|
|
|
|
int cx231xx_register_analog_devices(struct cx231xx *dev)
|
|
@@ -2189,20 +2170,16 @@ int cx231xx_register_analog_devices(struct cx231xx *dev)
|
|
|
/* write code here... */
|
|
|
|
|
|
/* allocate and fill video video_device struct */
|
|
|
- dev->vdev = cx231xx_vdev_init(dev, &cx231xx_video_template, "video");
|
|
|
- if (!dev->vdev) {
|
|
|
- dev_err(dev->dev, "cannot allocate video_device.\n");
|
|
|
- return -ENODEV;
|
|
|
- }
|
|
|
+ cx231xx_vdev_init(dev, &dev->vdev, &cx231xx_video_template, "video");
|
|
|
#if defined(CONFIG_MEDIA_CONTROLLER)
|
|
|
dev->video_pad.flags = MEDIA_PAD_FL_SINK;
|
|
|
- ret = media_entity_init(&dev->vdev->entity, 1, &dev->video_pad, 0);
|
|
|
+ ret = media_entity_init(&dev->vdev.entity, 1, &dev->video_pad, 0);
|
|
|
if (ret < 0)
|
|
|
dev_err(dev->dev, "failed to initialize video media entity!\n");
|
|
|
#endif
|
|
|
- dev->vdev->ctrl_handler = &dev->ctrl_handler;
|
|
|
+ dev->vdev.ctrl_handler = &dev->ctrl_handler;
|
|
|
/* register v4l2 video video_device */
|
|
|
- ret = video_register_device(dev->vdev, VFL_TYPE_GRABBER,
|
|
|
+ ret = video_register_device(&dev->vdev, VFL_TYPE_GRABBER,
|
|
|
video_nr[dev->devno]);
|
|
|
if (ret) {
|
|
|
dev_err(dev->dev,
|
|
@@ -2212,28 +2189,24 @@ int cx231xx_register_analog_devices(struct cx231xx *dev)
|
|
|
}
|
|
|
|
|
|
dev_info(dev->dev, "Registered video device %s [v4l2]\n",
|
|
|
- video_device_node_name(dev->vdev));
|
|
|
+ video_device_node_name(&dev->vdev));
|
|
|
|
|
|
/* Initialize VBI template */
|
|
|
cx231xx_vbi_template = cx231xx_video_template;
|
|
|
strcpy(cx231xx_vbi_template.name, "cx231xx-vbi");
|
|
|
|
|
|
/* Allocate and fill vbi video_device struct */
|
|
|
- dev->vbi_dev = cx231xx_vdev_init(dev, &cx231xx_vbi_template, "vbi");
|
|
|
+ cx231xx_vdev_init(dev, &dev->vbi_dev, &cx231xx_vbi_template, "vbi");
|
|
|
|
|
|
- if (!dev->vbi_dev) {
|
|
|
- dev_err(dev->dev, "cannot allocate video_device.\n");
|
|
|
- return -ENODEV;
|
|
|
- }
|
|
|
#if defined(CONFIG_MEDIA_CONTROLLER)
|
|
|
dev->vbi_pad.flags = MEDIA_PAD_FL_SINK;
|
|
|
- ret = media_entity_init(&dev->vbi_dev->entity, 1, &dev->vbi_pad, 0);
|
|
|
+ ret = media_entity_init(&dev->vbi_dev.entity, 1, &dev->vbi_pad, 0);
|
|
|
if (ret < 0)
|
|
|
dev_err(dev->dev, "failed to initialize vbi media entity!\n");
|
|
|
#endif
|
|
|
- dev->vbi_dev->ctrl_handler = &dev->ctrl_handler;
|
|
|
+ dev->vbi_dev.ctrl_handler = &dev->ctrl_handler;
|
|
|
/* register v4l2 vbi video_device */
|
|
|
- ret = video_register_device(dev->vbi_dev, VFL_TYPE_VBI,
|
|
|
+ ret = video_register_device(&dev->vbi_dev, VFL_TYPE_VBI,
|
|
|
vbi_nr[dev->devno]);
|
|
|
if (ret < 0) {
|
|
|
dev_err(dev->dev, "unable to register vbi device\n");
|
|
@@ -2241,18 +2214,13 @@ int cx231xx_register_analog_devices(struct cx231xx *dev)
|
|
|
}
|
|
|
|
|
|
dev_info(dev->dev, "Registered VBI device %s\n",
|
|
|
- video_device_node_name(dev->vbi_dev));
|
|
|
+ video_device_node_name(&dev->vbi_dev));
|
|
|
|
|
|
if (cx231xx_boards[dev->model].radio.type == CX231XX_RADIO) {
|
|
|
- dev->radio_dev = cx231xx_vdev_init(dev, &cx231xx_radio_template,
|
|
|
- "radio");
|
|
|
- if (!dev->radio_dev) {
|
|
|
- dev_err(dev->dev,
|
|
|
- "cannot allocate video_device.\n");
|
|
|
- return -ENODEV;
|
|
|
- }
|
|
|
- dev->radio_dev->ctrl_handler = &dev->radio_ctrl_handler;
|
|
|
- ret = video_register_device(dev->radio_dev, VFL_TYPE_RADIO,
|
|
|
+ cx231xx_vdev_init(dev, &dev->radio_dev,
|
|
|
+ &cx231xx_radio_template, "radio");
|
|
|
+ dev->radio_dev.ctrl_handler = &dev->radio_ctrl_handler;
|
|
|
+ ret = video_register_device(&dev->radio_dev, VFL_TYPE_RADIO,
|
|
|
radio_nr[dev->devno]);
|
|
|
if (ret < 0) {
|
|
|
dev_err(dev->dev,
|
|
@@ -2260,7 +2228,7 @@ int cx231xx_register_analog_devices(struct cx231xx *dev)
|
|
|
return ret;
|
|
|
}
|
|
|
dev_info(dev->dev, "Registered radio device as %s\n",
|
|
|
- video_device_node_name(dev->radio_dev));
|
|
|
+ video_device_node_name(&dev->radio_dev));
|
|
|
}
|
|
|
|
|
|
return 0;
|