diff options
author | Cosmin Tanislav <demonsingur@gmail.com> | 2025-05-07 15:19:12 +0300 |
---|---|---|
committer | Wolfram Sang <wsa+renesas@sang-engineering.com> | 2025-05-22 11:07:04 +0200 |
commit | b09d8a9cce2664cdcef91f10eed9557321ce4a81 (patch) | |
tree | 2c7d485ebd4ddd8ad448c9d33a0072b5dc1e8056 | |
parent | 02426327e2286d16fdd86b4ba0b56af9939160f3 (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.c | 3 |
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; |