[media] go7007: i2c initialization changes for tw2804
authorVolokh Konstantin <volokh84@gmail.com>
Sat, 9 Mar 2013 11:48:25 +0000 (08:48 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 24 Mar 2013 15:31:51 +0000 (12:31 -0300)
Do i2c initialization via struct item as tw2804 has a 0x00 i2c address,
so we need to use the I2C_CLIENT_TEN flag for validity.

Signed-off-by: Volokh Konstantin <volokh84@gmail.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/staging/media/go7007/go7007-driver.c
drivers/staging/media/go7007/go7007-priv.h
drivers/staging/media/go7007/go7007-usb.c

index 66950916df2311e189bf7df84db591a2c53905bb..2e5be709ceb19aadcb503f81184dec0bebd4400e 100644 (file)
@@ -196,18 +196,22 @@ int go7007_reset_encoder(struct go7007 *go)
 /*
  * 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 addr)
+static int init_i2c_module(struct i2c_adapter *adapter, const struct go_i2c *const i2c)
 {
        struct go7007 *go = i2c_get_adapdata(adapter);
        struct v4l2_device *v4l2_dev = &go->v4l2_dev;
+       struct i2c_board_info info;
 
-       if (v4l2_i2c_new_subdev(v4l2_dev, adapter, type, addr, NULL))
+       memset(&info, 0, sizeof(info));
+       strlcpy(info.type, i2c->type, sizeof(info.type));
+       info.addr = i2c->addr;
+       info.flags = i2c->flags;
+
+       if (v4l2_i2c_new_subdev_board(v4l2_dev, adapter, &info, NULL))
                return 0;
 
-       dev_info(&adapter->dev,
-                "go7007: probing for module i2c:%s failed\n", type);
-       return -1;
+       printk(KERN_INFO "go7007: probing for module i2c:%s failed\n", i2c->type);
+       return -EINVAL;
 }
 
 /*
@@ -243,9 +247,7 @@ int go7007_register_encoder(struct go7007 *go)
        }
        if (go->i2c_adapter_online) {
                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].addr);
+                       init_i2c_module(&go->i2c_adapter, &go->board_info->i2c_devs[i]);
                if (go->board_id == GO7007_BOARDID_ADLINK_MPG24)
                        i2c_clients_command(&go->i2c_adapter,
                                DECODER_SET_CHANNEL, &go->channel_number);
index b58c394c6555269219ab01ca50753c1045ecfd41..b9ebdfbfb52269926c342491f66c4faafc3b4330 100644 (file)
@@ -88,10 +88,11 @@ struct go7007_board_info {
        int audio_bclk_div;
        int audio_main_div;
        int num_i2c_devs;
-       struct {
+       struct go_i2c {
                const char *type;
                int id;
                int addr;
+               u32 flags;
        } i2c_devs[4];
        int num_inputs;
        struct {
index 3333a8f3b654bee925e9194b4b589b1cad6a0bb1..b44f9b124c8af2152ba261bf26b614cb1ab22817 100644 (file)
@@ -398,6 +398,7 @@ static struct go7007_usb_board board_adlink_mpg24 = {
                                .type   = "wis_tw2804",
                                .id     = I2C_DRIVERID_WIS_TW2804,
                                .addr   = 0x00, /* yes, really */
+                               .flags  = I2C_CLIENT_TEN,
                        },
                },
                .num_inputs      = 1,