The patch number 9961 was added via Hans Verkuil <[email protected]>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        [email protected]

------

From: Hans Verkuil  <[email protected]>
tea6415c: convert to v4l2_subdev.


Priority: normal

Signed-off-by: Hans Verkuil <[email protected]>


---

 linux/drivers/media/video/tea6415c.c |   53 ++++++++++++++++++++-------
 1 file changed, 40 insertions(+), 13 deletions(-)

diff -r 9d211c06af26 -r 22e6bf3102c1 linux/drivers/media/video/tea6415c.c
--- a/linux/drivers/media/video/tea6415c.c      Thu Dec 18 16:27:28 2008 +0100
+++ b/linux/drivers/media/video/tea6415c.c      Thu Dec 18 16:29:07 2008 +0100
@@ -31,7 +31,7 @@
 #include <linux/module.h>
 #include <linux/ioctl.h>
 #include <linux/i2c.h>
-#include <media/v4l2-common.h>
+#include <media/v4l2-device.h>
 #include <media/v4l2-i2c-drv-legacy.h>
 #include "tea6415c.h"
 #include "compat.h"
@@ -123,31 +123,57 @@ static int switch_matrix(struct i2c_clie
        return ret;
 }
 
+static int tea6415c_ioctl(struct v4l2_subdev *sd, unsigned cmd, void *arg)
+{
+       if (cmd == TEA6415C_SWITCH) {
+               struct i2c_client *client = v4l2_get_subdevdata(sd);
+               struct tea6415c_multiplex *v = (struct tea6415c_multiplex *)arg;
+
+               return switch_matrix(client, v->in, v->out);
+       }
+       return -ENOIOCTLCMD;
+}
+
 static int tea6415c_command(struct i2c_client *client, unsigned cmd, void *arg)
 {
-       struct tea6415c_multiplex *v = (struct tea6415c_multiplex *)arg;
-       int result = 0;
-
-       switch (cmd) {
-       case TEA6415C_SWITCH:
-               result = switch_matrix(client, v->in, v->out);
-               break;
-       default:
-               return -ENOIOCTLCMD;
-       }
-       return result;
-}
+       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
+}
+
+/* ----------------------------------------------------------------------- */
+
+static const struct v4l2_subdev_core_ops tea6415c_core_ops = {
+       .ioctl = tea6415c_ioctl,
+};
+
+static const struct v4l2_subdev_ops tea6415c_ops = {
+       .core = &tea6415c_core_ops,
+};
 
 /* this function is called by i2c_probe */
 static int tea6415c_probe(struct i2c_client *client,
                          const struct i2c_device_id *id)
 {
+       struct v4l2_subdev *sd;
+
        /* let's see whether this adapter can support what we need */
        if (!i2c_check_functionality(client->adapter, 
I2C_FUNC_SMBUS_WRITE_BYTE))
                return 0;
 
        v4l_info(client, "chip found @ 0x%x (%s)\n",
                        client->addr << 1, client->adapter->name);
+       sd = kmalloc(sizeof(struct v4l2_subdev), GFP_KERNEL);
+       if (sd == NULL)
+               return -ENOMEM;
+       v4l2_i2c_subdev_init(sd, client, &tea6415c_ops);
+       return 0;
+}
+
+static int tea6415c_remove(struct i2c_client *client)
+{
+       struct v4l2_subdev *sd = i2c_get_clientdata(client);
+
+       v4l2_device_unregister_subdev(sd);
+       kfree(sd);
        return 0;
 }
 
@@ -171,6 +197,7 @@ static struct v4l2_i2c_driver_data v4l2_
        .driverid = I2C_DRIVERID_TEA6415C,
        .command = tea6415c_command,
        .probe = tea6415c_probe,
+       .remove = tea6415c_remove,
        .legacy_probe = tea6415c_legacy_probe,
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)
        .id_table = tea6415c_id,


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/22e6bf3102c1f607b56875ac9a47f5be997044e9

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to