Message ID | 20250507121917.2364416-9-demonsingur@gmail.com |
---|---|
State | New |
Headers | show |
Series | i2c: atr: allow usage of nested ATRs | expand |
On Wed, 7 May 2025 15:19:14 +0300 Cosmin Tanislav <demonsingur@gmail.com> wrote: > Some I2C ATRs do not support dynamic remapping, only static mapping > of direct children. > > Mappings will only be added or removed as a result of devices being > added or removed from a child bus. > > The ATR pool will have to be big enough to accomodate all devices > expected to be added to the child buses. > > Add a new flag that prevents old mappings to be replaced or new mappings > to be created in the alias finding code paths. > > Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com> Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
On Wed, May 07, 2025 at 03:19:14PM +0300, Cosmin Tanislav wrote: > Some I2C ATRs do not support dynamic remapping, only static mapping > of direct children. > > Mappings will only be added or removed as a result of devices being > added or removed from a child bus. > > The ATR pool will have to be big enough to accomodate all devices CHECKPATCH WARNING: 'accomodate' may be misspelled - perhaps 'accommodate'? #12: The ATR pool will have to be big enough to accomodate all devices ^^^^^^^^^^ WARNING: 'accomodate' may be misspelled - perhaps 'accommodate'? #134: FILE: include/linux/i2c-atr.h:27: + * The ATR pool will have to be big enough to accomodate all ^^^^^^^^^^ total: 0 errors, 2 warnings, 0 checks, 105 lines checked I fixed it for you this time. Also, please make you sure you have a To: recipient in the mail header next time.
diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index 121cabbdb85d..76d70efdf190 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -341,12 +341,16 @@ i2c_atr_replace_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) static struct i2c_atr_alias_pair * i2c_atr_get_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) { + struct i2c_atr *atr = chan->atr; struct i2c_atr_alias_pair *c2a; c2a = i2c_atr_find_mapping_by_addr(chan, addr); if (c2a) return c2a; + if (atr->flags & I2C_ATR_F_STATIC) + return NULL; + c2a = i2c_atr_create_mapping_by_addr(chan, addr); if (c2a) return c2a; @@ -545,7 +549,7 @@ 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) + if (!c2a && !(atr->flags & I2C_ATR_F_STATIC)) c2a = i2c_atr_replace_mapping_by_addr(chan, addr); if (!c2a) { diff --git a/include/linux/i2c-atr.h b/include/linux/i2c-atr.h index 5082f4dd0e23..5aaab1598084 100644 --- a/include/linux/i2c-atr.h +++ b/include/linux/i2c-atr.h @@ -20,8 +20,15 @@ struct i2c_atr; /** * enum i2c_atr_flags - Flags for an I2C ATR driver + * + * @I2C_ATR_F_STATIC: ATR does not support dynamic mapping, use static mapping. + * Mappings will only be added or removed as a result of + * devices being added or removed from a child bus. + * The ATR pool will have to be big enough to accomodate all + * devices expected to be added to the child buses. */ enum i2c_atr_flags { + I2C_ATR_F_STATIC = BIT(0), }; /**
Some I2C ATRs do not support dynamic remapping, only static mapping of direct children. Mappings will only be added or removed as a result of devices being added or removed from a child bus. The ATR pool will have to be big enough to accomodate all devices expected to be added to the child buses. Add a new flag that prevents old mappings to be replaced or new mappings to be created in the alias finding code paths. Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com> --- drivers/i2c/i2c-atr.c | 6 +++++- include/linux/i2c-atr.h | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-)