#include <linux/videodev2.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-chip-ident.h>
-#include <media/v4l2-i2c-drv-legacy.h>
+#include <media/v4l2-i2c-drv.h>
 
 MODULE_DESCRIPTION("Analog Devices ADV7170 video encoder driver");
 MODULE_AUTHOR("Maxim Yevtyushkin");
 MODULE_LICENSE("GPL");
 
-static unsigned short normal_i2c[] = {
-       0xd4 >> 1, 0xd6 >> 1,   /* adv7170 IDs */
-       0x54 >> 1, 0x56 >> 1,   /* adv7171 IDs */
-       I2C_CLIENT_END
-};
-
-I2C_CLIENT_INSMOD;
 
 static int debug;
 module_param(debug, int, 0);
        return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_ADV7170, 0);
 }
 
-static int adv7170_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops adv7170_core_ops = {
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "adv7170",
-       .driverid = I2C_DRIVERID_ADV7170,
-       .command = adv7170_command,
        .probe = adv7170_probe,
        .remove = adv7170_remove,
        .id_table = adv7170_id,
 
 #include <linux/videodev2.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-chip-ident.h>
-#include <media/v4l2-i2c-drv-legacy.h>
+#include <media/v4l2-i2c-drv.h>
 
 MODULE_DESCRIPTION("Analog Devices ADV7175 video encoder driver");
 MODULE_AUTHOR("Dave Perks");
 #define   I2C_ADV7175        0xd4
 #define   I2C_ADV7176        0x54
 
-static unsigned short normal_i2c[] = {
-       I2C_ADV7175 >> 1, (I2C_ADV7175 >> 1) + 1,
-       I2C_ADV7176 >> 1, (I2C_ADV7176 >> 1) + 1,
-       I2C_CLIENT_END
-};
-
-I2C_CLIENT_INSMOD;
 
 static int debug;
 module_param(debug, int, 0);
        return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_ADV7175, 0);
 }
 
-static int adv7175_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops adv7175_core_ops = {
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "adv7175",
-       .driverid = I2C_DRIVERID_ADV7175,
-       .command = adv7175_command,
        .probe = adv7175_probe,
        .remove = adv7175_remove,
        .id_table = adv7175_id,
 
 #include <linux/videodev2.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-chip-ident.h>
-#include <media/v4l2-i2c-drv-legacy.h>
+#include <media/v4l2-i2c-drv.h>
 
 MODULE_DESCRIPTION("Brooktree-819 video decoder driver");
 MODULE_AUTHOR("Mike Bernson & Dave Perks");
 module_param(debug, int, 0);
 MODULE_PARM_DESC(debug, "Debug level (0-1)");
 
-static unsigned short normal_i2c[] = { 0x8a >> 1, I2C_CLIENT_END };
-
-I2C_CLIENT_INSMOD;
 
 /* ----------------------------------------------------------------------- */
 
        return v4l2_chip_ident_i2c_client(client, chip, decoder->ident, 0);
 }
 
-static int bt819_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops bt819_core_ops = {
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "bt819",
-       .driverid = I2C_DRIVERID_BT819,
-       .command = bt819_command,
        .probe = bt819_probe,
        .remove = bt819_remove,
        .id_table = bt819_id,
 
 #include <linux/videodev2.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-chip-ident.h>
-#include <media/v4l2-i2c-drv-legacy.h>
+#include <media/v4l2-i2c-drv.h>
 
 MODULE_DESCRIPTION("Brooktree-856A video encoder driver");
 MODULE_AUTHOR("Mike Bernson & Dave Perks");
 module_param(debug, int, 0);
 MODULE_PARM_DESC(debug, "Debug level (0-1)");
 
-static unsigned short normal_i2c[] = { 0x88 >> 1, I2C_CLIENT_END };
-
-I2C_CLIENT_INSMOD;
 
 /* ----------------------------------------------------------------------- */
 
        return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_BT856, 0);
 }
 
-static int bt856_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops bt856_core_ops = {
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "bt856",
-       .driverid = I2C_DRIVERID_BT856,
-       .command = bt856_command,
        .probe = bt856_probe,
        .remove = bt856_remove,
        .id_table = bt856_id,
 
 #include <linux/videodev2.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-chip-ident.h>
-#include <media/v4l2-i2c-drv-legacy.h>
+#include <media/v4l2-i2c-drv.h>
 
 MODULE_DESCRIPTION("Brooktree-866 video encoder driver");
 MODULE_AUTHOR("Mike Bernson & Dave Perks");
 module_param(debug, int, 0);
 MODULE_PARM_DESC(debug, "Debug level (0-1)");
 
-static unsigned short normal_i2c[] = { 0x88 >> 1, I2C_CLIENT_END };
-
-I2C_CLIENT_INSMOD;
 
 /* ----------------------------------------------------------------------- */
 
        return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_BT866, 0);
 }
 
-static int bt866_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops bt866_core_ops = {
        return 0;
 }
 
