V4L/DVB (11047): cx88: convert to v4l2_device.
authorHans Verkuil <hverkuil@xs4all.nl>
Sat, 14 Mar 2009 15:40:51 +0000 (12:40 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:43:23 +0000 (12:43 -0300)
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/cx88/cx88-cards.c
drivers/media/video/cx88/cx88-core.c
drivers/media/video/cx88/cx88-i2c.c
drivers/media/video/cx88/cx88.h

index 1d7e3a5..b9def8c 100644 (file)
@@ -3138,7 +3138,15 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
 
        core->nr = nr;
        sprintf(core->name, "cx88[%d]", core->nr);
+
+       strcpy(core->v4l2_dev.name, core->name);
+       if (v4l2_device_register(NULL, &core->v4l2_dev)) {
+               kfree(core);
+               return NULL;
+       }
+
        if (0 != cx88_get_resources(core, pci)) {
+               v4l2_device_unregister(&core->v4l2_dev);
                kfree(core);
                return NULL;
        }
index b045874..17c7dad 100644 (file)
@@ -1011,7 +1011,8 @@ struct video_device *cx88_vdev_init(struct cx88_core *core,
                return NULL;
        *vfd = *template;
        vfd->minor   = -1;
-       vfd->parent  = &pci->dev;
+       vfd->v4l2_dev = &core->v4l2_dev;
+       vfd->parent = &pci->dev;
        vfd->release = video_device_release;
        snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
                 core->name, type, core->board.name);
@@ -1064,6 +1065,7 @@ void cx88_core_put(struct cx88_core *core, struct pci_dev *pci)
        iounmap(core->lmmio);
        cx88_devcount--;
        mutex_unlock(&devlist);
+       v4l2_device_unregister(&core->v4l2_dev);
        kfree(core);
 }
 
index c0ff230..4a17a75 100644 (file)
@@ -99,7 +99,8 @@ static int cx8800_bit_getsda(void *data)
 
 static int attach_inform(struct i2c_client *client)
 {
-       struct cx88_core *core = i2c_get_adapdata(client->adapter);
+       struct v4l2_device *v4l2_dev = i2c_get_adapdata(client->adapter);
+       struct cx88_core *core = to_core(v4l2_dev);
 
        dprintk(1, "%s i2c attach [addr=0x%x,client=%s]\n",
                client->driver->driver.name, client->addr, client->name);
@@ -108,7 +109,8 @@ static int attach_inform(struct i2c_client *client)
 
 static int detach_inform(struct i2c_client *client)
 {
-       struct cx88_core *core = i2c_get_adapdata(client->adapter);
+       struct v4l2_device *v4l2_dev = i2c_get_adapdata(client->adapter);
+       struct cx88_core *core = to_core(v4l2_dev);
 
        dprintk(1, "i2c detach [client=%s]\n", client->name);
        return 0;
@@ -186,7 +188,7 @@ int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci)
        core->i2c_adap.client_unregister = detach_inform;
        core->i2c_algo.udelay = i2c_udelay;
        core->i2c_algo.data = core;
-       i2c_set_adapdata(&core->i2c_adap,core);
+       i2c_set_adapdata(&core->i2c_adap, &core->v4l2_dev);
        core->i2c_adap.algo_data = &core->i2c_algo;
        core->i2c_client.adapter = &core->i2c_adap;
        strlcpy(core->i2c_client.name, "cx88xx internal", I2C_NAME_SIZE);
index 303d8d2..890018c 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/videodev2.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>
@@ -327,6 +327,7 @@ struct cx88_core {
        u32                        i2c_state, i2c_rc;
 
        /* config info -- analog */
+       struct v4l2_device         v4l2_dev;
        unsigned int               boardnr;
        struct cx88_board          board;
 
@@ -365,6 +366,11 @@ struct cx88_core {
        int                        active_fe_id;
 };
 
+static inline struct cx88_core *to_core(struct v4l2_device *v4l2_dev)
+{
+       return container_of(v4l2_dev, struct cx88_core, v4l2_dev);
+}
+
 struct cx8800_dev;
 struct cx8802_dev;