Lines Matching refs:adap
167 static void acpi_i2c_register_devices(struct i2c_adapter *adap) in acpi_i2c_register_devices() argument
172 if (!adap->dev.parent) in acpi_i2c_register_devices()
175 handle = ACPI_HANDLE(adap->dev.parent); in acpi_i2c_register_devices()
181 adap, NULL); in acpi_i2c_register_devices()
183 dev_warn(&adap->dev, "failed to enumerate I2C slaves\n"); in acpi_i2c_register_devices()
187 static inline void acpi_i2c_register_devices(struct i2c_adapter *adap) { } in acpi_i2c_register_devices() argument
500 static int get_scl_gpio_value(struct i2c_adapter *adap) in get_scl_gpio_value() argument
502 return gpio_get_value(adap->bus_recovery_info->scl_gpio); in get_scl_gpio_value()
505 static void set_scl_gpio_value(struct i2c_adapter *adap, int val) in set_scl_gpio_value() argument
507 gpio_set_value(adap->bus_recovery_info->scl_gpio, val); in set_scl_gpio_value()
510 static int get_sda_gpio_value(struct i2c_adapter *adap) in get_sda_gpio_value() argument
512 return gpio_get_value(adap->bus_recovery_info->sda_gpio); in get_sda_gpio_value()
515 static int i2c_get_gpios_for_recovery(struct i2c_adapter *adap) in i2c_get_gpios_for_recovery() argument
517 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_get_gpios_for_recovery()
518 struct device *dev = &adap->dev; in i2c_get_gpios_for_recovery()
540 static void i2c_put_gpios_for_recovery(struct i2c_adapter *adap) in i2c_put_gpios_for_recovery() argument
542 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_put_gpios_for_recovery()
558 static int i2c_generic_recovery(struct i2c_adapter *adap) in i2c_generic_recovery() argument
560 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_generic_recovery()
564 bri->prepare_recovery(adap); in i2c_generic_recovery()
572 if (bri->get_sda && bri->get_sda(adap)) in i2c_generic_recovery()
575 if (!bri->get_scl(adap)) { in i2c_generic_recovery()
576 dev_err(&adap->dev, in i2c_generic_recovery()
584 bri->set_scl(adap, val); in i2c_generic_recovery()
589 bri->unprepare_recovery(adap); in i2c_generic_recovery()
594 int i2c_generic_scl_recovery(struct i2c_adapter *adap) in i2c_generic_scl_recovery() argument
596 adap->bus_recovery_info->set_scl(adap, 1); in i2c_generic_scl_recovery()
597 return i2c_generic_recovery(adap); in i2c_generic_scl_recovery()
601 int i2c_generic_gpio_recovery(struct i2c_adapter *adap) in i2c_generic_gpio_recovery() argument
605 ret = i2c_get_gpios_for_recovery(adap); in i2c_generic_gpio_recovery()
609 ret = i2c_generic_recovery(adap); in i2c_generic_gpio_recovery()
610 i2c_put_gpios_for_recovery(adap); in i2c_generic_gpio_recovery()
616 int i2c_recover_bus(struct i2c_adapter *adap) in i2c_recover_bus() argument
618 if (!adap->bus_recovery_info) in i2c_recover_bus()
621 dev_dbg(&adap->dev, "Trying i2c bus recovery\n"); in i2c_recover_bus()
622 return adap->bus_recovery_info->recover_bus(adap); in i2c_recover_bus()
905 static void i2c_dev_set_name(struct i2c_adapter *adap, in i2c_dev_set_name() argument
916 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap), in i2c_dev_set_name()
938 i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info) in i2c_new_device() argument
947 client->adapter = adap; in i2c_new_device()
963 dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n", in i2c_new_device()
969 status = i2c_check_addr_busy(adap, client->addr); in i2c_new_device()
979 i2c_dev_set_name(adap, client); in i2c_new_device()
984 dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n", in i2c_new_device()
990 dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x " in i2c_new_device()
1068 struct i2c_adapter *adap = to_i2c_adapter(dev); in i2c_adapter_dev_release() local
1069 complete(&adap->dev_released); in i2c_adapter_dev_release()
1102 struct i2c_adapter *adap = to_i2c_adapter(dev); in i2c_sysfs_new_device() local
1132 client = i2c_new_device(adap, &info); in i2c_sysfs_new_device()
1137 mutex_lock(&adap->userspace_clients_lock); in i2c_sysfs_new_device()
1138 list_add_tail(&client->detected, &adap->userspace_clients); in i2c_sysfs_new_device()
1139 mutex_unlock(&adap->userspace_clients_lock); in i2c_sysfs_new_device()
1160 struct i2c_adapter *adap = to_i2c_adapter(dev); in i2c_sysfs_delete_device() local
1179 mutex_lock_nested(&adap->userspace_clients_lock, in i2c_sysfs_delete_device()
1180 i2c_adapter_depth(adap)); in i2c_sysfs_delete_device()
1181 list_for_each_entry_safe(client, next, &adap->userspace_clients, in i2c_sysfs_delete_device()
1193 mutex_unlock(&adap->userspace_clients_lock); in i2c_sysfs_delete_device()
1257 static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap, in of_i2c_register_device() argument
1266 dev_dbg(&adap->dev, "of_i2c: register %s\n", node->full_name); in of_i2c_register_device()
1269 dev_err(&adap->dev, "of_i2c: modalias failure on %s\n", in of_i2c_register_device()
1276 dev_err(&adap->dev, "of_i2c: invalid reg on %s\n", in of_i2c_register_device()
1283 dev_err(&adap->dev, "of_i2c: invalid addr=%x on %s\n", in of_i2c_register_device()
1294 result = i2c_new_device(adap, &info); in of_i2c_register_device()
1296 dev_err(&adap->dev, "of_i2c: Failure registering %s\n", in of_i2c_register_device()
1304 static void of_i2c_register_devices(struct i2c_adapter *adap) in of_i2c_register_devices() argument
1309 if (!adap->dev.of_node) in of_i2c_register_devices()
1312 dev_dbg(&adap->dev, "of_i2c: walking child nodes\n"); in of_i2c_register_devices()
1314 for_each_available_child_of_node(adap->dev.of_node, node) in of_i2c_register_devices()
1315 of_i2c_register_device(adap, node); in of_i2c_register_devices()
1351 static void of_i2c_register_devices(struct i2c_adapter *adap) { } in of_i2c_register_devices() argument
1355 struct i2c_adapter *adap) in i2c_do_add_adapter() argument
1358 i2c_detect(adap, driver); in i2c_do_add_adapter()
1362 dev_warn(&adap->dev, "%s: attach_adapter method is deprecated\n", in i2c_do_add_adapter()
1364 dev_warn(&adap->dev, "Please use another way to instantiate " in i2c_do_add_adapter()
1367 driver->attach_adapter(adap); in i2c_do_add_adapter()
1377 static int i2c_register_adapter(struct i2c_adapter *adap) in i2c_register_adapter() argument
1388 if (unlikely(adap->name[0] == '\0')) { in i2c_register_adapter()
1393 if (unlikely(!adap->algo)) { in i2c_register_adapter()
1395 "no algo!\n", adap->name); in i2c_register_adapter()
1399 rt_mutex_init(&adap->bus_lock); in i2c_register_adapter()
1400 mutex_init(&adap->userspace_clients_lock); in i2c_register_adapter()
1401 INIT_LIST_HEAD(&adap->userspace_clients); in i2c_register_adapter()
1404 if (adap->timeout == 0) in i2c_register_adapter()
1405 adap->timeout = HZ; in i2c_register_adapter()
1407 dev_set_name(&adap->dev, "i2c-%d", adap->nr); in i2c_register_adapter()
1408 adap->dev.bus = &i2c_bus_type; in i2c_register_adapter()
1409 adap->dev.type = &i2c_adapter_type; in i2c_register_adapter()
1410 res = device_register(&adap->dev); in i2c_register_adapter()
1414 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name); in i2c_register_adapter()
1416 pm_runtime_no_callbacks(&adap->dev); in i2c_register_adapter()
1419 res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev, in i2c_register_adapter()
1420 adap->dev.parent); in i2c_register_adapter()
1422 dev_warn(&adap->dev, in i2c_register_adapter()
1427 if (adap->bus_recovery_info) { in i2c_register_adapter()
1428 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_register_adapter()
1431 dev_err(&adap->dev, "No recover_bus() found, not using recovery\n"); in i2c_register_adapter()
1432 adap->bus_recovery_info = NULL; in i2c_register_adapter()
1439 dev_err(&adap->dev, "Invalid SCL gpio, not using recovery\n"); in i2c_register_adapter()
1440 adap->bus_recovery_info = NULL; in i2c_register_adapter()
1453 dev_err(&adap->dev, "No {get|set}_gpio() found, not using recovery\n"); in i2c_register_adapter()
1454 adap->bus_recovery_info = NULL; in i2c_register_adapter()
1460 of_i2c_register_devices(adap); in i2c_register_adapter()
1461 acpi_i2c_register_devices(adap); in i2c_register_adapter()
1462 acpi_i2c_install_space_handler(adap); in i2c_register_adapter()
1464 if (adap->nr < __i2c_first_dynamic_bus_num) in i2c_register_adapter()
1465 i2c_scan_static_board_info(adap); in i2c_register_adapter()
1469 bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter); in i2c_register_adapter()
1476 idr_remove(&i2c_adapter_idr, adap->nr); in i2c_register_adapter()
1488 static int __i2c_add_numbered_adapter(struct i2c_adapter *adap) in __i2c_add_numbered_adapter() argument
1493 id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1, in __i2c_add_numbered_adapter()
1499 return i2c_register_adapter(adap); in __i2c_add_numbered_adapter()
1565 int i2c_add_numbered_adapter(struct i2c_adapter *adap) in i2c_add_numbered_adapter() argument
1567 if (adap->nr == -1) /* -1 means dynamically assign bus id */ in i2c_add_numbered_adapter()
1568 return i2c_add_adapter(adap); in i2c_add_numbered_adapter()
1570 return __i2c_add_numbered_adapter(adap); in i2c_add_numbered_adapter()
1621 void i2c_del_adapter(struct i2c_adapter *adap) in i2c_del_adapter() argument
1628 found = idr_find(&i2c_adapter_idr, adap->nr); in i2c_del_adapter()
1630 if (found != adap) { in i2c_del_adapter()
1632 "adapter [%s]\n", adap->name); in i2c_del_adapter()
1636 acpi_i2c_remove_space_handler(adap); in i2c_del_adapter()
1639 bus_for_each_drv(&i2c_bus_type, NULL, adap, in i2c_del_adapter()
1644 mutex_lock_nested(&adap->userspace_clients_lock, in i2c_del_adapter()
1645 i2c_adapter_depth(adap)); in i2c_del_adapter()
1646 list_for_each_entry_safe(client, next, &adap->userspace_clients, in i2c_del_adapter()
1648 dev_dbg(&adap->dev, "Removing %s at 0x%x\n", client->name, in i2c_del_adapter()
1653 mutex_unlock(&adap->userspace_clients_lock); in i2c_del_adapter()
1660 device_for_each_child(&adap->dev, NULL, __unregister_client); in i2c_del_adapter()
1661 device_for_each_child(&adap->dev, NULL, __unregister_dummy); in i2c_del_adapter()
1664 class_compat_remove_link(i2c_adapter_compat_class, &adap->dev, in i2c_del_adapter()
1665 adap->dev.parent); in i2c_del_adapter()
1669 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name); in i2c_del_adapter()
1678 init_completion(&adap->dev_released); in i2c_del_adapter()
1679 device_unregister(&adap->dev); in i2c_del_adapter()
1680 wait_for_completion(&adap->dev_released); in i2c_del_adapter()
1684 idr_remove(&i2c_adapter_idr, adap->nr); in i2c_del_adapter()
1689 memset(&adap->dev, 0, sizeof(adap->dev)); in i2c_del_adapter()
1823 void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg) in i2c_clients_command() argument
1829 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd); in i2c_clients_command()
1838 struct i2c_adapter *adap; in of_i2c_notify() local
1843 adap = of_find_i2c_adapter_by_node(rd->dn->parent); in of_i2c_notify()
1844 if (adap == NULL) in of_i2c_notify()
1847 client = of_i2c_register_device(adap, rd->dn); in of_i2c_notify()
1848 put_device(&adap->dev); in of_i2c_notify()
1944 static int i2c_quirk_error(struct i2c_adapter *adap, struct i2c_msg *msg, char *err_msg) in i2c_quirk_error() argument
1946 dev_err_ratelimited(&adap->dev, "adapter quirk: %s (addr 0x%04x, size %u, %s)\n", in i2c_quirk_error()
1952 static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) in i2c_check_for_quirks() argument
1954 const struct i2c_adapter_quirks *q = adap->quirks; in i2c_check_for_quirks()
1964 return i2c_quirk_error(adap, &msgs[0], "1st comb msg must be write"); in i2c_check_for_quirks()
1967 return i2c_quirk_error(adap, &msgs[1], "2nd comb msg must be read"); in i2c_check_for_quirks()
1970 return i2c_quirk_error(adap, &msgs[0], "comb msg only to same addr"); in i2c_check_for_quirks()
1973 return i2c_quirk_error(adap, &msgs[0], "msg too long"); in i2c_check_for_quirks()
1976 return i2c_quirk_error(adap, &msgs[1], "msg too long"); in i2c_check_for_quirks()
1983 return i2c_quirk_error(adap, &msgs[0], "too many messages"); in i2c_check_for_quirks()
1990 return i2c_quirk_error(adap, &msgs[i], "msg too long"); in i2c_check_for_quirks()
1993 return i2c_quirk_error(adap, &msgs[i], "msg too long"); in i2c_check_for_quirks()
2012 int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) in __i2c_transfer() argument
2017 if (adap->quirks && i2c_check_for_quirks(adap, msgs, num)) in __i2c_transfer()
2028 trace_i2c_read(adap, &msgs[i], i); in __i2c_transfer()
2030 trace_i2c_write(adap, &msgs[i], i); in __i2c_transfer()
2035 for (ret = 0, try = 0; try <= adap->retries; try++) { in __i2c_transfer()
2036 ret = adap->algo->master_xfer(adap, msgs, num); in __i2c_transfer()
2039 if (time_after(jiffies, orig_jiffies + adap->timeout)) in __i2c_transfer()
2047 trace_i2c_reply(adap, &msgs[i], i); in __i2c_transfer()
2048 trace_i2c_result(adap, i, ret); in __i2c_transfer()
2067 int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) in i2c_transfer() argument
2088 if (adap->algo->master_xfer) { in i2c_transfer()
2091 dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, " in i2c_transfer()
2099 ret = i2c_trylock_adapter(adap); in i2c_transfer()
2104 i2c_lock_adapter(adap); in i2c_transfer()
2107 ret = __i2c_transfer(adap, msgs, num); in i2c_transfer()
2108 i2c_unlock_adapter(adap); in i2c_transfer()
2112 dev_dbg(&adap->dev, "I2C level transfers not supported\n"); in i2c_transfer()
2129 struct i2c_adapter *adap = client->adapter; in i2c_master_send() local
2137 ret = i2c_transfer(adap, &msg, 1); in i2c_master_send()
2157 struct i2c_adapter *adap = client->adapter; in i2c_master_recv() local
2167 ret = i2c_transfer(adap, &msg, 1); in i2c_master_recv()
2195 static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr) in i2c_default_probe() argument
2201 if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON) in i2c_default_probe()
2202 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA)) in i2c_default_probe()
2203 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, in i2c_default_probe()
2208 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK)) in i2c_default_probe()
2209 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0, in i2c_default_probe()
2211 else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE)) in i2c_default_probe()
2212 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, in i2c_default_probe()
2215 dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n", in i2c_default_probe()
2329 int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr) in i2c_probe_func_quick_read() argument
2331 return i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, in i2c_probe_func_quick_read()
2337 i2c_new_probed_device(struct i2c_adapter *adap, in i2c_new_probed_device() argument
2350 dev_warn(&adap->dev, "Invalid 7-bit address " in i2c_new_probed_device()
2356 if (i2c_check_addr_busy(adap, addr_list[i])) { in i2c_new_probed_device()
2357 dev_dbg(&adap->dev, "Address 0x%02x already in " in i2c_new_probed_device()
2363 if (probe(adap, addr_list[i])) in i2c_new_probed_device()
2368 dev_dbg(&adap->dev, "Probing failed, no device found\n"); in i2c_new_probed_device()
2373 return i2c_new_device(adap, info); in i2c_new_probed_device()
2391 void i2c_put_adapter(struct i2c_adapter *adap) in i2c_put_adapter() argument
2393 if (adap) in i2c_put_adapter()
2394 module_put(adap->owner); in i2c_put_adapter()