struct i2c_algo_bit_data bit;
        struct list_head head;
        u8  index;
-       u8  type;
+       u16 type;
        u32 dcb;
        u32 drive;
        u32 sense;
        struct nouveau_subdev base;
 
        struct nouveau_i2c_port *(*find)(struct nouveau_i2c *, u8 index);
+       struct nouveau_i2c_port *(*find_type)(struct nouveau_i2c *, u16 type);
        int (*identify)(struct nouveau_i2c *, int index,
                        const char *what, struct i2c_board_info *,
                        bool (*match)(struct nouveau_i2c_port *,
 
        return NULL;
 }
 
+static struct nouveau_i2c_port *
+nouveau_i2c_find_type(struct nouveau_i2c *i2c, u16 type)
+{
+       struct nouveau_i2c_port *port;
+
+       list_for_each_entry(port, &i2c->ports, head) {
+               if (port->type == type)
+                       return port;
+       }
+
+       return NULL;
+}
+
 static int
 nouveau_i2c_identify(struct nouveau_i2c *i2c, int index, const char *what,
                     struct i2c_board_info *info,
                return ret;
 
        i2c->find = nouveau_i2c_find;
+       i2c->find_type = nouveau_i2c_find_type;
        i2c->identify = nouveau_i2c_identify;
        INIT_LIST_HEAD(&i2c->ports);