Pull i3c updates from Alexandre Belloni: "A non-urgent fix and SETDASA is now exported to drivers" * tag 'i3c/for-6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux: MAINTAINERS: mark I3C DRIVER FOR SYNOPSYS DESIGNWARE orphan i3c: export SETDASA method i3c: Correct the macro module_i3c_i2c_driver
Unified · Split
| @@ -9770,8 +9770,7 @@ F: Documentation/devicetree/bindings/i3c/cdns,i3c-master.yaml · 9769 unmodified lines | ||
| 9770 | 9770 | F: drivers/i3c/master/i3c-master-cdns.c |
| 9771 | 9771 | |
| 9772 | 9772 | I3C DRIVER FOR SYNOPSYS DESIGNWARE |
| 9773 | −M: Vitor Soares <vitor.soares@synopsys.com> | |
| 9774 | −S: Maintained | |
| 9773 | +S: Orphan | |
| 9775 | 9774 | F: Documentation/devicetree/bindings/i3c/snps,dw-i3c-master.yaml |
| 9776 | 9775 | F: drivers/i3c/master/dw* |
| 9777 | 9776 | |
| @@ -50,6 +50,26 @@ int i3c_device_do_priv_xfers(struct i3c_device *dev, · 49 unmodified lines | ||
| 50 | 50 | } |
| 51 | 51 | EXPORT_SYMBOL_GPL(i3c_device_do_priv_xfers); |
| 52 | 52 | |
| 53 | +/** | |
| 54 | + * i3c_device_do_setdasa() - do I3C dynamic address assignement with | |
| 55 | + * static address | |
| 56 | + * | |
| 57 | + * @dev: device with which the DAA should be done | |
| 58 | + * | |
| 59 | + * Return: 0 in case of success, a negative error core otherwise. | |
| 60 | + */ | |
| 61 | +int i3c_device_do_setdasa(struct i3c_device *dev) | |
| 62 | +{ | |
| 63 | + int ret; | |
| 64 | + | |
| 65 | + i3c_bus_normaluse_lock(dev->bus); | |
| 66 | + ret = i3c_dev_setdasa_locked(dev->desc); | |
| 67 | + i3c_bus_normaluse_unlock(dev->bus); | |
| 68 | + | |
| 69 | + return ret; | |
| 70 | +} | |
| 71 | +EXPORT_SYMBOL_GPL(i3c_device_do_setdasa); | |
| 72 | + | |
| 53 | 73 | /** |
| 54 | 74 | * i3c_device_get_info() - get I3C device information |
| 55 | 75 | * |
| @@ -15,6 +15,7 @@ extern struct bus_type i3c_bus_type; · 14 unmodified lines | ||
| 15 | 15 | void i3c_bus_normaluse_lock(struct i3c_bus *bus); |
| 16 | 16 | void i3c_bus_normaluse_unlock(struct i3c_bus *bus); |
| 17 | 17 | |
| 18 | +int i3c_dev_setdasa_locked(struct i3c_dev_desc *dev); | |
| 18 | 19 | int i3c_dev_do_priv_xfers_locked(struct i3c_dev_desc *dev, |
| 19 | 20 | struct i3c_priv_xfer *xfers, |
| 20 | 21 | int nxfers); |
| @@ -2708,6 +2708,25 @@ int i3c_master_unregister(struct i3c_master_controller *master) · 2707 unmodified lines | ||
| 2708 | 2708 | } |
| 2709 | 2709 | EXPORT_SYMBOL_GPL(i3c_master_unregister); |
| 2710 | 2710 | |
| 2711 | +int i3c_dev_setdasa_locked(struct i3c_dev_desc *dev) | |
| 2712 | +{ | |
| 2713 | + struct i3c_master_controller *master; | |
| 2714 | + | |
| 2715 | + if (!dev) | |
| 2716 | + return -ENOENT; | |
| 2717 | + | |
| 2718 | + master = i3c_dev_get_master(dev); | |
| 2719 | + if (!master) | |
| 2720 | + return -EINVAL; | |
| 2721 | + | |
| 2722 | + if (!dev->boardinfo || !dev->boardinfo->init_dyn_addr || | |
| 2723 | + !dev->boardinfo->static_addr) | |
| 2724 | + return -EINVAL; | |
| 2725 | + | |
| 2726 | + return i3c_master_setdasa_locked(master, dev->info.static_addr, | |
| 2727 | + dev->boardinfo->init_dyn_addr); | |
| 2728 | +} | |
| 2729 | + | |
| 2711 | 2730 | int i3c_dev_do_priv_xfers_locked(struct i3c_dev_desc *dev, |
| 2712 | 2731 | struct i3c_priv_xfer *xfers, |
| 2713 | 2732 | int nxfers) |
| @@ -287,12 +287,15 @@ static inline void i3c_i2c_driver_unregister(struct i3c_driver *i3cdrv, · 286 unmodified lines | ||
| 287 | 287 | #define module_i3c_i2c_driver(__i3cdrv, __i2cdrv) \ |
| 288 | 288 | module_driver(__i3cdrv, \ |
| 289 | 289 | i3c_i2c_driver_register, \ |
| 290 | − i3c_i2c_driver_unregister) | |
| 290 | + i3c_i2c_driver_unregister, \ | |
| 291 | + __i2cdrv) | |
| 291 | 292 | |
| 292 | 293 | int i3c_device_do_priv_xfers(struct i3c_device *dev, |
| 293 | 294 | struct i3c_priv_xfer *xfers, |
| 294 | 295 | int nxfers); |
| 295 | 296 | |
| 297 | +int i3c_device_do_setdasa(struct i3c_device *dev); | |
| 298 | + | |
| 296 | 299 | void i3c_device_get_info(struct i3c_device *dev, struct i3c_device_info *info); |
| 297 | 300 | |
| 298 | 301 | struct i3c_ibi_payload { |