Lines Matching refs:bus
96 int (*open)(struct pmac_i2c_bus *bus);
97 void (*close)(struct pmac_i2c_bus *bus);
98 int (*xfer)(struct pmac_i2c_bus *bus, u8 addrdir, int subsize,
387 static int kw_i2c_open(struct pmac_i2c_bus *bus) in kw_i2c_open() argument
389 struct pmac_i2c_host_kw *host = bus->hostdata; in kw_i2c_open()
394 static void kw_i2c_close(struct pmac_i2c_bus *bus) in kw_i2c_close() argument
396 struct pmac_i2c_host_kw *host = bus->hostdata; in kw_i2c_close()
400 static int kw_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in kw_i2c_xfer() argument
403 struct pmac_i2c_host_kw *host = bus->hostdata; in kw_i2c_xfer()
405 int use_irq = host->irq && !bus->polled; in kw_i2c_xfer()
408 switch(bus->mode) { in kw_i2c_xfer()
430 kw_write_reg(reg_mode, mode_reg | (bus->channel << 4)); in kw_i2c_xfer()
449 host->polled = bus->polled; in kw_i2c_xfer()
575 struct pmac_i2c_bus *bus; in kw_i2c_add() local
577 bus = kzalloc(sizeof(struct pmac_i2c_bus), GFP_KERNEL); in kw_i2c_add()
578 if (bus == NULL) in kw_i2c_add()
581 bus->controller = of_node_get(controller); in kw_i2c_add()
582 bus->busnode = of_node_get(busnode); in kw_i2c_add()
583 bus->type = pmac_i2c_bus_keywest; in kw_i2c_add()
584 bus->hostdata = host; in kw_i2c_add()
585 bus->channel = channel; in kw_i2c_add()
586 bus->mode = pmac_i2c_mode_std; in kw_i2c_add()
587 bus->open = kw_i2c_open; in kw_i2c_add()
588 bus->close = kw_i2c_close; in kw_i2c_add()
589 bus->xfer = kw_i2c_xfer; in kw_i2c_add()
590 mutex_init(&bus->mutex); in kw_i2c_add()
591 lockdep_set_class(&bus->mutex, &bus->lock_key); in kw_i2c_add()
593 bus->flags = pmac_i2c_multibus; in kw_i2c_add()
594 list_add(&bus->link, &pmac_i2c_busses); in kw_i2c_add()
663 u8 bus; member
678 static int pmu_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in pmu_i2c_xfer() argument
681 struct adb_request *req = bus->hostdata; in pmu_i2c_xfer()
696 hdr->bus = bus->channel; in pmu_i2c_xfer()
699 switch(bus->mode) { in pmu_i2c_xfer()
713 if (bus->mode == pmac_i2c_mode_stdsub) in pmu_i2c_xfer()
751 hdr->bus = PMU_I2C_BUS_STATUS; in pmu_i2c_xfer()
784 struct pmac_i2c_bus *bus; in pmu_i2c_probe() local
808 bus = kzalloc(sz, GFP_KERNEL); in pmu_i2c_probe()
809 if (bus == NULL) in pmu_i2c_probe()
812 bus->controller = busnode; in pmu_i2c_probe()
813 bus->busnode = busnode; in pmu_i2c_probe()
814 bus->type = pmac_i2c_bus_pmu; in pmu_i2c_probe()
815 bus->channel = channel; in pmu_i2c_probe()
816 bus->mode = pmac_i2c_mode_std; in pmu_i2c_probe()
817 bus->hostdata = bus + 1; in pmu_i2c_probe()
818 bus->xfer = pmu_i2c_xfer; in pmu_i2c_probe()
819 mutex_init(&bus->mutex); in pmu_i2c_probe()
820 lockdep_set_class(&bus->mutex, &bus->lock_key); in pmu_i2c_probe()
821 bus->flags = pmac_i2c_multibus; in pmu_i2c_probe()
822 list_add(&bus->link, &pmac_i2c_busses); in pmu_i2c_probe()
844 static int smu_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in smu_i2c_xfer() argument
847 struct smu_i2c_cmd *cmd = bus->hostdata; in smu_i2c_xfer()
857 cmd->info.bus = bus->channel; in smu_i2c_xfer()
861 switch(bus->mode) { in smu_i2c_xfer()
875 if (bus->mode == pmac_i2c_mode_stdsub) in smu_i2c_xfer()
903 struct pmac_i2c_bus *bus; in smu_i2c_probe() local
932 bus = kzalloc(sz, GFP_KERNEL); in smu_i2c_probe()
933 if (bus == NULL) in smu_i2c_probe()
936 bus->controller = controller; in smu_i2c_probe()
937 bus->busnode = of_node_get(busnode); in smu_i2c_probe()
938 bus->type = pmac_i2c_bus_smu; in smu_i2c_probe()
939 bus->channel = *reg; in smu_i2c_probe()
940 bus->mode = pmac_i2c_mode_std; in smu_i2c_probe()
941 bus->hostdata = bus + 1; in smu_i2c_probe()
942 bus->xfer = smu_i2c_xfer; in smu_i2c_probe()
943 mutex_init(&bus->mutex); in smu_i2c_probe()
944 lockdep_set_class(&bus->mutex, &bus->lock_key); in smu_i2c_probe()
945 bus->flags = 0; in smu_i2c_probe()
946 list_add(&bus->link, &pmac_i2c_busses); in smu_i2c_probe()
949 bus->channel, busnode); in smu_i2c_probe()
966 struct pmac_i2c_bus *bus; in pmac_i2c_find_bus() local
969 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_i2c_find_bus()
970 if (p == bus->busnode) { in pmac_i2c_find_bus()
971 if (prev && bus->flags & pmac_i2c_multibus) { in pmac_i2c_find_bus()
977 if (((*reg) >> 8) != bus->channel) in pmac_i2c_find_bus()
982 return bus; in pmac_i2c_find_bus()
1004 struct device_node *pmac_i2c_get_controller(struct pmac_i2c_bus *bus) in pmac_i2c_get_controller() argument
1006 return bus->controller; in pmac_i2c_get_controller()
1010 struct device_node *pmac_i2c_get_bus_node(struct pmac_i2c_bus *bus) in pmac_i2c_get_bus_node() argument
1012 return bus->busnode; in pmac_i2c_get_bus_node()
1016 int pmac_i2c_get_type(struct pmac_i2c_bus *bus) in pmac_i2c_get_type() argument
1018 return bus->type; in pmac_i2c_get_type()
1022 int pmac_i2c_get_flags(struct pmac_i2c_bus *bus) in pmac_i2c_get_flags() argument
1024 return bus->flags; in pmac_i2c_get_flags()
1028 int pmac_i2c_get_channel(struct pmac_i2c_bus *bus) in pmac_i2c_get_channel() argument
1030 return bus->channel; in pmac_i2c_get_channel()
1035 struct i2c_adapter *pmac_i2c_get_adapter(struct pmac_i2c_bus *bus) in pmac_i2c_get_adapter() argument
1037 return &bus->adapter; in pmac_i2c_get_adapter()
1043 struct pmac_i2c_bus *bus; in pmac_i2c_adapter_to_bus() local
1045 list_for_each_entry(bus, &pmac_i2c_busses, link) in pmac_i2c_adapter_to_bus()
1046 if (&bus->adapter == adapter) in pmac_i2c_adapter_to_bus()
1047 return bus; in pmac_i2c_adapter_to_bus()
1054 struct pmac_i2c_bus *bus = pmac_i2c_find_bus(dev); in pmac_i2c_match_adapter() local
1056 if (bus == NULL) in pmac_i2c_match_adapter()
1058 return (&bus->adapter == adapter); in pmac_i2c_match_adapter()
1064 struct pmac_i2c_bus *bus, *found = NULL; in pmac_low_i2c_lock() local
1066 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_low_i2c_lock()
1067 if (np == bus->controller) { in pmac_low_i2c_lock()
1068 found = bus; in pmac_low_i2c_lock()
1074 return pmac_i2c_open(bus, 0); in pmac_low_i2c_lock()
1080 struct pmac_i2c_bus *bus, *found = NULL; in pmac_low_i2c_unlock() local
1082 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_low_i2c_unlock()
1083 if (np == bus->controller) { in pmac_low_i2c_unlock()
1084 found = bus; in pmac_low_i2c_unlock()
1090 pmac_i2c_close(bus); in pmac_low_i2c_unlock()
1096 int pmac_i2c_open(struct pmac_i2c_bus *bus, int polled) in pmac_i2c_open() argument
1100 mutex_lock(&bus->mutex); in pmac_i2c_open()
1101 bus->polled = polled || pmac_i2c_force_poll; in pmac_i2c_open()
1102 bus->opened = 1; in pmac_i2c_open()
1103 bus->mode = pmac_i2c_mode_std; in pmac_i2c_open()
1104 if (bus->open && (rc = bus->open(bus)) != 0) { in pmac_i2c_open()
1105 bus->opened = 0; in pmac_i2c_open()
1106 mutex_unlock(&bus->mutex); in pmac_i2c_open()
1113 void pmac_i2c_close(struct pmac_i2c_bus *bus) in pmac_i2c_close() argument
1115 WARN_ON(!bus->opened); in pmac_i2c_close()
1116 if (bus->close) in pmac_i2c_close()
1117 bus->close(bus); in pmac_i2c_close()
1118 bus->opened = 0; in pmac_i2c_close()
1119 mutex_unlock(&bus->mutex); in pmac_i2c_close()
1123 int pmac_i2c_setmode(struct pmac_i2c_bus *bus, int mode) in pmac_i2c_setmode() argument
1125 WARN_ON(!bus->opened); in pmac_i2c_setmode()
1132 " bus %pOF !\n", mode, bus->busnode); in pmac_i2c_setmode()
1135 bus->mode = mode; in pmac_i2c_setmode()
1141 int pmac_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in pmac_i2c_xfer() argument
1146 WARN_ON(!bus->opened); in pmac_i2c_xfer()
1149 " %d bytes, bus %pOF\n", bus->channel, addrdir, bus->mode, subsize, in pmac_i2c_xfer()
1150 subaddr, len, bus->busnode); in pmac_i2c_xfer()
1152 rc = bus->xfer(bus, addrdir, subsize, subaddr, data, len); in pmac_i2c_xfer()
1171 struct pmac_i2c_bus *bus; in pmac_i2c_devscan() local
1202 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_i2c_devscan()
1204 (np = of_get_next_child(bus->busnode, np)) != NULL;) { in pmac_i2c_devscan()
1207 if (bus->flags & pmac_i2c_multibus) in pmac_i2c_devscan()
1208 if (bus != pmac_i2c_find_bus(np)) in pmac_i2c_devscan()
1229 struct pmac_i2c_bus *bus; member
1240 struct pmac_i2c_bus *bus; in pmac_i2c_do_begin() local
1242 bus = pmac_i2c_find_bus(func->node); in pmac_i2c_do_begin()
1243 if (bus == NULL) { in pmac_i2c_do_begin()
1248 if (pmac_i2c_open(bus, 0)) { in pmac_i2c_do_begin()
1261 pmac_i2c_close(bus); in pmac_i2c_do_begin()
1264 inst->bus = bus; in pmac_i2c_do_begin()
1276 pmac_i2c_close(inst->bus); in pmac_i2c_do_end()
1285 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_read, 0, 0, in pmac_i2c_do_read()
1293 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 0, 0, in pmac_i2c_do_write()
1330 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 0, 0, in pmac_i2c_do_rmw()
1339 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_read, 1, subaddr, in pmac_i2c_do_read_sub()
1348 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 1, in pmac_i2c_do_write_sub()
1356 return pmac_i2c_setmode(inst->bus, mode); in pmac_i2c_do_set_mode()
1371 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 1, in pmac_i2c_do_rmw_sub()
1494 struct pmac_i2c_bus *bus; in pmac_i2c_create_platform_devices() local
1504 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_i2c_create_platform_devices()
1505 bus->platform_dev = in pmac_i2c_create_platform_devices()
1507 if (bus->platform_dev == NULL) in pmac_i2c_create_platform_devices()
1509 bus->platform_dev->dev.platform_data = bus; in pmac_i2c_create_platform_devices()
1510 bus->platform_dev->dev.of_node = bus->busnode; in pmac_i2c_create_platform_devices()
1511 platform_device_add(bus->platform_dev); in pmac_i2c_create_platform_devices()