-static int bt866_legacy_probe(struct i2c_adapter *adapter)
-{
-       return adapter->id == I2C_HW_B_ZR36067;
-}
-
 static const struct i2c_device_id bt866_id[] = {
        { "bt866", 0 },
        { }
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "bt866",
-       .driverid = I2C_DRIVERID_BT866,
-       .command = bt866_command,
        .probe = bt866_probe,
        .remove = bt866_remove,
-       .legacy_probe = bt866_legacy_probe,
        .id_table = bt866_id,
 };
 
 #include <linux/videodev2.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-chip-ident.h>
-#include <media/v4l2-i2c-drv-legacy.h>
+#include <media/v4l2-i2c-drv.h>
 #include "ks0127.h"
 
 MODULE_DESCRIPTION("KS0127 video decoder driver");
 MODULE_AUTHOR("Ryan Drake");
 MODULE_LICENSE("GPL");
 
-/* Addresses to scan */
+/* Addresses */
 #define I2C_KS0127_ADDON   0xD8
 #define I2C_KS0127_ONBOARD 0xDA
 
-static unsigned short normal_i2c[] = {
-       I2C_KS0127_ADDON >> 1,
-       I2C_KS0127_ONBOARD >> 1,
-       I2C_CLIENT_END
-};
-
-I2C_CLIENT_INSMOD;
 
 /* ks0127 control registers */
 #define KS_STAT     0x00
        return v4l2_chip_ident_i2c_client(client, chip, ks->ident, 0);
 }
 
-static int ks0127_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops ks0127_core_ops = {
        return 0;
 }
 
-static int ks0127_legacy_probe(struct i2c_adapter *adapter)
-{
-       return adapter->id == I2C_HW_B_ZR36067;
-}
-
 static const struct i2c_device_id ks0127_id[] = {
        { "ks0127", 0 },
        { "ks0127b", 0 },
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "ks0127",
-       .driverid = I2C_DRIVERID_KS0127,
-       .command = ks0127_command,
        .probe = ks0127_probe,
        .remove = ks0127_remove,
-       .legacy_probe = ks0127_legacy_probe,
        .id_table = ks0127_id,
 };
 
 #include <linux/videodev2.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-chip-ident.h>
-#include <media/v4l2-i2c-drv-legacy.h>
+#include <media/v4l2-i2c-drv.h>
 
 MODULE_DESCRIPTION("Philips SAA7110 video decoder driver");
 MODULE_AUTHOR("Pauline Middelink");
 MODULE_LICENSE("GPL");
 
-static unsigned short normal_i2c[] = { 0x9c >> 1, 0x9e >> 1, I2C_CLIENT_END };
-
-I2C_CLIENT_INSMOD;
 
 static int debug;
 module_param(debug, int, 0);
        return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_SAA7110, 0);
 }
 
-static int saa7110_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops saa7110_core_ops = {
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "saa7110",
-       .driverid = I2C_DRIVERID_SAA7110,
-       .command = saa7110_command,
        .probe = saa7110_probe,
        .remove = saa7110_remove,
        .id_table = saa7110_id,
 
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "saa7127",
-       .driverid = I2C_DRIVERID_SAA7127,
        .probe = saa7127_probe,
        .remove = saa7127_remove,
        .id_table = saa7127_id,
 
 #include <linux/videodev2.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-chip-ident.h>
-#include <media/v4l2-i2c-drv-legacy.h>
+#include <media/v4l2-i2c-drv.h>
 
 MODULE_DESCRIPTION("Philips SAA7185 video encoder driver");
 MODULE_AUTHOR("Dave Perks");
 module_param(debug, int, 0);
 MODULE_PARM_DESC(debug, "Debug level (0-1)");
 
-static unsigned short normal_i2c[] = { 0x88 >> 1, I2C_CLIENT_END };
-
-I2C_CLIENT_INSMOD;
 
 /* ----------------------------------------------------------------------- */
 
        return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_SAA7185, 0);
 }
 
-static int saa7185_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops saa7185_core_ops = {
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "saa7185",
-       .driverid = I2C_DRIVERID_SAA7185B,
-       .command = saa7185_command,
        .probe = saa7185_probe,
        .remove = saa7185_remove,
        .id_table = saa7185_id,
 
 #include <linux/videodev2.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-chip-ident.h>
-#include <media/v4l2-i2c-drv-legacy.h>
+#include <media/v4l2-i2c-drv.h>
 
 MODULE_DESCRIPTION("vpx3220a/vpx3216b/vpx3214c video decoder driver");
 MODULE_AUTHOR("Laurent Pinchart");
 module_param(debug, int, 0);
 MODULE_PARM_DESC(debug, "Debug level (0-1)");
 
-static unsigned short normal_i2c[] = { 0x86 >> 1, 0x8e >> 1, I2C_CLIENT_END };
-
-I2C_CLIENT_INSMOD;
 
 #define VPX_TIMEOUT_COUNT  10
 
        return v4l2_chip_ident_i2c_client(client, chip, decoder->ident, 0);
 }
 
-static int vpx3220_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops vpx3220_core_ops = {
 
 static struct v4l2_i2c_driver_data v4l2_i2c_data = {
        .name = "vpx3220",
-       .driverid = I2C_DRIVERID_VPX3220,
-       .command = vpx3220_command,
        .probe = vpx3220_probe,
        .remove = vpx3220_remove,
        .id_table = vpx3220_id,