From 27ea56048a610fff746afd278e0ed5c016ff56db Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 20 Aug 2015 14:54:15 +1000 Subject: i2c: transition pad/ports away from being based on nvkm_object Signed-off-by: Ben Skeggs --- bin/nv_aux.c | 21 ++++++++++----------- bin/nv_i2c.c | 50 +++++++++++++++++++++++++++++++++++--------------- 2 files changed, 45 insertions(+), 26 deletions(-) (limited to 'bin') diff --git a/bin/nv_aux.c b/bin/nv_aux.c index f8b7c8022..743160c3e 100644 --- a/bin/nv_aux.c +++ b/bin/nv_aux.c @@ -7,9 +7,9 @@ #include static void -print_chan(struct nvkm_i2c_port *chan) +print_aux(struct nvkm_i2c_aux *aux) { - printf("chan 0x%02x: type %04x\n", chan->index, nv_mclass(chan)); + printf("aux %04x\n", aux->id); } int @@ -21,7 +21,7 @@ main(int argc, char **argv) u64 dev = ~0ULL; struct nvif_client *client; struct nvif_device *device; - struct nvkm_i2c_port *chan; + struct nvkm_i2c_aux *aux; struct nvkm_i2c *i2c; int action = -1, index = -1; int addr = -1, val = -1; @@ -84,23 +84,22 @@ main(int argc, char **argv) i2c = nvxx_i2c(device); if (action < 0) { - list_for_each_entry(chan, &i2c->ports, head) { - if ((nv_mclass(chan) & 0x00ff) == 0x06) - print_chan(chan); + list_for_each_entry(aux, &i2c->aux, head) { + print_aux(aux); } } else { - chan = i2c->find(i2c, index); - if (!chan || (nv_mclass(chan) & 0x00ff) != 0x06) { + aux = nvkm_i2c_aux_find(i2c, index); + if (!aux) { ret = -ENOENT; goto done; } - print_chan(chan); + print_aux(aux); } switch (action) { case 0: - ret = nv_rdaux(chan, addr, &data, 1); + ret = nvkm_rdaux(aux, addr, &data, 1); printf("%05x: ", addr); if (ret < 0) printf("%s\n", strerror(ret)); @@ -109,7 +108,7 @@ main(int argc, char **argv) break; case 1: printf("%05x: %02x", addr, data); - ret = nv_wraux(chan, addr, &data, 1); + ret = nvkm_wraux(aux, addr, &data, 1); if (ret < 0) printf(" - %s", strerror(ret)); printf("\n"); diff --git a/bin/nv_i2c.c b/bin/nv_i2c.c index ee469f0a0..ec0ce4a6d 100644 --- a/bin/nv_i2c.c +++ b/bin/nv_i2c.c @@ -7,9 +7,32 @@ #include static void -print_port(struct nvkm_i2c_port *port) +show_adapter(struct i2c_adapter *adap, int adapter) { - printf("port 0x%02x: type %04x\n", port->index, nv_mclass(port)); + printf("i2c %d: %s\n", adapter, adap->name); +} + +static struct i2c_adapter * +find_adapter(struct nvif_device *device, int adapter) +{ + struct nvkm_i2c *i2c = nvxx_device(device)->i2c; + struct nvkm_i2c_bus *bus; + struct nvkm_i2c_aux *aux; + int i = 0; + + if (i2c) { + list_for_each_entry(bus, &i2c->bus, head) { + if (i++ == adapter) + return &bus->i2c; + } + + list_for_each_entry(aux, &i2c->aux, head) { + if (i++ == adapter) + return &aux->i2c; + } + } + + return NULL; } int @@ -21,8 +44,7 @@ main(int argc, char **argv) u64 dev = ~0ULL; struct nvif_client *client; struct nvif_device *device; - struct nvkm_i2c_port *port; - struct nvkm_i2c *i2c; + struct i2c_adapter *adap; int addr = -1, reg = -1, val = -1; int action = -1, index = -1; int ret, c; @@ -87,20 +109,18 @@ main(int argc, char **argv) if (ret) return ret; - i2c = nvxx_i2c(device); - if (action < 0) { - list_for_each_entry(port, &i2c->ports, head) { - print_port(port); + for (index = 0; (adap = find_adapter(device, index)); index++) { + show_adapter(adap, index); } } else { - port = i2c->find(i2c, index); - if (!port) { + adap = find_adapter(device, index); + if (!adap) { ret = -ENOENT; goto done; } - print_port(port); + show_adapter(adap, index); } switch (action) { @@ -109,7 +129,7 @@ main(int argc, char **argv) for (addr = 0; addr < 128; addr++) { if ((addr & 0x0f) == 0x00) printf("%02x:", addr); - if ((val = nv_rdi2cr(port, addr, 0x00)) >= 0) + if ((val = nvkm_rdi2cr(adap, addr, 0x00)) >= 0) printf(" %02x", addr); else printf(" --"); @@ -122,7 +142,7 @@ main(int argc, char **argv) for (reg = 0; reg < 256; reg++) { if ((reg & 0x0f) == 0x00) printf("%02x:", reg); - if ((val = nv_rdi2cr(port, addr, reg)) >= 0) + if ((val = nvkm_rdi2cr(adap, addr, reg)) >= 0) printf(" %02x", val); else printf(" --"); @@ -133,7 +153,7 @@ main(int argc, char **argv) } break; case 2: - val = nv_rdi2cr(port, addr, reg); + val = nvkm_rdi2cr(adap, addr, reg); printf("%02x[%02x]: ", addr, reg); if (val < 0) printf("%s\n", strerror(val)); @@ -142,7 +162,7 @@ main(int argc, char **argv) break; case 3: printf("%02x[%02x]: %02x", addr, reg, val); - ret = nv_wri2cr(port, addr, reg, val); + ret = nvkm_wri2cr(adap, addr, reg, val); if (ret < 0) printf("%s", strerror(ret)); printf("\n"); -- cgit v1.2.1