Lines Matching refs:adap
134 static int get_scl_gpio_value(struct i2c_adapter *adap) in get_scl_gpio_value() argument
136 return gpio_get_value(adap->bus_recovery_info->scl_gpio); in get_scl_gpio_value()
139 static void set_scl_gpio_value(struct i2c_adapter *adap, int val) in set_scl_gpio_value() argument
141 gpio_set_value(adap->bus_recovery_info->scl_gpio, val); in set_scl_gpio_value()
144 static int get_sda_gpio_value(struct i2c_adapter *adap) in get_sda_gpio_value() argument
146 return gpio_get_value(adap->bus_recovery_info->sda_gpio); in get_sda_gpio_value()
149 static int i2c_get_gpios_for_recovery(struct i2c_adapter *adap) in i2c_get_gpios_for_recovery() argument
151 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_get_gpios_for_recovery()
152 struct device *dev = &adap->dev; in i2c_get_gpios_for_recovery()
174 static void i2c_put_gpios_for_recovery(struct i2c_adapter *adap) in i2c_put_gpios_for_recovery() argument
176 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_put_gpios_for_recovery()
192 static int i2c_generic_recovery(struct i2c_adapter *adap) in i2c_generic_recovery() argument
194 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_generic_recovery()
198 bri->prepare_recovery(adap); in i2c_generic_recovery()
200 bri->set_scl(adap, val); in i2c_generic_recovery()
209 if (bri->get_sda && bri->get_sda(adap)) in i2c_generic_recovery()
212 if (!bri->get_scl(adap)) { in i2c_generic_recovery()
213 dev_err(&adap->dev, in i2c_generic_recovery()
221 bri->set_scl(adap, val); in i2c_generic_recovery()
226 bri->unprepare_recovery(adap); in i2c_generic_recovery()
231 int i2c_generic_scl_recovery(struct i2c_adapter *adap) in i2c_generic_scl_recovery() argument
233 return i2c_generic_recovery(adap); in i2c_generic_scl_recovery()
237 int i2c_generic_gpio_recovery(struct i2c_adapter *adap) in i2c_generic_gpio_recovery() argument
241 ret = i2c_get_gpios_for_recovery(adap); in i2c_generic_gpio_recovery()
245 ret = i2c_generic_recovery(adap); in i2c_generic_gpio_recovery()
246 i2c_put_gpios_for_recovery(adap); in i2c_generic_gpio_recovery()
252 int i2c_recover_bus(struct i2c_adapter *adap) in i2c_recover_bus() argument
254 if (!adap->bus_recovery_info) in i2c_recover_bus()
257 dev_dbg(&adap->dev, "Trying i2c bus recovery\n"); in i2c_recover_bus()
258 return adap->bus_recovery_info->recover_bus(adap); in i2c_recover_bus()
262 static void i2c_init_recovery(struct i2c_adapter *adap) in i2c_init_recovery() argument
264 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; in i2c_init_recovery()
299 dev_err(&adap->dev, "Not using recovery: %s\n", err_str); in i2c_init_recovery()
300 adap->bus_recovery_info = NULL; in i2c_init_recovery()
305 struct i2c_adapter *adap = client->adapter; in i2c_smbus_host_notify_to_irq() local
308 if (!adap->host_notify_domain) in i2c_smbus_host_notify_to_irq()
314 irq = irq_find_mapping(adap->host_notify_domain, client->addr); in i2c_smbus_host_notify_to_irq()
316 irq = irq_create_mapping(adap->host_notify_domain, in i2c_smbus_host_notify_to_irq()
668 static void i2c_dev_set_name(struct i2c_adapter *adap, in i2c_dev_set_name() argument
678 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap), in i2c_dev_set_name()
725 i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info) in i2c_new_device() argument
734 client->adapter = adap; in i2c_new_device()
753 dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n", in i2c_new_device()
759 status = i2c_check_addr_busy(adap, i2c_encode_flags_to_addr(client)); in i2c_new_device()
769 i2c_dev_set_name(adap, client); in i2c_new_device()
774 dev_err(&adap->dev, in i2c_new_device()
785 dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n", in i2c_new_device()
794 dev_err(&adap->dev, in i2c_new_device()
921 struct i2c_adapter *adap = to_i2c_adapter(dev); in i2c_adapter_dev_release() local
922 complete(&adap->dev_released); in i2c_adapter_dev_release()
953 struct i2c_adapter *adap = to_i2c_adapter(dev); in i2c_sysfs_new_device() local
993 client = i2c_new_device(adap, &info); in i2c_sysfs_new_device()
998 mutex_lock(&adap->userspace_clients_lock); in i2c_sysfs_new_device()
999 list_add_tail(&client->detected, &adap->userspace_clients); in i2c_sysfs_new_device()
1000 mutex_unlock(&adap->userspace_clients_lock); in i2c_sysfs_new_device()
1021 struct i2c_adapter *adap = to_i2c_adapter(dev); in i2c_sysfs_delete_device() local
1040 mutex_lock_nested(&adap->userspace_clients_lock, in i2c_sysfs_delete_device()
1041 i2c_adapter_depth(adap)); in i2c_sysfs_delete_device()
1042 list_for_each_entry_safe(client, next, &adap->userspace_clients, in i2c_sysfs_delete_device()
1054 mutex_unlock(&adap->userspace_clients_lock); in i2c_sysfs_delete_device()
1116 struct i2c_adapter *adap) in i2c_do_add_adapter() argument
1119 i2c_detect(adap, driver); in i2c_do_add_adapter()
1123 dev_warn(&adap->dev, "%s: attach_adapter method is deprecated\n", in i2c_do_add_adapter()
1125 dev_warn(&adap->dev, in i2c_do_add_adapter()
1128 driver->attach_adapter(adap); in i2c_do_add_adapter()
1144 static void i2c_host_notify_irq_teardown(struct i2c_adapter *adap) in i2c_host_notify_irq_teardown() argument
1146 struct irq_domain *domain = adap->host_notify_domain; in i2c_host_notify_irq_teardown()
1156 adap->host_notify_domain = NULL; in i2c_host_notify_irq_teardown()
1172 static int i2c_setup_host_notify_irq_domain(struct i2c_adapter *adap) in i2c_setup_host_notify_irq_domain() argument
1176 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_HOST_NOTIFY)) in i2c_setup_host_notify_irq_domain()
1179 domain = irq_domain_create_linear(adap->dev.fwnode, in i2c_setup_host_notify_irq_domain()
1181 &i2c_host_notify_irq_ops, adap); in i2c_setup_host_notify_irq_domain()
1185 adap->host_notify_domain = domain; in i2c_setup_host_notify_irq_domain()
1200 int i2c_handle_smbus_host_notify(struct i2c_adapter *adap, unsigned short addr) in i2c_handle_smbus_host_notify() argument
1204 if (!adap) in i2c_handle_smbus_host_notify()
1207 irq = irq_find_mapping(adap->host_notify_domain, addr); in i2c_handle_smbus_host_notify()
1217 static int i2c_register_adapter(struct i2c_adapter *adap) in i2c_register_adapter() argument
1228 if (WARN(!adap->name[0], "i2c adapter has no name")) in i2c_register_adapter()
1231 if (!adap->algo) { in i2c_register_adapter()
1232 pr_err("adapter '%s': no algo supplied!\n", adap->name); in i2c_register_adapter()
1236 if (!adap->lock_ops) in i2c_register_adapter()
1237 adap->lock_ops = &i2c_adapter_lock_ops; in i2c_register_adapter()
1239 rt_mutex_init(&adap->bus_lock); in i2c_register_adapter()
1240 rt_mutex_init(&adap->mux_lock); in i2c_register_adapter()
1241 mutex_init(&adap->userspace_clients_lock); in i2c_register_adapter()
1242 INIT_LIST_HEAD(&adap->userspace_clients); in i2c_register_adapter()
1245 if (adap->timeout == 0) in i2c_register_adapter()
1246 adap->timeout = HZ; in i2c_register_adapter()
1249 res = i2c_setup_host_notify_irq_domain(adap); in i2c_register_adapter()
1252 adap->name, res); in i2c_register_adapter()
1256 dev_set_name(&adap->dev, "i2c-%d", adap->nr); in i2c_register_adapter()
1257 adap->dev.bus = &i2c_bus_type; in i2c_register_adapter()
1258 adap->dev.type = &i2c_adapter_type; in i2c_register_adapter()
1259 res = device_register(&adap->dev); in i2c_register_adapter()
1261 pr_err("adapter '%s': can't register device (%d)\n", adap->name, res); in i2c_register_adapter()
1265 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name); in i2c_register_adapter()
1267 pm_runtime_no_callbacks(&adap->dev); in i2c_register_adapter()
1268 pm_suspend_ignore_children(&adap->dev, true); in i2c_register_adapter()
1269 pm_runtime_enable(&adap->dev); in i2c_register_adapter()
1272 res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev, in i2c_register_adapter()
1273 adap->dev.parent); in i2c_register_adapter()
1275 dev_warn(&adap->dev, in i2c_register_adapter()
1279 i2c_init_recovery(adap); in i2c_register_adapter()
1282 of_i2c_register_devices(adap); in i2c_register_adapter()
1283 i2c_acpi_register_devices(adap); in i2c_register_adapter()
1284 i2c_acpi_install_space_handler(adap); in i2c_register_adapter()
1286 if (adap->nr < __i2c_first_dynamic_bus_num) in i2c_register_adapter()
1287 i2c_scan_static_board_info(adap); in i2c_register_adapter()
1291 bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter); in i2c_register_adapter()
1298 idr_remove(&i2c_adapter_idr, adap->nr); in i2c_register_adapter()
1310 static int __i2c_add_numbered_adapter(struct i2c_adapter *adap) in __i2c_add_numbered_adapter() argument
1315 id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1, GFP_KERNEL); in __i2c_add_numbered_adapter()
1320 return i2c_register_adapter(adap); in __i2c_add_numbered_adapter()
1386 int i2c_add_numbered_adapter(struct i2c_adapter *adap) in i2c_add_numbered_adapter() argument
1388 if (adap->nr == -1) /* -1 means dynamically assign bus id */ in i2c_add_numbered_adapter()
1389 return i2c_add_adapter(adap); in i2c_add_numbered_adapter()
1391 return __i2c_add_numbered_adapter(adap); in i2c_add_numbered_adapter()
1442 void i2c_del_adapter(struct i2c_adapter *adap) in i2c_del_adapter() argument
1449 found = idr_find(&i2c_adapter_idr, adap->nr); in i2c_del_adapter()
1451 if (found != adap) { in i2c_del_adapter()
1452 pr_debug("attempting to delete unregistered adapter [%s]\n", adap->name); in i2c_del_adapter()
1456 i2c_acpi_remove_space_handler(adap); in i2c_del_adapter()
1459 bus_for_each_drv(&i2c_bus_type, NULL, adap, in i2c_del_adapter()
1464 mutex_lock_nested(&adap->userspace_clients_lock, in i2c_del_adapter()
1465 i2c_adapter_depth(adap)); in i2c_del_adapter()
1466 list_for_each_entry_safe(client, next, &adap->userspace_clients, in i2c_del_adapter()
1468 dev_dbg(&adap->dev, "Removing %s at 0x%x\n", client->name, in i2c_del_adapter()
1473 mutex_unlock(&adap->userspace_clients_lock); in i2c_del_adapter()
1480 device_for_each_child(&adap->dev, NULL, __unregister_client); in i2c_del_adapter()
1481 device_for_each_child(&adap->dev, NULL, __unregister_dummy); in i2c_del_adapter()
1484 class_compat_remove_link(i2c_adapter_compat_class, &adap->dev, in i2c_del_adapter()
1485 adap->dev.parent); in i2c_del_adapter()
1489 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name); in i2c_del_adapter()
1491 pm_runtime_disable(&adap->dev); in i2c_del_adapter()
1493 i2c_host_notify_irq_teardown(adap); in i2c_del_adapter()
1502 init_completion(&adap->dev_released); in i2c_del_adapter()
1503 device_unregister(&adap->dev); in i2c_del_adapter()
1504 wait_for_completion(&adap->dev_released); in i2c_del_adapter()
1508 idr_remove(&i2c_adapter_idr, adap->nr); in i2c_del_adapter()
1513 memset(&adap->dev, 0, sizeof(adap->dev)); in i2c_del_adapter()
1699 void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg) in i2c_clients_command() argument
1705 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd); in i2c_clients_command()
1782 static int i2c_quirk_error(struct i2c_adapter *adap, struct i2c_msg *msg, char *err_msg) in i2c_quirk_error() argument
1784 dev_err_ratelimited(&adap->dev, "adapter quirk: %s (addr 0x%04x, size %u, %s)\n", in i2c_quirk_error()
1790 static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) in i2c_check_for_quirks() argument
1792 const struct i2c_adapter_quirks *q = adap->quirks; in i2c_check_for_quirks()
1802 return i2c_quirk_error(adap, &msgs[0], "1st comb msg must be write"); in i2c_check_for_quirks()
1805 return i2c_quirk_error(adap, &msgs[1], "2nd comb msg must be read"); in i2c_check_for_quirks()
1808 return i2c_quirk_error(adap, &msgs[0], "comb msg only to same addr"); in i2c_check_for_quirks()
1811 return i2c_quirk_error(adap, &msgs[0], "msg too long"); in i2c_check_for_quirks()
1814 return i2c_quirk_error(adap, &msgs[1], "msg too long"); in i2c_check_for_quirks()
1821 return i2c_quirk_error(adap, &msgs[0], "too many messages"); in i2c_check_for_quirks()
1828 return i2c_quirk_error(adap, &msgs[i], "msg too long"); in i2c_check_for_quirks()
1831 return i2c_quirk_error(adap, &msgs[i], "msg too long"); in i2c_check_for_quirks()
1850 int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) in __i2c_transfer() argument
1855 if (adap->quirks && i2c_check_for_quirks(adap, msgs, num)) in __i2c_transfer()
1866 trace_i2c_read(adap, &msgs[i], i); in __i2c_transfer()
1868 trace_i2c_write(adap, &msgs[i], i); in __i2c_transfer()
1873 for (ret = 0, try = 0; try <= adap->retries; try++) { in __i2c_transfer()
1874 ret = adap->algo->master_xfer(adap, msgs, num); in __i2c_transfer()
1877 if (time_after(jiffies, orig_jiffies + adap->timeout)) in __i2c_transfer()
1885 trace_i2c_reply(adap, &msgs[i], i); in __i2c_transfer()
1886 trace_i2c_result(adap, i, ret); in __i2c_transfer()
1905 int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) in i2c_transfer() argument
1926 if (adap->algo->master_xfer) { in i2c_transfer()
1929 dev_dbg(&adap->dev, in i2c_transfer()
1938 ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT); in i2c_transfer()
1943 i2c_lock_bus(adap, I2C_LOCK_SEGMENT); in i2c_transfer()
1946 ret = __i2c_transfer(adap, msgs, num); in i2c_transfer()
1947 i2c_unlock_bus(adap, I2C_LOCK_SEGMENT); in i2c_transfer()
1951 dev_dbg(&adap->dev, "I2C level transfers not supported\n"); in i2c_transfer()
1968 struct i2c_adapter *adap = client->adapter; in i2c_master_send() local
1976 ret = i2c_transfer(adap, &msg, 1); in i2c_master_send()
1996 struct i2c_adapter *adap = client->adapter; in i2c_master_recv() local
2006 ret = i2c_transfer(adap, &msg, 1); in i2c_master_recv()
2034 static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr) in i2c_default_probe() argument
2040 if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON) in i2c_default_probe()
2041 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA)) in i2c_default_probe()
2042 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, in i2c_default_probe()
2047 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK)) in i2c_default_probe()
2048 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0, in i2c_default_probe()
2050 else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE)) in i2c_default_probe()
2051 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, in i2c_default_probe()
2054 dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n", in i2c_default_probe()
2168 int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr) in i2c_probe_func_quick_read() argument
2170 return i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, in i2c_probe_func_quick_read()
2176 i2c_new_probed_device(struct i2c_adapter *adap, in i2c_new_probed_device() argument
2189 dev_warn(&adap->dev, "Invalid 7-bit address 0x%02x\n", in i2c_new_probed_device()
2195 if (i2c_check_addr_busy(adap, addr_list[i])) { in i2c_new_probed_device()
2196 dev_dbg(&adap->dev, in i2c_new_probed_device()
2203 if (probe(adap, addr_list[i])) in i2c_new_probed_device()
2208 dev_dbg(&adap->dev, "Probing failed, no device found\n"); in i2c_new_probed_device()
2213 return i2c_new_device(adap, info); in i2c_new_probed_device()
2237 void i2c_put_adapter(struct i2c_adapter *adap) in i2c_put_adapter() argument
2239 if (!adap) in i2c_put_adapter()
2242 put_device(&adap->dev); in i2c_put_adapter()
2243 module_put(adap->owner); in i2c_put_adapter()