Lines Matching refs:bus
95 int (*open)(struct pmac_i2c_bus *bus);
96 void (*close)(struct pmac_i2c_bus *bus);
97 int (*xfer)(struct pmac_i2c_bus *bus, u8 addrdir, int subsize,
386 static int kw_i2c_open(struct pmac_i2c_bus *bus) in kw_i2c_open() argument
388 struct pmac_i2c_host_kw *host = bus->hostdata; in kw_i2c_open()
393 static void kw_i2c_close(struct pmac_i2c_bus *bus) in kw_i2c_close() argument
395 struct pmac_i2c_host_kw *host = bus->hostdata; in kw_i2c_close()
399 static int kw_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in kw_i2c_xfer() argument
402 struct pmac_i2c_host_kw *host = bus->hostdata; in kw_i2c_xfer()
404 int use_irq = host->irq != NO_IRQ && !bus->polled; in kw_i2c_xfer()
407 switch(bus->mode) { in kw_i2c_xfer()
429 kw_write_reg(reg_mode, mode_reg | (bus->channel << 4)); in kw_i2c_xfer()
448 host->polled = bus->polled; in kw_i2c_xfer()
574 struct pmac_i2c_bus *bus; in kw_i2c_add() local
576 bus = kzalloc(sizeof(struct pmac_i2c_bus), GFP_KERNEL); in kw_i2c_add()
577 if (bus == NULL) in kw_i2c_add()
580 bus->controller = of_node_get(controller); in kw_i2c_add()
581 bus->busnode = of_node_get(busnode); in kw_i2c_add()
582 bus->type = pmac_i2c_bus_keywest; in kw_i2c_add()
583 bus->hostdata = host; in kw_i2c_add()
584 bus->channel = channel; in kw_i2c_add()
585 bus->mode = pmac_i2c_mode_std; in kw_i2c_add()
586 bus->open = kw_i2c_open; in kw_i2c_add()
587 bus->close = kw_i2c_close; in kw_i2c_add()
588 bus->xfer = kw_i2c_xfer; in kw_i2c_add()
589 mutex_init(&bus->mutex); in kw_i2c_add()
591 bus->flags = pmac_i2c_multibus; in kw_i2c_add()
592 list_add(&bus->link, &pmac_i2c_busses); in kw_i2c_add()
661 u8 bus; member
676 static int pmu_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in pmu_i2c_xfer() argument
679 struct adb_request *req = bus->hostdata; in pmu_i2c_xfer()
694 hdr->bus = bus->channel; in pmu_i2c_xfer()
697 switch(bus->mode) { in pmu_i2c_xfer()
711 if (bus->mode == pmac_i2c_mode_stdsub) in pmu_i2c_xfer()
749 hdr->bus = PMU_I2C_BUS_STATUS; in pmu_i2c_xfer()
782 struct pmac_i2c_bus *bus; in pmu_i2c_probe() local
806 bus = kzalloc(sz, GFP_KERNEL); in pmu_i2c_probe()
807 if (bus == NULL) in pmu_i2c_probe()
810 bus->controller = busnode; in pmu_i2c_probe()
811 bus->busnode = busnode; in pmu_i2c_probe()
812 bus->type = pmac_i2c_bus_pmu; in pmu_i2c_probe()
813 bus->channel = channel; in pmu_i2c_probe()
814 bus->mode = pmac_i2c_mode_std; in pmu_i2c_probe()
815 bus->hostdata = bus + 1; in pmu_i2c_probe()
816 bus->xfer = pmu_i2c_xfer; in pmu_i2c_probe()
817 mutex_init(&bus->mutex); in pmu_i2c_probe()
818 bus->flags = pmac_i2c_multibus; in pmu_i2c_probe()
819 list_add(&bus->link, &pmac_i2c_busses); in pmu_i2c_probe()
841 static int smu_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in smu_i2c_xfer() argument
844 struct smu_i2c_cmd *cmd = bus->hostdata; in smu_i2c_xfer()
854 cmd->info.bus = bus->channel; in smu_i2c_xfer()
858 switch(bus->mode) { in smu_i2c_xfer()
872 if (bus->mode == pmac_i2c_mode_stdsub) in smu_i2c_xfer()
900 struct pmac_i2c_bus *bus; in smu_i2c_probe() local
929 bus = kzalloc(sz, GFP_KERNEL); in smu_i2c_probe()
930 if (bus == NULL) in smu_i2c_probe()
933 bus->controller = controller; in smu_i2c_probe()
934 bus->busnode = of_node_get(busnode); in smu_i2c_probe()
935 bus->type = pmac_i2c_bus_smu; in smu_i2c_probe()
936 bus->channel = *reg; in smu_i2c_probe()
937 bus->mode = pmac_i2c_mode_std; in smu_i2c_probe()
938 bus->hostdata = bus + 1; in smu_i2c_probe()
939 bus->xfer = smu_i2c_xfer; in smu_i2c_probe()
940 mutex_init(&bus->mutex); in smu_i2c_probe()
941 bus->flags = 0; in smu_i2c_probe()
942 list_add(&bus->link, &pmac_i2c_busses); in smu_i2c_probe()
945 bus->channel, busnode->full_name); in smu_i2c_probe()
962 struct pmac_i2c_bus *bus; in pmac_i2c_find_bus() local
965 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_i2c_find_bus()
966 if (p == bus->busnode) { in pmac_i2c_find_bus()
967 if (prev && bus->flags & pmac_i2c_multibus) { in pmac_i2c_find_bus()
973 if (((*reg) >> 8) != bus->channel) in pmac_i2c_find_bus()
978 return bus; in pmac_i2c_find_bus()
1000 struct device_node *pmac_i2c_get_controller(struct pmac_i2c_bus *bus) in pmac_i2c_get_controller() argument
1002 return bus->controller; in pmac_i2c_get_controller()
1006 struct device_node *pmac_i2c_get_bus_node(struct pmac_i2c_bus *bus) in pmac_i2c_get_bus_node() argument
1008 return bus->busnode; in pmac_i2c_get_bus_node()
1012 int pmac_i2c_get_type(struct pmac_i2c_bus *bus) in pmac_i2c_get_type() argument
1014 return bus->type; in pmac_i2c_get_type()
1018 int pmac_i2c_get_flags(struct pmac_i2c_bus *bus) in pmac_i2c_get_flags() argument
1020 return bus->flags; in pmac_i2c_get_flags()
1024 int pmac_i2c_get_channel(struct pmac_i2c_bus *bus) in pmac_i2c_get_channel() argument
1026 return bus->channel; in pmac_i2c_get_channel()
1031 struct i2c_adapter *pmac_i2c_get_adapter(struct pmac_i2c_bus *bus) in pmac_i2c_get_adapter() argument
1033 return &bus->adapter; in pmac_i2c_get_adapter()
1039 struct pmac_i2c_bus *bus; in pmac_i2c_adapter_to_bus() local
1041 list_for_each_entry(bus, &pmac_i2c_busses, link) in pmac_i2c_adapter_to_bus()
1042 if (&bus->adapter == adapter) in pmac_i2c_adapter_to_bus()
1043 return bus; in pmac_i2c_adapter_to_bus()
1050 struct pmac_i2c_bus *bus = pmac_i2c_find_bus(dev); in pmac_i2c_match_adapter() local
1052 if (bus == NULL) in pmac_i2c_match_adapter()
1054 return (&bus->adapter == adapter); in pmac_i2c_match_adapter()
1060 struct pmac_i2c_bus *bus, *found = NULL; in pmac_low_i2c_lock() local
1062 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_low_i2c_lock()
1063 if (np == bus->controller) { in pmac_low_i2c_lock()
1064 found = bus; in pmac_low_i2c_lock()
1070 return pmac_i2c_open(bus, 0); in pmac_low_i2c_lock()
1076 struct pmac_i2c_bus *bus, *found = NULL; in pmac_low_i2c_unlock() local
1078 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_low_i2c_unlock()
1079 if (np == bus->controller) { in pmac_low_i2c_unlock()
1080 found = bus; in pmac_low_i2c_unlock()
1086 pmac_i2c_close(bus); in pmac_low_i2c_unlock()
1092 int pmac_i2c_open(struct pmac_i2c_bus *bus, int polled) in pmac_i2c_open() argument
1096 mutex_lock(&bus->mutex); in pmac_i2c_open()
1097 bus->polled = polled || pmac_i2c_force_poll; in pmac_i2c_open()
1098 bus->opened = 1; in pmac_i2c_open()
1099 bus->mode = pmac_i2c_mode_std; in pmac_i2c_open()
1100 if (bus->open && (rc = bus->open(bus)) != 0) { in pmac_i2c_open()
1101 bus->opened = 0; in pmac_i2c_open()
1102 mutex_unlock(&bus->mutex); in pmac_i2c_open()
1109 void pmac_i2c_close(struct pmac_i2c_bus *bus) in pmac_i2c_close() argument
1111 WARN_ON(!bus->opened); in pmac_i2c_close()
1112 if (bus->close) in pmac_i2c_close()
1113 bus->close(bus); in pmac_i2c_close()
1114 bus->opened = 0; in pmac_i2c_close()
1115 mutex_unlock(&bus->mutex); in pmac_i2c_close()
1119 int pmac_i2c_setmode(struct pmac_i2c_bus *bus, int mode) in pmac_i2c_setmode() argument
1121 WARN_ON(!bus->opened); in pmac_i2c_setmode()
1128 " bus %s !\n", mode, bus->busnode->full_name); in pmac_i2c_setmode()
1131 bus->mode = mode; in pmac_i2c_setmode()
1137 int pmac_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in pmac_i2c_xfer() argument
1142 WARN_ON(!bus->opened); in pmac_i2c_xfer()
1145 " %d bytes, bus %s\n", bus->channel, addrdir, bus->mode, subsize, in pmac_i2c_xfer()
1146 subaddr, len, bus->busnode->full_name); in pmac_i2c_xfer()
1148 rc = bus->xfer(bus, addrdir, subsize, subaddr, data, len); in pmac_i2c_xfer()
1167 struct pmac_i2c_bus *bus; in pmac_i2c_devscan() local
1198 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_i2c_devscan()
1200 (np = of_get_next_child(bus->busnode, np)) != NULL;) { in pmac_i2c_devscan()
1203 if (bus->flags & pmac_i2c_multibus) in pmac_i2c_devscan()
1204 if (bus != pmac_i2c_find_bus(np)) in pmac_i2c_devscan()
1225 struct pmac_i2c_bus *bus; member
1236 struct pmac_i2c_bus *bus; in pmac_i2c_do_begin() local
1238 bus = pmac_i2c_find_bus(func->node); in pmac_i2c_do_begin()
1239 if (bus == NULL) { in pmac_i2c_do_begin()
1244 if (pmac_i2c_open(bus, 0)) { in pmac_i2c_do_begin()
1257 pmac_i2c_close(bus); in pmac_i2c_do_begin()
1260 inst->bus = bus; in pmac_i2c_do_begin()
1272 pmac_i2c_close(inst->bus); in pmac_i2c_do_end()
1281 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_read, 0, 0, in pmac_i2c_do_read()
1289 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 0, 0, in pmac_i2c_do_write()
1326 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 0, 0, in pmac_i2c_do_rmw()
1335 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_read, 1, subaddr, in pmac_i2c_do_read_sub()
1344 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 1, in pmac_i2c_do_write_sub()
1352 return pmac_i2c_setmode(inst->bus, mode); in pmac_i2c_do_set_mode()
1367 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 1, in pmac_i2c_do_rmw_sub()
1490 struct pmac_i2c_bus *bus; in pmac_i2c_create_platform_devices() local
1500 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_i2c_create_platform_devices()
1501 bus->platform_dev = in pmac_i2c_create_platform_devices()
1503 if (bus->platform_dev == NULL) in pmac_i2c_create_platform_devices()
1505 bus->platform_dev->dev.platform_data = bus; in pmac_i2c_create_platform_devices()
1506 bus->platform_dev->dev.of_node = bus->busnode; in pmac_i2c_create_platform_devices()
1507 platform_device_add(bus->platform_dev); in pmac_i2c_create_platform_devices()