mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
i3c: dw: Preserve DAT entry bits when restoring addresses
Update dw_i3c_master_restore_addrs() to preserve existing bits in each Device Address Table (DAT) entry when restoring addresses. This prevents overwriting configuration bits during PM runtime resumes. Signed-off-by: Adrian Ng Ho Yin <adrianhoyin.ng@altera.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/46112c0da44110f46709cb0e7a4595e312b95c10.1765529948.git.adrianhoyin.ng@altera.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
parent
4cd9d2bf0b
commit
de28e002df
|
|
@ -1718,11 +1718,16 @@ static void dw_i3c_master_restore_addrs(struct dw_i3c_master *master)
|
|||
if (master->free_pos & BIT(pos))
|
||||
continue;
|
||||
|
||||
if (master->devs[pos].is_i2c_addr)
|
||||
reg_val = DEV_ADDR_TABLE_LEGACY_I2C_DEV |
|
||||
reg_val = readl(master->regs + DEV_ADDR_TABLE_LOC(master->datstartaddr, pos));
|
||||
|
||||
if (master->devs[pos].is_i2c_addr) {
|
||||
reg_val &= ~DEV_ADDR_TABLE_STATIC_MASK;
|
||||
reg_val |= DEV_ADDR_TABLE_LEGACY_I2C_DEV |
|
||||
DEV_ADDR_TABLE_STATIC_ADDR(master->devs[pos].addr);
|
||||
else
|
||||
reg_val = DEV_ADDR_TABLE_DYNAMIC_ADDR(master->devs[pos].addr);
|
||||
} else {
|
||||
reg_val &= ~DEV_ADDR_TABLE_DYNAMIC_MASK;
|
||||
reg_val |= DEV_ADDR_TABLE_DYNAMIC_ADDR(master->devs[pos].addr);
|
||||
}
|
||||
|
||||
writel(reg_val, master->regs + DEV_ADDR_TABLE_LOC(master->datstartaddr, pos));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user