From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
To: Romain Gantois <romain.gantois@bootlin.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Kory Maincent <kory.maincent@bootlin.com>,
linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org, linux-media@vger.kernel.org,
linux-gpio@vger.kernel.org,
Wolfram Sang <wsa+renesas@sang-engineering.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Andi Shyti <andi.shyti@kernel.org>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Derek Kiernan <derek.kiernan@amd.com>,
Dragan Cvetic <dragan.cvetic@amd.com>,
Arnd Bergmann <arnd@arndb.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
Bartosz Golaszewski <brgl@bgdev.pl>
Subject: Re: [PATCH v3 2/9] media: i2c: ds90ub960: Replace aliased clients list with bitmap
Date: Fri, 29 Nov 2024 15:46:38 +0200 [thread overview]
Message-ID: <92f06c2a-84be-4e89-adf5-9fa58d0806e6@ideasonboard.com> (raw)
In-Reply-To: <20241125-fpc202-v3-2-34e86bcb5b56@bootlin.com>
Hi,
On 25/11/2024 10:45, Romain Gantois wrote:
> 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 if a specific alias slot is already
> in use or not.
>
> Convert the aliased_clients list to a bitmap named "alias_use_mask". 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 | 23 +++++++++--------------
> 1 file changed, 9 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/media/i2c/ds90ub960.c b/drivers/media/i2c/ds90ub960.c
> index ffe5f25f8647624be005da33a6412da2493413b4..f86028894c78187257efc8fd70812387000796f7 100644
> --- a/drivers/media/i2c/ds90ub960.c
> +++ b/drivers/media/i2c/ds90ub960.c
> @@ -468,7 +468,7 @@ struct ub960_rxport {
> };
> } eq;
>
> - const struct i2c_client *aliased_clients[UB960_MAX_PORT_ALIASES];
> + DECLARE_BITMAP(alias_use_mask, UB960_MAX_PORT_ALIASES);
> };
>
> struct ub960_asd {
> @@ -1032,17 +1032,13 @@ 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])
> - break;
> - }
> -
> - if (reg_idx == ARRAY_SIZE(rxport->aliased_clients)) {
> + reg_idx = find_first_zero_bit(rxport->alias_use_mask, UB960_MAX_PORT_ALIASES);
> + 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;
> + set_bit(reg_idx, rxport->alias_use_mask);
>
> ub960_rxport_write(priv, chan_id, UB960_RR_SLAVE_ID(reg_idx),
> client->addr << 1);
> @@ -1063,18 +1059,15 @@ 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)
> - break;
> - }
> + reg_idx = find_first_zero_bit(rxport->alias_use_mask, UB960_MAX_PORT_ALIASES);
The old code went through the alias table to find the matching client,
so that it can be removed. The new code... Tries to find the first
unused entry in the mask, to... free it?
I'm not sure how this is supposed to work, or how the driver even could
manage with just a bit mask. The driver needs to remove the one that was
assigned in ub960_atr_attach_addr(), so it somehow has to find the same
entry using the address or the alias.
Tomi
next prev parent reply other threads:[~2024-11-29 13:46 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-25 8:45 [PATCH v3 0/9] misc: Support TI FPC202 dual-port controller Romain Gantois
2024-11-25 8:45 ` [PATCH v3 1/9] dt-bindings: misc: Describe TI FPC202 dual port controller Romain Gantois
2024-11-25 18:26 ` Conor Dooley
2024-11-26 8:05 ` Romain Gantois
2024-11-26 18:09 ` Conor Dooley
2024-11-27 8:20 ` Romain Gantois
2024-11-25 8:45 ` [PATCH v3 2/9] media: i2c: ds90ub960: Replace aliased clients list with bitmap Romain Gantois
2024-11-29 13:46 ` Tomi Valkeinen [this message]
2024-12-03 8:48 ` Romain Gantois
2024-11-25 8:45 ` [PATCH v3 3/9] media: i2c: ds90ub960: Protect alias_use_mask with a mutex Romain Gantois
2024-11-25 8:45 ` [PATCH v3 4/9] i2c: use client addresses directly in ATR interface Romain Gantois
2024-11-25 8:45 ` [PATCH v3 5/9] i2c: move ATR alias pool to a separate struct Romain Gantois
2024-11-25 8:45 ` [PATCH v3 6/9] i2c: rename field 'alias_list' of struct i2c_atr_chan to 'alias_pairs' Romain Gantois
2024-11-25 8:45 ` [PATCH v3 7/9] i2c: support per-channel ATR alias pools Romain Gantois
2024-11-25 8:45 ` [PATCH v3 8/9] i2c: Support dynamic address translation Romain Gantois
2024-11-29 9:54 ` Tomi Valkeinen
2024-12-03 8:59 ` Romain Gantois
2024-12-09 12:42 ` Romain Gantois
2024-12-10 15:21 ` Romain Gantois
2024-11-25 8:45 ` [PATCH v3 9/9] misc: add FPC202 dual port controller driver Romain Gantois
2024-11-29 12:01 ` [PATCH v3 0/9] misc: Support TI FPC202 dual-port controller Tomi Valkeinen
2024-12-03 8:42 ` Romain Gantois
2024-12-03 9:36 ` Luca Ceresoli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=92f06c2a-84be-4e89-adf5-9fa58d0806e6@ideasonboard.com \
--to=tomi.valkeinen@ideasonboard.com \
--cc=andi.shyti@kernel.org \
--cc=arnd@arndb.de \
--cc=brgl@bgdev.pl \
--cc=conor+dt@kernel.org \
--cc=derek.kiernan@amd.com \
--cc=devicetree@vger.kernel.org \
--cc=dragan.cvetic@amd.com \
--cc=gregkh@linuxfoundation.org \
--cc=kory.maincent@bootlin.com \
--cc=krzk+dt@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=luca.ceresoli@bootlin.com \
--cc=mchehab@kernel.org \
--cc=robh@kernel.org \
--cc=romain.gantois@bootlin.com \
--cc=thomas.petazzoni@bootlin.com \
--cc=wsa+renesas@sang-engineering.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox