Lines Matching full:bus

76  * A bus structure. Each bus in the system has such a structure associated.
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,
377 static int kw_i2c_open(struct pmac_i2c_bus *bus) in kw_i2c_open() argument
379 struct pmac_i2c_host_kw *host = bus->hostdata; in kw_i2c_open()
384 static void kw_i2c_close(struct pmac_i2c_bus *bus) in kw_i2c_close() argument
386 struct pmac_i2c_host_kw *host = bus->hostdata; in kw_i2c_close()
390 static int kw_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in kw_i2c_xfer() argument
393 struct pmac_i2c_host_kw *host = bus->hostdata; in kw_i2c_xfer()
395 int use_irq = host->irq != NO_IRQ && !bus->polled; in kw_i2c_xfer()
398 switch(bus->mode) { in kw_i2c_xfer()
420 kw_write_reg(reg_mode, mode_reg | (bus->channel << 4)); in kw_i2c_xfer()
423 /* Set up address and r/w bit, strip possible stale bus number from in kw_i2c_xfer()
439 host->polled = bus->polled; in kw_i2c_xfer()
565 struct pmac_i2c_bus *bus; in kw_i2c_add() local
567 bus = kzalloc(sizeof(struct pmac_i2c_bus), GFP_KERNEL); in kw_i2c_add()
568 if (bus == NULL) in kw_i2c_add()
571 bus->controller = of_node_get(controller); in kw_i2c_add()
572 bus->busnode = of_node_get(busnode); in kw_i2c_add()
573 bus->type = pmac_i2c_bus_keywest; in kw_i2c_add()
574 bus->hostdata = host; in kw_i2c_add()
575 bus->channel = channel; in kw_i2c_add()
576 bus->mode = pmac_i2c_mode_std; in kw_i2c_add()
577 bus->open = kw_i2c_open; in kw_i2c_add()
578 bus->close = kw_i2c_close; in kw_i2c_add()
579 bus->xfer = kw_i2c_xfer; in kw_i2c_add()
580 mutex_init(&bus->mutex); in kw_i2c_add()
582 bus->flags = pmac_i2c_multibus; in kw_i2c_add()
583 list_add(&bus->link, &pmac_i2c_busses); in kw_i2c_add()
585 printk(KERN_INFO " channel %d bus %s\n", channel, in kw_i2c_add()
604 * have proper bus nodes. Note that the "new" way (proper bus in kw_i2c_probe()
611 multibus = !child || strcmp(child->name, "i2c-bus"); in kw_i2c_probe()
614 /* For a multibus setup, we get the bus count based on the in kw_i2c_probe()
652 u8 bus; member
667 static int pmu_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in pmu_i2c_xfer() argument
670 struct adb_request *req = bus->hostdata; in pmu_i2c_xfer()
685 hdr->bus = bus->channel; in pmu_i2c_xfer()
688 switch(bus->mode) { in pmu_i2c_xfer()
702 if (bus->mode == pmac_i2c_mode_stdsub) in pmu_i2c_xfer()
740 hdr->bus = PMU_I2C_BUS_STATUS; in pmu_i2c_xfer()
773 struct pmac_i2c_bus *bus; in pmu_i2c_probe() local
782 * with separate bus nodes, so we assume a multibus setup in pmu_i2c_probe()
793 * We add bus 1 and 2 only for now, bus 0 is "special" in pmu_i2c_probe()
797 bus = kzalloc(sz, GFP_KERNEL); in pmu_i2c_probe()
798 if (bus == NULL) in pmu_i2c_probe()
801 bus->controller = busnode; in pmu_i2c_probe()
802 bus->busnode = busnode; in pmu_i2c_probe()
803 bus->type = pmac_i2c_bus_pmu; in pmu_i2c_probe()
804 bus->channel = channel; in pmu_i2c_probe()
805 bus->mode = pmac_i2c_mode_std; in pmu_i2c_probe()
806 bus->hostdata = bus + 1; in pmu_i2c_probe()
807 bus->xfer = pmu_i2c_xfer; in pmu_i2c_probe()
808 mutex_init(&bus->mutex); in pmu_i2c_probe()
809 bus->flags = pmac_i2c_multibus; in pmu_i2c_probe()
810 list_add(&bus->link, &pmac_i2c_busses); in pmu_i2c_probe()
812 printk(KERN_INFO " channel %d bus <multibus>\n", channel); in pmu_i2c_probe()
832 static int smu_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in smu_i2c_xfer() argument
835 struct smu_i2c_cmd *cmd = bus->hostdata; in smu_i2c_xfer()
845 cmd->info.bus = bus->channel; in smu_i2c_xfer()
849 switch(bus->mode) { in smu_i2c_xfer()
863 if (bus->mode == pmac_i2c_mode_stdsub) in smu_i2c_xfer()
891 struct pmac_i2c_bus *bus; in smu_i2c_probe() local
913 strcmp(busnode->type, "i2c-bus")) in smu_i2c_probe()
920 bus = kzalloc(sz, GFP_KERNEL); in smu_i2c_probe()
921 if (bus == NULL) in smu_i2c_probe()
924 bus->controller = controller; in smu_i2c_probe()
925 bus->busnode = of_node_get(busnode); in smu_i2c_probe()
926 bus->type = pmac_i2c_bus_smu; in smu_i2c_probe()
927 bus->channel = *reg; in smu_i2c_probe()
928 bus->mode = pmac_i2c_mode_std; in smu_i2c_probe()
929 bus->hostdata = bus + 1; in smu_i2c_probe()
930 bus->xfer = smu_i2c_xfer; in smu_i2c_probe()
931 mutex_init(&bus->mutex); in smu_i2c_probe()
932 bus->flags = 0; in smu_i2c_probe()
933 list_add(&bus->link, &pmac_i2c_busses); in smu_i2c_probe()
935 printk(KERN_INFO " channel %x bus %s\n", in smu_i2c_probe()
936 bus->channel, busnode->full_name); in smu_i2c_probe()
953 struct pmac_i2c_bus *bus; in pmac_i2c_find_bus() local
956 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_i2c_find_bus()
957 if (p == bus->busnode) { in pmac_i2c_find_bus()
958 if (prev && bus->flags & pmac_i2c_multibus) { in pmac_i2c_find_bus()
964 if (((*reg) >> 8) != bus->channel) in pmac_i2c_find_bus()
969 return bus; in pmac_i2c_find_bus()
991 struct device_node *pmac_i2c_get_controller(struct pmac_i2c_bus *bus) in pmac_i2c_get_controller() argument
993 return bus->controller; in pmac_i2c_get_controller()
997 struct device_node *pmac_i2c_get_bus_node(struct pmac_i2c_bus *bus) in pmac_i2c_get_bus_node() argument
999 return bus->busnode; in pmac_i2c_get_bus_node()
1003 int pmac_i2c_get_type(struct pmac_i2c_bus *bus) in pmac_i2c_get_type() argument
1005 return bus->type; in pmac_i2c_get_type()
1009 int pmac_i2c_get_flags(struct pmac_i2c_bus *bus) in pmac_i2c_get_flags() argument
1011 return bus->flags; in pmac_i2c_get_flags()
1015 int pmac_i2c_get_channel(struct pmac_i2c_bus *bus) in pmac_i2c_get_channel() argument
1017 return bus->channel; in pmac_i2c_get_channel()
1022 struct i2c_adapter *pmac_i2c_get_adapter(struct pmac_i2c_bus *bus) in pmac_i2c_get_adapter() argument
1024 return &bus->adapter; in pmac_i2c_get_adapter()
1030 struct pmac_i2c_bus *bus; in pmac_i2c_adapter_to_bus() local
1032 list_for_each_entry(bus, &pmac_i2c_busses, link) in pmac_i2c_adapter_to_bus()
1033 if (&bus->adapter == adapter) in pmac_i2c_adapter_to_bus()
1034 return bus; in pmac_i2c_adapter_to_bus()
1041 struct pmac_i2c_bus *bus = pmac_i2c_find_bus(dev); in pmac_i2c_match_adapter() local
1043 if (bus == NULL) in pmac_i2c_match_adapter()
1045 return (&bus->adapter == adapter); in pmac_i2c_match_adapter()
1051 struct pmac_i2c_bus *bus, *found = NULL; in pmac_low_i2c_lock() local
1053 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_low_i2c_lock()
1054 if (np == bus->controller) { in pmac_low_i2c_lock()
1055 found = bus; in pmac_low_i2c_lock()
1061 return pmac_i2c_open(bus, 0); in pmac_low_i2c_lock()
1067 struct pmac_i2c_bus *bus, *found = NULL; in pmac_low_i2c_unlock() local
1069 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_low_i2c_unlock()
1070 if (np == bus->controller) { in pmac_low_i2c_unlock()
1071 found = bus; in pmac_low_i2c_unlock()
1077 pmac_i2c_close(bus); in pmac_low_i2c_unlock()
1083 int pmac_i2c_open(struct pmac_i2c_bus *bus, int polled) in pmac_i2c_open() argument
1087 mutex_lock(&bus->mutex); in pmac_i2c_open()
1088 bus->polled = polled || pmac_i2c_force_poll; in pmac_i2c_open()
1089 bus->opened = 1; in pmac_i2c_open()
1090 bus->mode = pmac_i2c_mode_std; in pmac_i2c_open()
1091 if (bus->open && (rc = bus->open(bus)) != 0) { in pmac_i2c_open()
1092 bus->opened = 0; in pmac_i2c_open()
1093 mutex_unlock(&bus->mutex); in pmac_i2c_open()
1100 void pmac_i2c_close(struct pmac_i2c_bus *bus) in pmac_i2c_close() argument
1102 WARN_ON(!bus->opened); in pmac_i2c_close()
1103 if (bus->close) in pmac_i2c_close()
1104 bus->close(bus); in pmac_i2c_close()
1105 bus->opened = 0; in pmac_i2c_close()
1106 mutex_unlock(&bus->mutex); in pmac_i2c_close()
1110 int pmac_i2c_setmode(struct pmac_i2c_bus *bus, int mode) in pmac_i2c_setmode() argument
1112 WARN_ON(!bus->opened); in pmac_i2c_setmode()
1115 * "combined4" mode that I need to implement for the SMU bus in pmac_i2c_setmode()
1119 " bus %s !\n", mode, bus->busnode->full_name); in pmac_i2c_setmode()
1122 bus->mode = mode; in pmac_i2c_setmode()
1128 int pmac_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize, in pmac_i2c_xfer() argument
1133 WARN_ON(!bus->opened); in pmac_i2c_xfer()
1136 " %d bytes, bus %s\n", bus->channel, addrdir, bus->mode, subsize, in pmac_i2c_xfer()
1137 subaddr, len, bus->busnode->full_name); in pmac_i2c_xfer()
1139 rc = bus->xfer(bus, addrdir, subsize, subaddr, data, len); in pmac_i2c_xfer()
1158 struct pmac_i2c_bus *bus; in pmac_i2c_devscan() local
1189 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_i2c_devscan()
1191 (np = of_get_next_child(bus->busnode, np)) != NULL;) { in pmac_i2c_devscan()
1193 /* If multibus, check if device is on that bus */ in pmac_i2c_devscan()
1194 if (bus->flags & pmac_i2c_multibus) in pmac_i2c_devscan()
1195 if (bus != pmac_i2c_find_bus(np)) in pmac_i2c_devscan()
1216 struct pmac_i2c_bus *bus; member
1227 struct pmac_i2c_bus *bus; in pmac_i2c_do_begin() local
1229 bus = pmac_i2c_find_bus(func->node); in pmac_i2c_do_begin()
1230 if (bus == NULL) { in pmac_i2c_do_begin()
1231 printk(KERN_ERR "low_i2c: Can't find bus for %s (pfunc)\n", in pmac_i2c_do_begin()
1235 if (pmac_i2c_open(bus, 0)) { in pmac_i2c_do_begin()
1236 printk(KERN_ERR "low_i2c: Can't open i2c bus for %s (pfunc)\n", in pmac_i2c_do_begin()
1248 pmac_i2c_close(bus); in pmac_i2c_do_begin()
1251 inst->bus = bus; in pmac_i2c_do_begin()
1263 pmac_i2c_close(inst->bus); in pmac_i2c_do_end()
1272 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_read, 0, 0, in pmac_i2c_do_read()
1280 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 0, 0, in pmac_i2c_do_write()
1317 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 0, 0, in pmac_i2c_do_rmw()
1326 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_read, 1, subaddr, in pmac_i2c_do_read_sub()
1335 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 1, in pmac_i2c_do_write_sub()
1343 return pmac_i2c_setmode(inst->bus, mode); in pmac_i2c_do_set_mode()
1358 return pmac_i2c_xfer(inst->bus, inst->addr | pmac_i2c_write, 1, in pmac_i2c_do_rmw_sub()
1481 struct pmac_i2c_bus *bus; in pmac_i2c_create_platform_devices() local
1491 list_for_each_entry(bus, &pmac_i2c_busses, link) { in pmac_i2c_create_platform_devices()
1492 bus->platform_dev = in pmac_i2c_create_platform_devices()
1494 if (bus->platform_dev == NULL) in pmac_i2c_create_platform_devices()
1496 bus->platform_dev->dev.platform_data = bus; in pmac_i2c_create_platform_devices()
1497 platform_device_add(bus->platform_dev); in pmac_i2c_create_platform_devices()