Lines Matching +full:multi +full:- +full:line

1 // SPDX-License-Identifier: GPL-2.0+
3 * I2C multi-instantiate driver, pseudo driver to instantiate multiple
4 * i2c-clients from a single fwnode.
37 struct i2c_multi_inst_data *multi; in i2c_multi_inst_probe() local
40 struct device *dev = &pdev->dev; in i2c_multi_inst_probe()
48 return -ENODEV; in i2c_multi_inst_probe()
58 multi = devm_kmalloc(dev, struct_size(multi, clients, ret), GFP_KERNEL); in i2c_multi_inst_probe()
59 if (!multi) in i2c_multi_inst_probe()
60 return -ENOMEM; in i2c_multi_inst_probe()
62 multi->num_clients = ret; in i2c_multi_inst_probe()
64 for (i = 0; i < multi->num_clients && inst_data[i].type; i++) { in i2c_multi_inst_probe()
67 snprintf(name, sizeof(name), "%s-%s.%d", dev_name(dev), in i2c_multi_inst_probe()
93 multi->clients[i] = i2c_acpi_new_device(dev, i, &board_info); in i2c_multi_inst_probe()
94 if (IS_ERR(multi->clients[i])) { in i2c_multi_inst_probe()
95 ret = dev_err_probe(dev, PTR_ERR(multi->clients[i]), in i2c_multi_inst_probe()
96 "Error creating i2c-client, idx %d\n", i); in i2c_multi_inst_probe()
100 if (i < multi->num_clients) { in i2c_multi_inst_probe()
102 ret = -ENODEV; in i2c_multi_inst_probe()
106 platform_set_drvdata(pdev, multi); in i2c_multi_inst_probe()
110 while (--i >= 0) in i2c_multi_inst_probe()
111 i2c_unregister_device(multi->clients[i]); in i2c_multi_inst_probe()
118 struct i2c_multi_inst_data *multi = platform_get_drvdata(pdev); in i2c_multi_inst_remove() local
121 for (i = 0; i < multi->num_clients; i++) in i2c_multi_inst_remove()
122 i2c_unregister_device(multi->clients[i]); in i2c_multi_inst_remove()
148 * are not one-to-one mapped like in the array below. Secondly, on some boards
149 * the IRQ line from the PD controller is not actually connected at all. But the
167 * Note new device-ids must also be added to i2c_multi_instantiate_ids in
179 .name = "I2C multi instantiate pseudo device driver",
187 MODULE_DESCRIPTION("I2C multi instantiate pseudo device driver");