Commit 23fb4c5e authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] bttv: embed video_device

Embed the video_device struct to simplify the error handling and in
order to (eventually) get rid of video_device_alloc/release.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 34080bc2
...@@ -2474,7 +2474,7 @@ static int bttv_querycap(struct file *file, void *priv, ...@@ -2474,7 +2474,7 @@ static int bttv_querycap(struct file *file, void *priv,
return -EINVAL; return -EINVAL;
strlcpy(cap->driver, "bttv", sizeof(cap->driver)); strlcpy(cap->driver, "bttv", sizeof(cap->driver));
strlcpy(cap->card, btv->video_dev->name, sizeof(cap->card)); strlcpy(cap->card, btv->video_dev.name, sizeof(cap->card));
snprintf(cap->bus_info, sizeof(cap->bus_info), snprintf(cap->bus_info, sizeof(cap->bus_info),
"PCI:%s", pci_name(btv->c.pci)); "PCI:%s", pci_name(btv->c.pci));
cap->capabilities = cap->capabilities =
...@@ -2484,9 +2484,9 @@ static int bttv_querycap(struct file *file, void *priv, ...@@ -2484,9 +2484,9 @@ static int bttv_querycap(struct file *file, void *priv,
V4L2_CAP_DEVICE_CAPS; V4L2_CAP_DEVICE_CAPS;
if (no_overlay <= 0) if (no_overlay <= 0)
cap->capabilities |= V4L2_CAP_VIDEO_OVERLAY; cap->capabilities |= V4L2_CAP_VIDEO_OVERLAY;
if (btv->vbi_dev) if (video_is_registered(&btv->vbi_dev))
cap->capabilities |= V4L2_CAP_VBI_CAPTURE; cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
if (btv->radio_dev) if (video_is_registered(&btv->radio_dev))
cap->capabilities |= V4L2_CAP_RADIO; cap->capabilities |= V4L2_CAP_RADIO;
/* /*
...@@ -3905,18 +3905,14 @@ static irqreturn_t bttv_irq(int irq, void *dev_id) ...@@ -3905,18 +3905,14 @@ static irqreturn_t bttv_irq(int irq, void *dev_id)
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
/* initialization */ /* initialization */
static struct video_device *vdev_init(struct bttv *btv, static void vdev_init(struct bttv *btv,
const struct video_device *template, struct video_device *vfd,
const char *type_name) 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 = *template;
vfd->v4l2_dev = &btv->c.v4l2_dev; vfd->v4l2_dev = &btv->c.v4l2_dev;
vfd->release = video_device_release; vfd->release = video_device_release_empty;
video_set_drvdata(vfd, btv); video_set_drvdata(vfd, btv);
snprintf(vfd->name, sizeof(vfd->name), "BT%d%s %s (%s)", snprintf(vfd->name, sizeof(vfd->name), "BT%d%s %s (%s)",
btv->id, (btv->id==848 && btv->revision==0x12) ? "A" : "", btv->id, (btv->id==848 && btv->revision==0x12) ? "A" : "",
...@@ -3927,32 +3923,13 @@ static struct video_device *vdev_init(struct bttv *btv, ...@@ -3927,32 +3923,13 @@ static struct video_device *vdev_init(struct bttv *btv,
v4l2_disable_ioctl(vfd, VIDIOC_G_TUNER); v4l2_disable_ioctl(vfd, VIDIOC_G_TUNER);
v4l2_disable_ioctl(vfd, VIDIOC_S_TUNER); v4l2_disable_ioctl(vfd, VIDIOC_S_TUNER);
} }
return vfd;
} }
static void bttv_unregister_video(struct bttv *btv) static void bttv_unregister_video(struct bttv *btv)
{ {
if (btv->video_dev) { video_unregister_device(&btv->video_dev);
if (video_is_registered(btv->video_dev)) video_unregister_device(&btv->vbi_dev);
video_unregister_device(btv->video_dev); video_unregister_device(&btv->radio_dev);
else
video_device_release(btv->video_dev);
btv->video_dev = NULL;
}
if (btv->vbi_dev) {
if (video_is_registered(btv->vbi_dev))
video_unregister_device(btv->vbi_dev);
else
video_device_release(btv->vbi_dev);
btv->vbi_dev = NULL;
}
if (btv->radio_dev) {
if (video_is_registered(btv->radio_dev))
video_unregister_device(btv->radio_dev);
else
video_device_release(btv->radio_dev);
btv->radio_dev = NULL;
}
} }
/* register video4linux devices */ /* register video4linux devices */
...@@ -3962,44 +3939,38 @@ static int bttv_register_video(struct bttv *btv) ...@@ -3962,44 +3939,38 @@ static int bttv_register_video(struct bttv *btv)
pr_notice("Overlay support disabled\n"); pr_notice("Overlay support disabled\n");
/* video */ /* video */
btv->video_dev = vdev_init(btv, &bttv_video_template, "video"); vdev_init(btv, &btv->video_dev, &bttv_video_template, "video");
if (NULL == btv->video_dev) if (video_register_device(&btv->video_dev, VFL_TYPE_GRABBER,
goto err;
if (video_register_device(btv->video_dev, VFL_TYPE_GRABBER,
video_nr[btv->c.nr]) < 0) video_nr[btv->c.nr]) < 0)
goto err; goto err;
pr_info("%d: registered device %s\n", pr_info("%d: registered device %s\n",
btv->c.nr, video_device_node_name(btv->video_dev)); btv->c.nr, video_device_node_name(&btv->video_dev));
if (device_create_file(&btv->video_dev->dev, if (device_create_file(&btv->video_dev.dev,
&dev_attr_card)<0) { &dev_attr_card)<0) {
pr_err("%d: device_create_file 'card' failed\n", btv->c.nr); pr_err("%d: device_create_file 'card' failed\n", btv->c.nr);
goto err; goto err;
} }
/* vbi */ /* vbi */
btv->vbi_dev = vdev_init(btv, &bttv_video_template, "vbi"); vdev_init(btv, &btv->vbi_dev, &bttv_video_template, "vbi");
if (NULL == btv->vbi_dev) if (video_register_device(&btv->vbi_dev, VFL_TYPE_VBI,
goto err;
if (video_register_device(btv->vbi_dev, VFL_TYPE_VBI,
vbi_nr[btv->c.nr]) < 0) vbi_nr[btv->c.nr]) < 0)
goto err; goto err;
pr_info("%d: registered device %s\n", pr_info("%d: registered device %s\n",
btv->c.nr, video_device_node_name(btv->vbi_dev)); btv->c.nr, video_device_node_name(&btv->vbi_dev));
if (!btv->has_radio) if (!btv->has_radio)
return 0; return 0;
/* radio */ /* radio */
btv->radio_dev = vdev_init(btv, &radio_template, "radio"); vdev_init(btv, &btv->radio_dev, &radio_template, "radio");
if (NULL == btv->radio_dev) btv->radio_dev.ctrl_handler = &btv->radio_ctrl_handler;
goto err; if (video_register_device(&btv->radio_dev, VFL_TYPE_RADIO,
btv->radio_dev->ctrl_handler = &btv->radio_ctrl_handler;
if (video_register_device(btv->radio_dev, VFL_TYPE_RADIO,
radio_nr[btv->c.nr]) < 0) radio_nr[btv->c.nr]) < 0)
goto err; goto err;
pr_info("%d: registered device %s\n", pr_info("%d: registered device %s\n",
btv->c.nr, video_device_node_name(btv->radio_dev)); btv->c.nr, video_device_node_name(&btv->radio_dev));
/* all done */ /* all done */
return 0; return 0;
......
...@@ -404,9 +404,9 @@ struct bttv { ...@@ -404,9 +404,9 @@ struct bttv {
struct v4l2_subdev *sd_tda7432; struct v4l2_subdev *sd_tda7432;
/* video4linux (1) */ /* video4linux (1) */
struct video_device *video_dev; struct video_device video_dev;
struct video_device *radio_dev; struct video_device radio_dev;
struct video_device *vbi_dev; struct video_device vbi_dev;
/* controls */ /* controls */
struct v4l2_ctrl_handler ctrl_handler; struct v4l2_ctrl_handler ctrl_handler;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment