u16 dcb_i2c_entry(struct nouveau_bios *bios, u8 idx, u8 *ver, u8 *len) { u8 hdr, cnt; u16 i2c = dcb_i2c_table(bios, ver, &hdr, &cnt, len); if (i2c && idx < cnt) return i2c + hdr + (idx * *len); return 0x0000; }
static struct nvkm_i2c_port * nvkm_i2c_find(struct nvkm_i2c *i2c, u8 index) { struct nvkm_bios *bios = nvkm_bios(i2c); struct nvkm_i2c_port *port; if (index == NV_I2C_DEFAULT(0) || index == NV_I2C_DEFAULT(1)) { u8 ver, hdr, cnt, len; u16 i2c = dcb_i2c_table(bios, &ver, &hdr, &cnt, &len); if (i2c && ver >= 0x30) { u8 auxidx = nv_ro08(bios, i2c + 4); if (index == NV_I2C_DEFAULT(0)) index = (auxidx & 0x0f) >> 0; else