Lines Matching refs:adap

179 static int get_scl_gpio_value(struct i2c_adapter *adap)  in get_scl_gpio_value()  argument
181 return gpiod_get_value_cansleep(adap->bus_recovery_info->scl_gpiod); in get_scl_gpio_value()
184 static void set_scl_gpio_value(struct i2c_adapter *adap, int val) in set_scl_gpio_value() argument
186 gpiod_set_value_cansleep(adap->bus_recovery_info->scl_gpiod, val); in set_scl_gpio_value()
189 static int get_sda_gpio_value(struct i2c_adapter *adap) in get_sda_gpio_value() argument
191 return gpiod_get_value_cansleep(adap->bus_recovery_info->sda_gpiod); in get_sda_gpio_value()
194 static void set_sda_gpio_value(struct i2c_adapter *adap, int val) in set_sda_gpio_value() argument
196 gpiod_set_value_cansleep(adap->bus_recovery_info->sda_gpiod, val); in set_sda_gpio_value()
199 static int i2c_generic_bus_free(struct i2c_adapter *adap) in i2c_generic_bus_free() argument
201 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_generic_bus_free()
205 ret = bri->get_bus_free(adap); in i2c_generic_bus_free()
207 ret = bri->get_sda(adap); in i2c_generic_bus_free()
223 int i2c_generic_scl_recovery(struct i2c_adapter *adap) in i2c_generic_scl_recovery() argument
225 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_generic_scl_recovery()
229 bri->prepare_recovery(adap); in i2c_generic_scl_recovery()
240 bri->set_scl(adap, scl); in i2c_generic_scl_recovery()
243 bri->set_sda(adap, scl); in i2c_generic_scl_recovery()
252 if (!bri->get_scl(adap)) { in i2c_generic_scl_recovery()
253 dev_err(&adap->dev, in i2c_generic_scl_recovery()
261 bri->set_scl(adap, scl); in i2c_generic_scl_recovery()
271 bri->set_sda(adap, scl); in i2c_generic_scl_recovery()
275 ret = i2c_generic_bus_free(adap); in i2c_generic_scl_recovery()
286 bri->unprepare_recovery(adap); in i2c_generic_scl_recovery()
294 int i2c_recover_bus(struct i2c_adapter *adap) in i2c_recover_bus() argument
296 if (!adap->bus_recovery_info) in i2c_recover_bus()
299 dev_dbg(&adap->dev, "Trying i2c bus recovery\n"); in i2c_recover_bus()
300 return adap->bus_recovery_info->recover_bus(adap); in i2c_recover_bus()
304 static void i2c_gpio_init_pinctrl_recovery(struct i2c_adapter *adap) in i2c_gpio_init_pinctrl_recovery() argument
306 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_gpio_init_pinctrl_recovery()
307 struct device *dev = &adap->dev; in i2c_gpio_init_pinctrl_recovery()
351 static int i2c_gpio_init_generic_recovery(struct i2c_adapter *adap) in i2c_gpio_init_generic_recovery() argument
353 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_gpio_init_generic_recovery()
354 struct device *dev = &adap->dev; in i2c_gpio_init_generic_recovery()
419 static int i2c_gpio_init_recovery(struct i2c_adapter *adap) in i2c_gpio_init_recovery() argument
421 i2c_gpio_init_pinctrl_recovery(adap); in i2c_gpio_init_recovery()
422 return i2c_gpio_init_generic_recovery(adap); in i2c_gpio_init_recovery()
425 static int i2c_init_recovery(struct i2c_adapter *adap) in i2c_init_recovery() argument
427 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_init_recovery()
434 if (i2c_gpio_init_recovery(adap) == -EPROBE_DEFER) in i2c_init_recovery()
467 dev_err(&adap->dev, "Not using recovery: %s\n", err_str); in i2c_init_recovery()
469 dev_dbg(&adap->dev, "Not using recovery: %s\n", err_str); in i2c_init_recovery()
470 adap->bus_recovery_info = NULL; in i2c_init_recovery()
477 struct i2c_adapter *adap = client->adapter; in i2c_smbus_host_notify_to_irq() local
480 if (!adap->host_notify_domain) in i2c_smbus_host_notify_to_irq()
486 irq = irq_create_mapping(adap->host_notify_domain, client->addr); in i2c_smbus_host_notify_to_irq()
879 static void i2c_dev_set_name(struct i2c_adapter *adap, in i2c_dev_set_name() argument
895 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap), in i2c_dev_set_name()
929 static int i2c_lock_addr(struct i2c_adapter *adap, unsigned short addr, in i2c_lock_addr() argument
933 test_and_set_bit(addr, adap->addrs_in_instantiation)) in i2c_lock_addr()
939 static void i2c_unlock_addr(struct i2c_adapter *adap, unsigned short addr, in i2c_unlock_addr() argument
943 clear_bit(addr, adap->addrs_in_instantiation); in i2c_unlock_addr()
963 i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *info) in i2c_new_client_device() argument
974 client->adapter = adap; in i2c_new_client_device()
989 dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n", in i2c_new_client_device()
994 status = i2c_lock_addr(adap, client->addr, client->flags); in i2c_new_client_device()
999 status = i2c_check_addr_busy(adap, i2c_encode_flags_to_addr(client)); in i2c_new_client_device()
1014 dev_err(&adap->dev, in i2c_new_client_device()
1021 i2c_dev_set_name(adap, client, info); in i2c_new_client_device()
1026 dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n", in i2c_new_client_device()
1029 i2c_unlock_addr(adap, client->addr, client->flags); in i2c_new_client_device()
1039 dev_err(&adap->dev, in i2c_new_client_device()
1042 i2c_unlock_addr(adap, client->addr, client->flags); in i2c_new_client_device()
1236 struct i2c_adapter *adap = to_i2c_adapter(dev); in i2c_adapter_dev_release() local
1237 complete(&adap->dev_released); in i2c_adapter_dev_release()
1270 struct i2c_adapter *adap = to_i2c_adapter(dev); in new_device_store() local
1310 client = i2c_new_client_device(adap, &info); in new_device_store()
1315 mutex_lock(&adap->userspace_clients_lock); in new_device_store()
1316 list_add_tail(&client->detected, &adap->userspace_clients); in new_device_store()
1317 mutex_unlock(&adap->userspace_clients_lock); in new_device_store()
1338 struct i2c_adapter *adap = to_i2c_adapter(dev); in delete_device_store() local
1357 mutex_lock_nested(&adap->userspace_clients_lock, in delete_device_store()
1358 i2c_adapter_depth(adap)); in delete_device_store()
1359 list_for_each_entry_safe(client, next, &adap->userspace_clients, in delete_device_store()
1371 mutex_unlock(&adap->userspace_clients_lock); in delete_device_store()
1428 struct i2c_adapter *adap) in i2c_do_add_adapter() argument
1431 i2c_detect(adap, driver); in i2c_do_add_adapter()
1447 static void i2c_host_notify_irq_teardown(struct i2c_adapter *adap) in i2c_host_notify_irq_teardown() argument
1449 struct irq_domain *domain = adap->host_notify_domain; in i2c_host_notify_irq_teardown()
1459 adap->host_notify_domain = NULL; in i2c_host_notify_irq_teardown()
1475 static int i2c_setup_host_notify_irq_domain(struct i2c_adapter *adap) in i2c_setup_host_notify_irq_domain() argument
1479 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_HOST_NOTIFY)) in i2c_setup_host_notify_irq_domain()
1482 domain = irq_domain_create_linear(adap->dev.parent->fwnode, in i2c_setup_host_notify_irq_domain()
1484 &i2c_host_notify_irq_ops, adap); in i2c_setup_host_notify_irq_domain()
1488 adap->host_notify_domain = domain; in i2c_setup_host_notify_irq_domain()
1503 int i2c_handle_smbus_host_notify(struct i2c_adapter *adap, unsigned short addr) in i2c_handle_smbus_host_notify() argument
1507 if (!adap) in i2c_handle_smbus_host_notify()
1510 dev_dbg(&adap->dev, "Detected HostNotify from address 0x%02x", addr); in i2c_handle_smbus_host_notify()
1512 irq = irq_find_mapping(adap->host_notify_domain, addr); in i2c_handle_smbus_host_notify()
1522 static int i2c_register_adapter(struct i2c_adapter *adap) in i2c_register_adapter() argument
1533 if (WARN(!adap->name[0], "i2c adapter has no name")) in i2c_register_adapter()
1536 if (!adap->algo) { in i2c_register_adapter()
1537 pr_err("adapter '%s': no algo supplied!\n", adap->name); in i2c_register_adapter()
1541 if (!adap->lock_ops) in i2c_register_adapter()
1542 adap->lock_ops = &i2c_adapter_lock_ops; in i2c_register_adapter()
1544 adap->locked_flags = 0; in i2c_register_adapter()
1545 rt_mutex_init(&adap->bus_lock); in i2c_register_adapter()
1546 rt_mutex_init(&adap->mux_lock); in i2c_register_adapter()
1547 mutex_init(&adap->userspace_clients_lock); in i2c_register_adapter()
1548 INIT_LIST_HEAD(&adap->userspace_clients); in i2c_register_adapter()
1551 if (adap->timeout == 0) in i2c_register_adapter()
1552 adap->timeout = HZ; in i2c_register_adapter()
1555 res = i2c_setup_host_notify_irq_domain(adap); in i2c_register_adapter()
1558 adap->name, res); in i2c_register_adapter()
1562 dev_set_name(&adap->dev, "i2c-%d", adap->nr); in i2c_register_adapter()
1563 adap->dev.bus = &i2c_bus_type; in i2c_register_adapter()
1564 adap->dev.type = &i2c_adapter_type; in i2c_register_adapter()
1565 device_initialize(&adap->dev); in i2c_register_adapter()
1571 device_enable_async_suspend(&adap->dev); in i2c_register_adapter()
1572 pm_runtime_no_callbacks(&adap->dev); in i2c_register_adapter()
1573 pm_suspend_ignore_children(&adap->dev, true); in i2c_register_adapter()
1574 pm_runtime_enable(&adap->dev); in i2c_register_adapter()
1576 res = device_add(&adap->dev); in i2c_register_adapter()
1578 pr_err("adapter '%s': can't register device (%d)\n", adap->name, res); in i2c_register_adapter()
1579 put_device(&adap->dev); in i2c_register_adapter()
1583 adap->debugfs = debugfs_create_dir(dev_name(&adap->dev), i2c_debugfs_root); in i2c_register_adapter()
1585 res = i2c_setup_smbus_alert(adap); in i2c_register_adapter()
1589 res = i2c_init_recovery(adap); in i2c_register_adapter()
1593 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name); in i2c_register_adapter()
1596 of_i2c_register_devices(adap); in i2c_register_adapter()
1597 i2c_acpi_install_space_handler(adap); in i2c_register_adapter()
1598 i2c_acpi_register_devices(adap); in i2c_register_adapter()
1600 if (adap->nr < __i2c_first_dynamic_bus_num) in i2c_register_adapter()
1601 i2c_scan_static_board_info(adap); in i2c_register_adapter()
1605 bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter); in i2c_register_adapter()
1611 debugfs_remove_recursive(adap->debugfs); in i2c_register_adapter()
1612 init_completion(&adap->dev_released); in i2c_register_adapter()
1613 device_unregister(&adap->dev); in i2c_register_adapter()
1614 wait_for_completion(&adap->dev_released); in i2c_register_adapter()
1617 idr_remove(&i2c_adapter_idr, adap->nr); in i2c_register_adapter()
1629 static int __i2c_add_numbered_adapter(struct i2c_adapter *adap) in __i2c_add_numbered_adapter() argument
1634 id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1, GFP_KERNEL); in __i2c_add_numbered_adapter()
1639 return i2c_register_adapter(adap); in __i2c_add_numbered_adapter()
1703 int i2c_add_numbered_adapter(struct i2c_adapter *adap) in i2c_add_numbered_adapter() argument
1705 if (adap->nr == -1) /* -1 means dynamically assign bus id */ in i2c_add_numbered_adapter()
1706 return i2c_add_adapter(adap); in i2c_add_numbered_adapter()
1708 return __i2c_add_numbered_adapter(adap); in i2c_add_numbered_adapter()
1758 void i2c_del_adapter(struct i2c_adapter *adap) in i2c_del_adapter() argument
1765 found = idr_find(&i2c_adapter_idr, adap->nr); in i2c_del_adapter()
1767 if (found != adap) { in i2c_del_adapter()
1768 pr_debug("attempting to delete unregistered adapter [%s]\n", adap->name); in i2c_del_adapter()
1772 i2c_acpi_remove_space_handler(adap); in i2c_del_adapter()
1775 bus_for_each_drv(&i2c_bus_type, NULL, adap, in i2c_del_adapter()
1780 mutex_lock_nested(&adap->userspace_clients_lock, in i2c_del_adapter()
1781 i2c_adapter_depth(adap)); in i2c_del_adapter()
1782 list_for_each_entry_safe(client, next, &adap->userspace_clients, in i2c_del_adapter()
1784 dev_dbg(&adap->dev, "Removing %s at 0x%x\n", client->name, in i2c_del_adapter()
1789 mutex_unlock(&adap->userspace_clients_lock); in i2c_del_adapter()
1796 device_for_each_child(&adap->dev, NULL, __unregister_client); in i2c_del_adapter()
1797 device_for_each_child(&adap->dev, NULL, __unregister_dummy); in i2c_del_adapter()
1800 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name); in i2c_del_adapter()
1802 pm_runtime_disable(&adap->dev); in i2c_del_adapter()
1804 i2c_host_notify_irq_teardown(adap); in i2c_del_adapter()
1806 debugfs_remove_recursive(adap->debugfs); in i2c_del_adapter()
1815 init_completion(&adap->dev_released); in i2c_del_adapter()
1816 device_unregister(&adap->dev); in i2c_del_adapter()
1817 wait_for_completion(&adap->dev_released); in i2c_del_adapter()
1821 idr_remove(&i2c_adapter_idr, adap->nr); in i2c_del_adapter()
1826 memset(&adap->dev, 0, sizeof(adap->dev)); in i2c_del_adapter()
2078 void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg) in i2c_clients_command() argument
2084 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd); in i2c_clients_command()
2150 static int i2c_quirk_error(struct i2c_adapter *adap, struct i2c_msg *msg, char *err_msg) in i2c_quirk_error() argument
2152 dev_err_ratelimited(&adap->dev, "adapter quirk: %s (addr 0x%04x, size %u, %s)\n", in i2c_quirk_error()
2158 static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) in i2c_check_for_quirks() argument
2160 const struct i2c_adapter_quirks *q = adap->quirks; in i2c_check_for_quirks()
2170 return i2c_quirk_error(adap, &msgs[0], "1st comb msg must be write"); in i2c_check_for_quirks()
2173 return i2c_quirk_error(adap, &msgs[1], "2nd comb msg must be read"); in i2c_check_for_quirks()
2176 return i2c_quirk_error(adap, &msgs[0], "comb msg only to same addr"); in i2c_check_for_quirks()
2179 return i2c_quirk_error(adap, &msgs[0], "msg too long"); in i2c_check_for_quirks()
2182 return i2c_quirk_error(adap, &msgs[1], "msg too long"); in i2c_check_for_quirks()
2189 return i2c_quirk_error(adap, &msgs[0], "too many messages"); in i2c_check_for_quirks()
2196 return i2c_quirk_error(adap, &msgs[i], "msg too long"); in i2c_check_for_quirks()
2199 return i2c_quirk_error(adap, &msgs[i], "no zero length"); in i2c_check_for_quirks()
2202 return i2c_quirk_error(adap, &msgs[i], "msg too long"); in i2c_check_for_quirks()
2205 return i2c_quirk_error(adap, &msgs[i], "no zero length"); in i2c_check_for_quirks()
2224 int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) in __i2c_transfer() argument
2229 if (!adap->algo->master_xfer) { in __i2c_transfer()
2230 dev_dbg(&adap->dev, "I2C level transfers not supported\n"); in __i2c_transfer()
2237 ret = __i2c_check_suspended(adap); in __i2c_transfer()
2241 if (adap->quirks && i2c_check_for_quirks(adap, msgs, num)) in __i2c_transfer()
2253 trace_i2c_read(adap, &msgs[i], i); in __i2c_transfer()
2255 trace_i2c_write(adap, &msgs[i], i); in __i2c_transfer()
2260 for (ret = 0, try = 0; try <= adap->retries; try++) { in __i2c_transfer()
2261 if (i2c_in_atomic_xfer_mode() && adap->algo->master_xfer_atomic) in __i2c_transfer()
2262 ret = adap->algo->master_xfer_atomic(adap, msgs, num); in __i2c_transfer()
2264 ret = adap->algo->master_xfer(adap, msgs, num); in __i2c_transfer()
2268 if (time_after(jiffies, orig_jiffies + adap->timeout)) in __i2c_transfer()
2276 trace_i2c_reply(adap, &msgs[i], i); in __i2c_transfer()
2277 trace_i2c_result(adap, num, ret); in __i2c_transfer()
2296 int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) in i2c_transfer() argument
2316 ret = __i2c_lock_bus_helper(adap); in i2c_transfer()
2320 ret = __i2c_transfer(adap, msgs, num); in i2c_transfer()
2321 i2c_unlock_bus(adap, I2C_LOCK_SEGMENT); in i2c_transfer()
2368 struct i2c_adapter *adap = client->adapter; in i2c_get_device_id() local
2372 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_I2C_BLOCK)) in i2c_get_device_id()
2376 ret = i2c_smbus_xfer(adap, I2C_ADDR_DEVICE_ID, 0, in i2c_get_device_id()
2421 static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr) in i2c_default_probe() argument
2427 if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON) in i2c_default_probe()
2428 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA)) in i2c_default_probe()
2429 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, in i2c_default_probe()
2434 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK)) in i2c_default_probe()
2435 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0, in i2c_default_probe()
2437 else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE)) in i2c_default_probe()
2438 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, in i2c_default_probe()
2441 dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n", in i2c_default_probe()
2556 int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr) in i2c_probe_func_quick_read() argument
2558 return i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, in i2c_probe_func_quick_read()
2564 i2c_new_scanned_device(struct i2c_adapter *adap, in i2c_new_scanned_device() argument
2567 int (*probe)(struct i2c_adapter *adap, unsigned short addr)) in i2c_new_scanned_device() argument
2577 dev_warn(&adap->dev, "Invalid 7-bit address 0x%02x\n", in i2c_new_scanned_device()
2583 if (i2c_check_addr_busy(adap, addr_list[i])) { in i2c_new_scanned_device()
2584 dev_dbg(&adap->dev, in i2c_new_scanned_device()
2591 if (probe(adap, addr_list[i])) in i2c_new_scanned_device()
2596 dev_dbg(&adap->dev, "Probing failed, no device found\n"); in i2c_new_scanned_device()
2601 return i2c_new_client_device(adap, info); in i2c_new_scanned_device()
2625 void i2c_put_adapter(struct i2c_adapter *adap) in i2c_put_adapter() argument
2627 if (!adap) in i2c_put_adapter()
2630 module_put(adap->owner); in i2c_put_adapter()
2632 put_device(&adap->dev); in i2c_put_adapter()