V4L/DVB (11295): cx23885: convert to v4l2_device.
authorHans Verkuil <hverkuil@xs4all.nl>
Fri, 13 Mar 2009 11:02:43 +0000 (08:02 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:43:48 +0000 (12:43 -0300)
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/cx23885/cx23885-core.c
drivers/media/video/cx23885/cx23885-i2c.c
drivers/media/video/cx23885/cx23885-video.c
drivers/media/video/cx23885/cx23885.h

index d19d453cf62aac8d7e92de9ecf5dd6d576eb1896..548279225d736d079aa8499c66a22f9591982b32 100644 (file)
@@ -1739,16 +1739,20 @@ static int __devinit cx23885_initdev(struct pci_dev *pci_dev,
        if (NULL == dev)
                return -ENOMEM;
 
+       err = v4l2_device_register(&pci_dev->dev, &dev->v4l2_dev);
+       if (err < 0)
+               goto fail_free;
+
        /* pci init */
        dev->pci = pci_dev;
        if (pci_enable_device(pci_dev)) {
                err = -EIO;
-               goto fail_free;
+               goto fail_unreg;
        }
 
        if (cx23885_dev_setup(dev) < 0) {
                err = -EINVAL;
-               goto fail_free;
+               goto fail_unreg;
        }
 
        /* print pci info */
@@ -1775,8 +1779,6 @@ static int __devinit cx23885_initdev(struct pci_dev *pci_dev,
                goto fail_irq;
        }
 
-       pci_set_drvdata(pci_dev, dev);
-
        switch (dev->board) {
        case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
                cx_set(PCI_INT_MSK, 0x01800000); /* for NetUP */
@@ -1787,6 +1789,8 @@ static int __devinit cx23885_initdev(struct pci_dev *pci_dev,
 
 fail_irq:
        cx23885_dev_unregister(dev);
+fail_unreg:
+       v4l2_device_unregister(&dev->v4l2_dev);
 fail_free:
        kfree(dev);
        return err;
@@ -1794,7 +1798,8 @@ fail_free:
 
 static void __devexit cx23885_finidev(struct pci_dev *pci_dev)
 {
-       struct cx23885_dev *dev = pci_get_drvdata(pci_dev);
+       struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
+       struct cx23885_dev *dev = to_cx23885(v4l2_dev);
 
        cx23885_shutdown(dev);
 
@@ -1802,13 +1807,13 @@ static void __devexit cx23885_finidev(struct pci_dev *pci_dev)
 
        /* unregister stuff */
        free_irq(pci_dev->irq, dev);
-       pci_set_drvdata(pci_dev, NULL);
 
        mutex_lock(&devlist);
        list_del(&dev->devlist);
        mutex_unlock(&devlist);
 
        cx23885_dev_unregister(dev);
+       v4l2_device_unregister(v4l2_dev);
        kfree(dev);
 }
 
index bb7f71a1fcbe7b30a997d50592fb98e138410915..969b7ebbc82720ce83476d8de94b02188b5a8cdc 100644 (file)
@@ -270,8 +270,8 @@ static int i2c_xfer(struct i2c_adapter *i2c_adap,
 
 static int attach_inform(struct i2c_client *client)
 {
-       struct cx23885_i2c *bus = i2c_get_adapdata(client->adapter);
-       struct cx23885_dev *dev = bus->dev;
+       struct v4l2_device *v4l2_dev = i2c_get_adapdata(client->adapter);
+       struct cx23885_dev *dev = to_cx23885(v4l2_dev);
        struct tuner_setup tun_setup;
 
        dprintk(1, "%s i2c attach [addr=0x%x,client=%s]\n",
@@ -310,7 +310,8 @@ static int attach_inform(struct i2c_client *client)
 
 static int detach_inform(struct i2c_client *client)
 {
-       struct cx23885_dev *dev = i2c_get_adapdata(client->adapter);
+       struct v4l2_device *v4l2_dev = i2c_get_adapdata(client->adapter);
+       struct cx23885_dev *dev = to_cx23885(v4l2_dev);
 
        dprintk(1, "i2c detach [client=%s]\n", client->name);
 
@@ -402,7 +403,7 @@ int cx23885_i2c_register(struct cx23885_i2c *bus)
 
        bus->i2c_algo.data = bus;
        bus->i2c_adap.algo_data = bus;
-       i2c_set_adapdata(&bus->i2c_adap, bus);
+       i2c_set_adapdata(&bus->i2c_adap, &dev->v4l2_dev);
        i2c_add_adapter(&bus->i2c_adap);
 
        bus->i2c_client.adapter = &bus->i2c_adap;
index 7266029353537677b6fa5f0cf364d6da37007199..1596f4ff3dfee24b2b6e231506c0db1423cdad69 100644 (file)
@@ -320,8 +320,8 @@ static struct video_device *cx23885_vdev_init(struct cx23885_dev *dev,
        if (NULL == vfd)
                return NULL;
        *vfd = *template;
-       vfd->minor   = -1;
-       vfd->parent  = &pci->dev;
+       vfd->minor = -1;
+       vfd->v4l2_dev = &dev->v4l2_dev;
        vfd->release = video_device_release;
        snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
                 dev->name, type, cx23885_boards[dev->board].name);
index 779fc35b18d6ad8dd65ea6271749c888c420242d..ba57643f11983df6e05e9b65e88eea1828d2c186 100644 (file)
@@ -24,7 +24,7 @@
 #include <linux/i2c-algo-bit.h>
 #include <linux/kdev_t.h>
 
-#include <media/v4l2-common.h>
+#include <media/v4l2-device.h>
 #include <media/tuner.h>
 #include <media/tveeprom.h>
 #include <media/videobuf-dma-sg.h>
@@ -277,6 +277,7 @@ struct cx23885_tsport {
 struct cx23885_dev {
        struct list_head           devlist;
        atomic_t                   refcount;
+       struct v4l2_device         v4l2_dev;
 
        /* pci stuff */
        struct pci_dev             *pci;
@@ -342,6 +343,11 @@ struct cx23885_dev {
 
 };
 
+static inline struct cx23885_dev *to_cx23885(struct v4l2_device *v4l2_dev)
+{
+       return container_of(v4l2_dev, struct cx23885_dev, v4l2_dev);
+}
+
 extern struct list_head cx23885_devlist;
 
 #define SRAM_CH01  0 /* Video A */