Re: [PATCH V2 6/7] i3c: master: Move DAA API functions after i3c_master_add_i3c_dev_locked()
Frank Li <[email protected]>
| Newsgroups | org.infradead.lists.linux-i3c,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <aicBU28PHpR8_7-g@lizhi-Precision-Tower-5810> |
On Mon, Jun 08, 2026 at 10:57:59AM +0300, Adrian Hunter wrote: > Relocate i3c_master_do_daa_ext() and i3c_master_do_daa() so they appear > after i3c_master_add_i3c_dev_locked(). > > This ordering is required for upcoming changes where the DAA flow will > (indirectly) rely on i3c_master_add_i3c_dev_locked() functionality. > Reordering avoids forward dependency issues and keeps related code paths > logically arranged. > > No functional change. > > Signed-off-by: Adrian Hunter <[email protected]> > --- Reviewed-by: Frank Li <[email protected]> > > > Changes in V2: > > None > > > drivers/i3c/master.c | 128 +++++++++++++++++++++---------------------- > 1 file changed, 64 insertions(+), 64 deletions(-) > > diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c > index 57857a3351c7..5021d25b718a 100644 > --- a/drivers/i3c/master.c > +++ b/drivers/i3c/master.c > @@ -1870,70 +1870,6 @@ static void i3c_master_reg_work_fn(struct work_struct *work) > i3c_bus_normaluse_unlock(&master->bus); > } > > -/** > - * i3c_master_do_daa_ext() - Dynamic Address Assignment (extended version) > - * @master: controller > - * @rstdaa: whether to first perform Reset of Dynamic Addresses (RSTDAA) > - * > - * Perform Dynamic Address Assignment with optional support for System > - * Hibernation (@rstdaa is true). > - * > - * After System Hibernation, Dynamic Addresses can have been reassigned at boot > - * time to different values. A simple strategy is followed to handle that. > - * Perform a Reset of Dynamic Addresses (RSTDAA) followed by the normal DAA > - * procedure which has provision for reassigning addresses that differ from the > - * previously recorded addresses. > - * > - * Return: a 0 in case of success, an negative error code otherwise. > - */ > -int i3c_master_do_daa_ext(struct i3c_master_controller *master, bool rstdaa) > -{ > - int rstret = 0; > - int ret; > - > - ret = i3c_master_rpm_get(master); > - if (ret) > - return ret; > - > - i3c_bus_maintenance_lock(&master->bus); > - > - if (master->shutting_down) { > - ret = -ENODEV; > - } else { > - if (rstdaa) > - rstret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR); > - ret = master->ops->do_daa(master); > - } > - > - i3c_bus_maintenance_unlock(&master->bus); > - > - if (ret) > - goto out; > - > - queue_work(master->wq, &master->reg_work); > -out: > - i3c_master_rpm_put(master); > - > - return rstret ?: ret; > -} > -EXPORT_SYMBOL_GPL(i3c_master_do_daa_ext); > - > -/** > - * i3c_master_do_daa() - do a DAA (Dynamic Address Assignment) > - * @master: master doing the DAA > - * > - * This function instantiates I3C device objects and adds them to the > - * I3C device list. All device information is automatically retrieved using > - * standard CCC commands. > - * > - * Return: a 0 in case of success, an negative error code otherwise. > - */ > -int i3c_master_do_daa(struct i3c_master_controller *master) > -{ > - return i3c_master_do_daa_ext(master, false); > -} > -EXPORT_SYMBOL_GPL(i3c_master_do_daa); > - > /** > * i3c_master_dma_map_single() - Map buffer for single DMA transfer > * @dev: device object of a device doing DMA > @@ -2476,6 +2412,70 @@ void i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master, u8 addr > } > EXPORT_SYMBOL_GPL(i3c_master_add_i3c_dev_locked); > > +/** > + * i3c_master_do_daa_ext() - Dynamic Address Assignment (extended version) > + * @master: controller > + * @rstdaa: whether to first perform Reset of Dynamic Addresses (RSTDAA) > + * > + * Perform Dynamic Address Assignment with optional support for System > + * Hibernation (@rstdaa is true). > + * > + * After System Hibernation, Dynamic Addresses can have been reassigned at boot > + * time to different values. A simple strategy is followed to handle that. > + * Perform a Reset of Dynamic Addresses (RSTDAA) followed by the normal DAA > + * procedure which has provision for reassigning addresses that differ from the > + * previously recorded addresses. > + * > + * Return: a 0 in case of success, an negative error code otherwise. > + */ > +int i3c_master_do_daa_ext(struct i3c_master_controller *master, bool rstdaa) > +{ > + int rstret = 0; > + int ret; > + > + ret = i3c_master_rpm_get(master); > + if (ret) > + return ret; > + > + i3c_bus_maintenance_lock(&master->bus); > + > + if (master->shutting_down) { > + ret = -ENODEV; > + } else { > + if (rstdaa) > + rstret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR); > + ret = master->ops->do_daa(master); > + } > + > + i3c_bus_maintenance_unlock(&master->bus); > + > + if (ret) > + goto out; > + > + queue_work(master->wq, &master->reg_work); > +out: > + i3c_master_rpm_put(master); > + > + return rstret ?: ret; > +} > +EXPORT_SYMBOL_GPL(i3c_master_do_daa_ext); > + > +/** > + * i3c_master_do_daa() - do a DAA (Dynamic Address Assignment) > + * @master: master doing the DAA > + * > + * This function instantiates I3C device objects and adds them to the > + * I3C device list. All device information is automatically retrieved using > + * standard CCC commands. > + * > + * Return: a 0 in case of success, an negative error code otherwise. > + */ > +int i3c_master_do_daa(struct i3c_master_controller *master) > +{ > + return i3c_master_do_daa_ext(master, false); > +} > +EXPORT_SYMBOL_GPL(i3c_master_do_daa); > + > #define OF_I3C_REG1_IS_I2C_DEV BIT(31) > > static int > -- > 2.51.0 > -- linux-i3c mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-i3c