mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
i3c: master: Move DAA API functions after i3c_master_add_i3c_dev_locked()
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 <adrian.hunter@intel.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260612080107.11606-7-adrian.hunter@intel.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
parent
689d0bd8f4
commit
94daedb41d
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user