Message ID | 20241230-fpc202-v4-2-761b297dc697@bootlin.com |
---|---|
State | New |
Headers | show |
Series | misc: Support TI FPC202 dual-port controller | expand |
Hi Tomi, On lundi 6 janvier 2025 10:34:10 heure normale d’Europe centrale Tomi Valkeinen wrote: > Hi, > > On 30/12/2024 15:22, Romain Gantois wrote: ... > > @@ -1031,17 +1031,17 @@ static int ub960_atr_attach_client(struct i2c_atr > > *atr, u32 chan_id,> > > struct device *dev = &priv->client->dev; > > unsigned int reg_idx; > > > > - for (reg_idx = 0; reg_idx < ARRAY_SIZE(rxport->aliased_clients); > > reg_idx++) { - if (!rxport->aliased_clients[reg_idx]) > > + for (reg_idx = 0; reg_idx < UB960_MAX_PORT_ALIASES; reg_idx++) { > > Any reason to drop the use of ARRAY_SIZE()? Usually when dealing with > fixed size arrays, it's nicer to use ARRAY_SIZE(). No reason in particular, I just thought it was more explicit to use ARRAY_SIZE but I'll keep the UB960_MAX_PORT_ALIASES since you think it's nicer. Thanks,
Hi, On 08/01/2025 15:27, Romain Gantois wrote: > Hi Tomi, > > On lundi 6 janvier 2025 10:34:10 heure normale d’Europe centrale Tomi > Valkeinen wrote: >> Hi, >> >> On 30/12/2024 15:22, Romain Gantois wrote: > ... >>> @@ -1031,17 +1031,17 @@ static int ub960_atr_attach_client(struct i2c_atr >>> *atr, u32 chan_id,> >>> struct device *dev = &priv->client->dev; >>> unsigned int reg_idx; >>> >>> - for (reg_idx = 0; reg_idx < ARRAY_SIZE(rxport->aliased_clients); >>> reg_idx++) { - if (!rxport->aliased_clients[reg_idx]) >>> + for (reg_idx = 0; reg_idx < UB960_MAX_PORT_ALIASES; reg_idx++) { >> >> Any reason to drop the use of ARRAY_SIZE()? Usually when dealing with >> fixed size arrays, it's nicer to use ARRAY_SIZE(). > > No reason in particular, I just thought it was more explicit to use ARRAY_SIZE > but I'll keep the UB960_MAX_PORT_ALIASES since you think it's nicer. You got that the wrong way. The driver uses ARRAY_SIZE, but you change it to UB960_MAX_PORT_ALIASES... Tomi
diff --git a/drivers/media/i2c/ds90ub960.c b/drivers/media/i2c/ds90ub960.c index 33f362a008757578e4c96e6ea7bed2e590776d8d..7534ddf2079fef466d3a114f0be98599427639fa 100644 --- a/drivers/media/i2c/ds90ub960.c +++ b/drivers/media/i2c/ds90ub960.c @@ -467,7 +467,7 @@ struct ub960_rxport { }; } eq; - const struct i2c_client *aliased_clients[UB960_MAX_PORT_ALIASES]; + u16 aliased_addrs[UB960_MAX_PORT_ALIASES]; }; struct ub960_asd { @@ -1031,17 +1031,17 @@ static int ub960_atr_attach_client(struct i2c_atr *atr, u32 chan_id, struct device *dev = &priv->client->dev; unsigned int reg_idx; - for (reg_idx = 0; reg_idx < ARRAY_SIZE(rxport->aliased_clients); reg_idx++) { - if (!rxport->aliased_clients[reg_idx]) + for (reg_idx = 0; reg_idx < UB960_MAX_PORT_ALIASES; reg_idx++) { + if (!rxport->aliased_addrs[reg_idx]) break; } - if (reg_idx == ARRAY_SIZE(rxport->aliased_clients)) { + if (reg_idx == UB960_MAX_PORT_ALIASES) { dev_err(dev, "rx%u: alias pool exhausted\n", rxport->nport); return -EADDRNOTAVAIL; } - rxport->aliased_clients[reg_idx] = client; + rxport->aliased_addrs[reg_idx] = client->addr; ub960_rxport_write(priv, chan_id, UB960_RR_SLAVE_ID(reg_idx), client->addr << 1); @@ -1062,18 +1062,18 @@ static void ub960_atr_detach_client(struct i2c_atr *atr, u32 chan_id, struct device *dev = &priv->client->dev; unsigned int reg_idx; - for (reg_idx = 0; reg_idx < ARRAY_SIZE(rxport->aliased_clients); reg_idx++) { - if (rxport->aliased_clients[reg_idx] == client) + for (reg_idx = 0; reg_idx < UB960_MAX_PORT_ALIASES; reg_idx++) { + if (rxport->aliased_addrs[reg_idx] == client->addr) break; } - if (reg_idx == ARRAY_SIZE(rxport->aliased_clients)) { + if (reg_idx == UB960_MAX_PORT_ALIASES) { dev_err(dev, "rx%u: client 0x%02x is not mapped!\n", rxport->nport, client->addr); return; } - rxport->aliased_clients[reg_idx] = NULL; + rxport->aliased_addrs[reg_idx] = 0; ub960_rxport_write(priv, chan_id, UB960_RR_SLAVE_ALIAS(reg_idx), 0);
The ds90ub960 driver currently uses a list of i2c_client structs to keep track of used I2C address translator (ATR) alias slots for each RX port. Keeping these i2c_client structs in the alias slot list isn't actually needed, the driver only needs to know the client address for each slot. Convert the aliased_clients list to a list of aliased client addresses. This will allow removing the "client" parameter from the i2c-atr callbacks in a future patch. Signed-off-by: Romain Gantois <romain.gantois@bootlin.com> --- drivers/media/i2c/ds90ub960.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)