diff -r 690055993011 -r 2d2a250ca33b linux/drivers/staging/go7007/go7007-driver.c
--- a/linux/drivers/staging/go7007/go7007-driver.c	Sun Feb 07 22:26:10 2010 -0200
+++ b/linux/drivers/staging/go7007/go7007-driver.c	Wed Feb 10 11:25:59 2010 -0800
@@ -35,7 +35,6 @@
 #include <media/v4l2-common.h>
 
 #include "go7007-priv.h"
-#include "wis-i2c.h"
 
 /*
  * Wait for an interrupt to be delivered from the GO7007SB and return
@@ -191,51 +190,20 @@
  * Attempt to instantiate an I2C client by ID, probably loading a module.
  */
 static int init_i2c_module(struct i2c_adapter *adapter, const char *type,
-			   int id, int addr)
+			   int addr)
 {
 	struct go7007 *go = i2c_get_adapdata(adapter);
 	struct v4l2_device *v4l2_dev = &go->v4l2_dev;
-	char *modname;
 
-	switch (id) {
-	case I2C_DRIVERID_WIS_SAA7115:
-		modname = "wis-saa7115";
-		break;
-	case I2C_DRIVERID_WIS_SAA7113:
-		modname = "wis-saa7113";
-		break;
-	case I2C_DRIVERID_WIS_UDA1342:
-		modname = "wis-uda1342";
-		break;
-	case I2C_DRIVERID_WIS_SONY_TUNER:
-		modname = "wis-sony-tuner";
-		break;
-	case I2C_DRIVERID_WIS_TW9903:
-		modname = "wis-tw9903";
-		break;
-	case I2C_DRIVERID_WIS_TW2804:
-		modname = "wis-tw2804";
-		break;
-	case I2C_DRIVERID_WIS_OV7640:
-		modname = "wis-ov7640";
-		break;
-	case I2C_DRIVERID_S2250:
-		modname = "s2250";
-		break;
-	default:
-		modname = NULL;
-		break;
-	}
-
-	if (v4l2_i2c_new_subdev(v4l2_dev, adapter, modname, type, addr, NULL))
+	if (v4l2_i2c_new_subdev(v4l2_dev, adapter, type, type, addr, NULL))
 		return 0;
 
-	if (modname != NULL)
+	if (type != NULL)
 		printk(KERN_INFO
-			"go7007: probing for module %s failed\n", modname);
+			"go7007: probing for module %s failed\n", type);
 	else
 		printk(KERN_INFO
-			"go7007: sensor %u seems to be unsupported!\n", id);
+			"go7007: sensor seems to be unsupported!\n");
 	return -1;
 }
 
@@ -274,11 +242,16 @@
 		for (i = 0; i < go->board_info->num_i2c_devs; ++i)
 			init_i2c_module(&go->i2c_adapter,
 					go->board_info->i2c_devs[i].type,
-					go->board_info->i2c_devs[i].id,
 					go->board_info->i2c_devs[i].addr);
