Lines Matching full:i3c

30  * @bus: I3C bus to take the lock on
41 * logic to rely on I3C device information that could be changed behind their
52 * @bus: I3C bus to release the lock on
65 * @bus: I3C bus to take the lock on
69 * maintenance operations). Basically all communications with I3C devices are
71 * state or I3C dynamic address).
74 * In other words, transfer requests passed to the I3C master can be submitted
75 * in parallel and I3C master drivers have to use their own locking to make
86 * @bus: I3C bus to release the lock on
250 struct i3c_device *i3c = dev_to_i3cdev(dev);
254 i3c_device_get_info(i3c, &devinfo);
260 return sprintf(buf, "i3c:dcr%02Xmanuf%04X", devinfo.dcr,
263 return sprintf(buf, "i3c:dcr%02Xmanuf%04Xpart%04Xext%04X",
291 return add_uevent_var(env, "MODALIAS=i3c:dcr%02Xmanuf%04X",
295 "MODALIAS=i3c:dcr%02Xmanuf%04Xpart%04Xext%04X",
340 .name = "i3c",
432 INIT_LIST_HEAD(&i3cbus->devs.i3c);
437 id = of_alias_get_id(np, "i3c");
540 ret = sprintf(buf, "%ld\n", i3cbus->scl_rate.i3c);
608 * @master: I3C master object
620 * @master: I3C master object
667 WARN_ON(!list_empty(&bus->devs.i2c) || !list_empty(&bus->devs.i3c));
686 if (!i3cbus->scl_rate.i3c)
687 i3cbus->scl_rate.i3c = I3C_BUS_TYP_I3C_SCL_RATE;
691 if (!i3cbus->scl_rate.i3c)
692 i3cbus->scl_rate.i3c = I3C_BUS_TYP_I3C_SCL_RATE;
699 if (!i3cbus->scl_rate.i3c ||
700 i3cbus->scl_rate.i3c > i3cbus->scl_rate.i2c)
701 i3cbus->scl_rate.i3c = i3cbus->scl_rate.i2c;
707 dev_dbg(&master->dev, "i2c-scl = %ld Hz i3c-scl = %ld Hz\n",
708 i3cbus->scl_rate.i2c, i3cbus->scl_rate.i3c);
711 * I3C/I2C frequency may have been overridden, check that user-provided
714 if (i3cbus->scl_rate.i3c > I3C_BUS_MAX_I3C_SCL_RATE ||
833 * @master: I3C master object
913 * behind dynamic address assignment has to be handled in the I3C master
918 * Return: 0 in case of success, a positive I3C error code if the error is
963 * @addr: a valid I3C slave address or %I3C_BROADCAST_ADDR
971 * Return: 0 in case of success, a positive I3C error code if the error is
984 * @addr: a valid I3C slave address or %I3C_BROADCAST_ADDR
992 * Return: 0 in case of success, a positive I3C error code if the error is
1010 * This should be called after all I3C devices have been discovered (in other
1018 * Return: 0 in case of success, a positive I3C error code if the error is
1075 /* Skip the I3C dev representing this master. */
1500 list_add_tail(&dev->common.node, &master->bus.devs.i3c);
1654 "Failed to add I3C device (err = %d)\n", ret);
1664 * This function is instantiating an I3C device object and adding it to the
1665 * I3C device list. All device information are automatically retrieved using
1668 * The I3C device object is returned in case the master wants to attach
1697 * @info: I3C device information
1759 list_for_each_entry_safe(i3cdev, i3ctmp, &master->bus.devs.i3c,
1782 * i3c_master_bus_init() - initialize an I3C bus
1785 * This function is following all initialisation steps described in the I3C
1801 * 5. Reserve address slots for I3C devices with init_dyn_addr. And if devices
1803 * the FW with SETDASA and attach corresponding statically defined I3C
1807 * remaining I3C devices
1809 * Once this is done, all I3C and I2C devices should be usable.
1905 list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) {
1969 list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) {
1994 * i3c_master_add_i3c_dev_locked() - add an I3C slave to the bus
1996 * @addr: I3C slave dynamic address assigned to the device
1998 * This function is instantiating an I3C device object and adding it to the
1999 * I3C device list. All device information are automatically retrieved using
2002 * The I3C device object is returned in case the master wants to attach
2163 * The I3C Specification does not clearly say I2C devices with 10-bit
2224 list_add_tail(&boardinfo->node, &master->boardinfo.i3c);
2274 * The user might want to limit I2C and I3C speed in case some devices
2281 if (!of_property_read_u32(i3cbus_np, "i3c-scl-hz", &val))
2282 master->bus.scl_rate.i3c = val;
2452 /* FIXME: Should we allow i3c masters to override these values? */
2714 * i3c_master_register() - register an I3C master
2716 * @parent: the parent device (the one that provides this I3C master
2725 * - creates and initializes the I3C bus
2728 * - registers all I3C devices added by the controller during bus
2761 INIT_LIST_HEAD(&master->boardinfo.i3c);
2768 dev_set_name(&master->dev, "i3c-%d", i3cbus->id);
2820 * Expose our I3C bus as an I2C adapter so that I2C devices are exposed
2835 * register I3C devices discovered during the initial DAA.
2858 * i3c_master_unregister() - unregister an I3C master
3014 res = of_alias_get_highest_id("i3c");
3047 MODULE_DESCRIPTION("I3C core");