Commit 230b65f9 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

V4L/DVB (10502): saa7146: move v4l2 device registration to saa7146_vv.

Doing the v4l2_device registration in the saa7146 core will make it
dependent on v4l2, even for DVB-only boards. This registration and
unregistration belongs in saa7146_vv instead.
Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent eae4d69b
...@@ -363,16 +363,13 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent ...@@ -363,16 +363,13 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent
ERR(("out of memory.\n")); ERR(("out of memory.\n"));
goto out; goto out;
} }
err = v4l2_device_register(&pci->dev, &dev->v4l2_dev);
if (err)
goto err_free;
DEB_EE(("pci:%p\n",pci)); DEB_EE(("pci:%p\n",pci));
err = pci_enable_device(pci); err = pci_enable_device(pci);
if (err < 0) { if (err < 0) {
ERR(("pci_enable_device() failed.\n")); ERR(("pci_enable_device() failed.\n"));
goto err_unreg; goto err_free;
} }
/* enable bus-mastering */ /* enable bus-mastering */
...@@ -480,6 +477,10 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent ...@@ -480,6 +477,10 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent
DEB_D(("ext->attach() failed for %p. skipping device.\n",dev)); DEB_D(("ext->attach() failed for %p. skipping device.\n",dev));
goto err_free_i2c; goto err_free_i2c;
} }
/* V4L extensions will set the pci drvdata to the v4l2_device in the
attach() above. So for those cards that do not use V4L we have to
set it explicitly. */
pci_set_drvdata(pci, &dev->v4l2_dev);
INIT_LIST_HEAD(&dev->item); INIT_LIST_HEAD(&dev->item);
list_add_tail(&dev->item,&saa7146_devices); list_add_tail(&dev->item,&saa7146_devices);
...@@ -506,8 +507,6 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent ...@@ -506,8 +507,6 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent
pci_release_region(pci, 0); pci_release_region(pci, 0);
err_disable: err_disable:
pci_disable_device(pci); pci_disable_device(pci);
err_unreg:
v4l2_device_unregister(&dev->v4l2_dev);
err_free: err_free:
kfree(dev); kfree(dev);
goto out; goto out;
...@@ -530,7 +529,8 @@ static void saa7146_remove_one(struct pci_dev *pdev) ...@@ -530,7 +529,8 @@ static void saa7146_remove_one(struct pci_dev *pdev)
DEB_EE(("dev:%p\n",dev)); DEB_EE(("dev:%p\n",dev));
dev->ext->detach(dev); dev->ext->detach(dev);
v4l2_device_unregister(&dev->v4l2_dev); /* Zero the PCI drvdata after use. */
pci_set_drvdata(pdev, NULL);
/* shut down all video dma transfers */ /* shut down all video dma transfers */
saa7146_write(dev, MC1, 0x00ff0000); saa7146_write(dev, MC1, 0x00ff0000);
......
...@@ -446,11 +446,17 @@ static void vv_callback(struct saa7146_dev *dev, unsigned long status) ...@@ -446,11 +446,17 @@ static void vv_callback(struct saa7146_dev *dev, unsigned long status)
int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv) int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv)
{ {
struct saa7146_vv *vv = kzalloc(sizeof(struct saa7146_vv), GFP_KERNEL); struct saa7146_vv *vv;
int err;
err = v4l2_device_register(&dev->pci->dev, &dev->v4l2_dev);
if (err)
return err;
vv = kzalloc(sizeof(struct saa7146_vv), GFP_KERNEL);
if (vv == NULL) { if (vv == NULL) {
ERR(("out of memory. aborting.\n")); ERR(("out of memory. aborting.\n"));
return -1; return -ENOMEM;
} }
ext_vv->ops = saa7146_video_ioctl_ops; ext_vv->ops = saa7146_video_ioctl_ops;
ext_vv->core_ops = &saa7146_video_ioctl_ops; ext_vv->core_ops = &saa7146_video_ioctl_ops;
...@@ -496,6 +502,7 @@ int saa7146_vv_release(struct saa7146_dev* dev) ...@@ -496,6 +502,7 @@ int saa7146_vv_release(struct saa7146_dev* dev)
DEB_EE(("dev:%p\n",dev)); DEB_EE(("dev:%p\n",dev));
v4l2_device_unregister(&dev->v4l2_dev);
pci_free_consistent(dev->pci, SAA7146_CLIPPING_MEM, vv->d_clipping.cpu_addr, vv->d_clipping.dma_handle); pci_free_consistent(dev->pci, SAA7146_CLIPPING_MEM, vv->d_clipping.cpu_addr, vv->d_clipping.dma_handle);
kfree(vv); kfree(vv);
dev->vv_data = NULL; dev->vv_data = NULL;
......
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