-		if (go->board_id == GO7007_BOARDID_ADLINK_MPG24)
-			i2c_clients_command(&go->i2c_adapter,
-				DECODER_SET_CHANNEL, &go->channel_number);
+		if (go->board_id == GO7007_BOARDID_ADLINK_MPG24) {
+			int channel = go->channel_number;
+			struct v4l2_priv_tun_config config = {
+				.tuner	= go->tuner_type,
+				.priv	= &channel,
+			};
+			v4l2_device_call_all(&go->v4l2_dev, 0, tuner, s_config,
+				&config);
+		}
 	}
 	if (go->board_info->flags & GO7007_BOARD_HAS_AUDIO) {
 		go->audio_enabled = 1;
diff -r 690055993011 -r 2d2a250ca33b linux/drivers/staging/go7007/go7007-priv.h
--- a/linux/drivers/staging/go7007/go7007-priv.h	Sun Feb 07 22:26:10 2010 -0200
+++ b/linux/drivers/staging/go7007/go7007-priv.h	Wed Feb 10 11:25:59 2010 -0800
@@ -90,7 +90,6 @@
 	int num_i2c_devs;
 	struct {
 		const char *type;
-		int id;
 		int addr;
 	} i2c_devs[4];
 	int num_inputs;
@@ -288,3 +287,14 @@
 /* snd-go7007.c */
 int go7007_snd_init(struct go7007 *go);
 int go7007_snd_remove(struct go7007 *go);
+
+/* Flag to indicate that the client needs to be accessed with SCCB semantics */
+/* We re-use the I2C_M_TEN value so the flag passes through the masks in the
+ * core I2C code.  Major kludge, but the I2C layer ain't exactly flexible. */
+#define	I2C_CLIENT_SCCB			0x10
+
+/* Sony tuner types */
+
+#define TUNER_SONY_BTF_PG472Z		200
+#define TUNER_SONY_BTF_PK467Z		201
+#define TUNER_SONY_BTF_PB463Z		202
diff -r 690055993011 -r 2d2a250ca33b linux/drivers/staging/go7007/go7007-usb.c
--- a/linux/drivers/staging/go7007/go7007-usb.c	Sun Feb 07 22:26:10 2010 -0200
+++ b/linux/drivers/staging/go7007/go7007-usb.c	Wed Feb 10 11:25:59 2010 -0800
@@ -29,7 +29,6 @@
 #include <media/tvaudio.h>
 
 #include "go7007-priv.h"
-#include "wis-i2c.h"
 
 static unsigned int assume_endura;
 module_param(assume_endura, int, 0644);
@@ -92,8 +91,7 @@
 		.num_i2c_devs	 = 1,
 		.i2c_devs	 = {
 			{
-				.type	= "wis_saa7115",
-				.id	= I2C_DRIVERID_WIS_SAA7115,
+				.type	= "saa7115",
 				.addr	= 0x20,
 			},
 		},
@@ -129,8 +127,7 @@
 		.num_i2c_devs	 = 1,
 		.i2c_devs	 = {
 			{
-				.type	= "wis_saa7113",
-				.id	= I2C_DRIVERID_WIS_SAA7113,
+				.type	= "saa7115",
 				.addr	= 0x25,
 			},
 		},
@@ -167,8 +164,7 @@
 		.num_i2c_devs	 = 1,
 		.i2c_devs	 = {
 			{
-				.type	= "wis_saa7115",
-				.id	= I2C_DRIVERID_WIS_SAA7115,
+				.type	= "saa7115",
 				.addr	= 0x20,
 			},
 		},
@@ -213,18 +209,15 @@
 		.num_i2c_devs	 = 3,
 		.i2c_devs	 = {
 			{
-				.type	= "wis_saa7115",
-				.id	= I2C_DRIVERID_WIS_SAA7115,
+				.type	= "saa7115",
 				.addr	= 0x20,
 			},
 			{
 				.type	= "wis_uda1342",
-				.id	= I2C_DRIVERID_WIS_UDA1342,
 				.addr	= 0x1a,
 			},
 			{
 				.type	= "wis_sony_tuner",
-				.id	= I2C_DRIVERID_WIS_SONY_TUNER,
 				.addr	= 0x60,
 			},
 		},
@@ -272,7 +265,6 @@
 		.i2c_devs	  = {
 			{
 				.type	= "wis_ov7640",
-				.id	= I2C_DRIVERID_WIS_OV7640,
 				.addr	= 0x21,
 			},
 		},
@@ -305,7 +297,6 @@
 		.i2c_devs	 = {
 			{
 				.type	= "wis_tw9903",
-				.id	= I2C_DRIVERID_WIS_TW9903,
 				.addr	= 0x44,
 			},
 		},
@@ -394,8 +385,7 @@
 		.num_i2c_devs	 = 1,
 		.i2c_devs	 = {
 			{
-				.type	= "wis_twTW2804",
-				.id	= I2C_DRIVERID_WIS_TW2804,
+				.type	= "wis_tw2804",
 				.addr	= 0x00, /* yes, really */
 			},
 		},
@@ -426,7 +416,6 @@
 		.i2c_devs	 = {
 			{
 				.type	= "s2250",
-				.id	= I2C_DRIVERID_S2250,
 				.addr	= 0x43,
 			},
 		},
diff -r 690055993011 -r 2d2a250ca33b linux/drivers/staging/go7007/wis-i2c.h
--- a/linux/drivers/staging/go7007/wis-i2c.h	Sun Feb 07 22:26:10 2010 -0200
+++ b/linux/drivers/staging/go7007/wis-i2c.h	Wed Feb 10 11:25:59 2010 -0800
@@ -25,11 +25,6 @@
 #define	I2C_DRIVERID_WIS_TW2804		0xf0f6
 #define	I2C_DRIVERID_S2250		0xf0f7
 
-/* Flag to indicate that the client needs to be accessed with SCCB semantics */
-/* We re-use the I2C_M_TEN value so the flag passes through the masks in the
- * core I2C code.  Major kludge, but the I2C layer ain't exactly flexible. */
-#define	I2C_CLIENT_SCCB			0x10
-
 /* Definitions for new video decoder commands */
 
 struct video_decoder_resolution {
@@ -38,10 +33,4 @@
 };
 
 #define	DECODER_SET_RESOLUTION	_IOW('d', 200, struct video_decoder_resolution)
-#define	DECODER_SET_CHANNEL	_IOW('d', 201, int)
-
-/* Sony tuner types */
-
-#define TUNER_SONY_BTF_PG472Z		200
-#define TUNER_SONY_BTF_PK467Z		201
-#define TUNER_SONY_BTF_PB463Z		202
+#define	DECODER_SET_CHANNEL	_IOW('d', 201, int)
diff -r 690055993011 -r 2d2a250ca33b linux/drivers/staging/go7007/wis-ov7640.c
--- a/linux/drivers/staging/go7007/wis-ov7640.c	Sun Feb 07 22:26:10 2010 -0200
+++ b/linux/drivers/staging/go7007/wis-ov7640.c	Wed Feb 10 11:25:59 2010 -0800
@@ -20,7 +20,7 @@
 #include <linux/i2c.h>
 #include <linux/videodev2.h>
 
-#include "wis-i2c.h"
+#include "go7007-priv.h"
 
 struct wis_ov7640 {
 	int brightness;
diff -r 690055993011 -r 2d2a250ca33b linux/drivers/staging/go7007/wis-sony-tuner.c
--- a/linux/drivers/staging/go7007/wis-sony-tuner.c	Sun Feb 07 22:26:10 2010 -0200
+++ b/linux/drivers/staging/go7007/wis-sony-tuner.c	Wed Feb 10 11:25:59 2010 -0800
@@ -23,7 +23,7 @@
 #include <media/v4l2-common.h>
 #include <media/v4l2-ioctl.h>
 
-#include "wis-i2c.h"
+#include "go7007-priv.h"
 
 /* #define MPX_DEBUG */
 
