V4L/DVB (6451): v4l2: add support for bus-based I2C drivers
[h-e-n] / drivers / media / video / v4l2-common.c
index a4d68d3..32607a6 100644 (file)
@@ -1013,6 +1013,35 @@ int v4l2_chip_match_host(u32 match_type, u32 match_chip)
 
 /* ----------------------------------------------------------------- */
 
+/* Helper function for I2C legacy drivers */
+
+int v4l2_i2c_attach(struct i2c_adapter *adapter, int address, struct i2c_driver *driver,
+               const char *name, int (*probe)(struct i2c_client *))
+{
+       struct i2c_client *client;
+       int err;
+
+       client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
+       if (client == 0)
+               return -ENOMEM;
+
+       client->addr = address;
+       client->adapter = adapter;
+       client->driver = driver;
+       snprintf(client->name, sizeof(client->name) - 1, name);
+
+       err = probe(client);
+       if (err == 0) {
+               i2c_attach_client(client);
+       }
+       else {
+               kfree(client);
+       }
+       return err;
+}
+
+/* ----------------------------------------------------------------- */
+
 EXPORT_SYMBOL(v4l2_norm_to_name);
 EXPORT_SYMBOL(v4l2_video_std_construct);
 
@@ -1038,6 +1067,8 @@ EXPORT_SYMBOL(v4l2_chip_match_i2c_client);
 EXPORT_SYMBOL(v4l2_chip_ident_i2c_client);
 EXPORT_SYMBOL(v4l2_chip_match_host);
 
+EXPORT_SYMBOL(v4l2_i2c_attach);
+
 /*
  * Local variables:
  * c-basic-offset: 8