summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosmin Tanislav <demonsingur@gmail.com>2025-05-07 15:19:12 +0300
committerWolfram Sang <wsa+renesas@sang-engineering.com>2025-05-22 11:07:04 +0200
commitb09d8a9cce2664cdcef91f10eed9557321ce4a81 (patch)
tree2c7d485ebd4ddd8ad448c9d33a0072b5dc1e8056
parent02426327e2286d16fdd86b4ba0b56af9939160f3 (diff)
i2c: atr: allow replacing mappings in attach_addr()
It is possible for aliases to be exhausted while we are still attaching children. Allow replacing mapping on attach by calling i2c_atr_replace_mapping_by_addr() if i2c_atr_create_mapping_by_addr() fails. Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com> Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
-rw-r--r--drivers/i2c/i2c-atr.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c
index 5353de8d3c2e..f3fd52588e42 100644
--- a/drivers/i2c/i2c-atr.c
+++ b/drivers/i2c/i2c-atr.c
@@ -543,6 +543,9 @@ static int i2c_atr_attach_addr(struct i2c_adapter *adapter,
mutex_lock(&chan->alias_pairs_lock);
c2a = i2c_atr_create_mapping_by_addr(chan, addr);
+ if (!c2a)
+ c2a = i2c_atr_replace_mapping_by_addr(chan, addr);
+
if (!c2a) {
dev_err(atr->dev, "failed to find a free alias\n");
ret = -EBUSY;