From: sashiko-bot@kernel.org
To: "Paul Sajna" <sajattack@postmarketos.org>
Cc: linux-leds@vger.kernel.org, devicetree@vger.kernel.org,
robh@kernel.org, conor+dt@kernel.org, lee@kernel.org
Subject: Re: [PATCH v7 4/4] leds: aw2013: Add AW2027 support
Date: Sat, 14 Nov 2026 23:20:30 +0000 [thread overview]
Message-ID: <sashiko-outbox-215101@kernel.org> (raw)
In-Reply-To: <20261114-aw2013-aw20xx-rename-v7-4-ea5a3113a479@postmarketos.org>
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Low] leds: aw2013: duplicated per-LED imax update in
aw2013_chip_init()
--
commit fe70881eccdb317dc7ce37e26b9965b979fe6113
Author: Paul Sajna <sajattack@postmarketos.org>
leds: aw2013: Add AW2027 support
This commit adds support for the Awinic AW2027 3-channel LED controller to the
aw2013 driver, introducing chip-specific definitions and handling for its
global and per-channel current limits.
> diff --git a/drivers/leds/leds-aw2013.c b/drivers/leds/leds-aw2013.c
> index 7fe7e9dae9031..f62f977e2bfef 100644
> --- a/drivers/leds/leds-aw2013.c
> +++ b/drivers/leds/leds-aw2013.c
[ ... ]
> @@ -60,16 +72,88 @@ struct aw2013_led {
[ ... ]
> +static int aw2027_set_local_imax(struct aw2013 *chip, struct aw2013_led *led, u32 imax)
> +{
> + return regmap_update_bits(chip->regmap,
> + AW2013_LCFG(led->num),
> + AW2027_LOCAL_IMAX_MASK,
> + imax);
> +}
> +
> static int aw2013_chip_init(struct aw2013 *chip)
> {
> int ret;
> @@ -81,17 +165,47 @@ static int aw2013_chip_init(struct aw2013 *chip)
> return ret;
> }
>
> - for (int i = 0; i < chip->num_leds; i++) {
> - ret = regmap_update_bits(chip->regmap,
> - AW2013_LCFG(chip->leds[i].num),
> - AW2013_LCFG_IMAX_MASK,
> - chip->leds[i].imax);
> + if (chip->cdef->gcr2_imax) {
> + /*
> + * AW2027 supports 4-step global imax, and also a 16-step control for limiting
> + * individual current per LED. This doesn't map to the single value the
> + * devicetree provides super well, so set global imax to maximum, and
> + * local imax to whatever gets us closest to the value in the devicetree.
> + */
> + ret = aw2027_set_global_imax(chip);
> if (ret) {
> dev_err(&chip->client->dev,
> - "Failed to set maximum current for led %d: %d\n",
> - chip->leds[i].num, ret);
> + "Failed to set maximum global current: %d\n",
> + ret);
> return ret;
> }
> + /*
> + * This still needs to be here despite also being in aw2013_probe_dt,
> + * for cases where chip is disabled and re-enabled.
> + */
> + for (int i = 0; i < chip->num_leds; i++) {
> + ret = aw2027_set_local_imax(chip, &chip->leds[i], chip->leds[i].imax);
> + if (ret) {
> + dev_err(&chip->client->dev,
> + "Failed to set maximum current for led %d: %d\n",
> + chip->leds[i].num, ret);
> + return ret;
> + }
> + }
> + } else {
> + /* AW2013 only supports 4-step individual current per LED */
> + for (int i = 0; i < chip->num_leds; i++) {
> + ret = regmap_update_bits(chip->regmap,
> + AW2013_LCFG(chip->leds[i].num),
> + AW2013_IMAX_MASK,
> + chip->leds[i].imax);
> + if (ret) {
> + dev_err(&chip->client->dev,
> + "Failed to set maximum current for led %d: %d\n",
> + chip->leds[i].num, ret);
> + return ret;
> + }
> + }
> }
[ ... ]
> @@ -303,14 +417,30 @@ static int aw2013_probe_dt(struct aw2013 *chip)
>
> mutex_lock(&chip->mutex);
> chip->num_leds = ++i;
> - if (chip->enabled) {
> + /*
> + * needs to be here and in aw2013_chip_init because chip->num_leds increments
> + * just above here while we're parsing the devicetree, and chip->enabled
> + * ensures chip_init runs as little as possible.
> + * Requires this function to have regulators enabled.
> + */
> + if (chip->cdef->gcr2_imax) {
> + ret = aw2027_set_local_imax(chip, led, led->imax);
> + if (ret) {
> + mutex_unlock(&chip->mutex);
> + return dev_err_probe(&chip->client->dev, ret,
> + "Failed to set maximum current for led %d\n",
> + led->num);
> + }
> + } else {
> ret = regmap_update_bits(chip->regmap,
> AW2013_LCFG(led->num),
> - AW2013_LCFG_IMAX_MASK,
> + AW2013_IMAX_MASK,
> led->imax);
> if (ret) {
> mutex_unlock(&chip->mutex);
> - return ret;
> + return dev_err_probe(&chip->client->dev, ret,
> + "Failed to set maximum current for led %d\n",
> + led->num);
> }
> }
[Severity: Low]
As reported by Lee Jones on v3 [1], why duplicate the per-LED current update
and error handling across the gcr2_imax branches in both aw2013_chip_init()
and aw2013_probe_dt()?
Both AW2027 and AW2013 update AW2013_LCFG(led->num) with led->imax via
regmap_update_bits() and differ only in the bitmask (AW2027_LOCAL_IMAX_MASK vs
AW2013_IMAX_MASK, i.e. chip->cdef->current_levels - 1), so a single common
loop in aw2013_chip_init() and a single update call in aw2013_probe_dt() can
handle both chips.
[1] https://lore.kernel.org/r/179198402838.839288.17911568760182808689@kernel.org
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261114-aw2013-aw20xx-rename-v7-0-ea5a3113a479@postmarketos.org?part=4
prev parent reply other threads:[~2026-11-14 23:20 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-14 22:55 [PATCH v7 0/4] leds: aw2013: Add AW2027 support Paul Sajna
2026-11-14 22:55 ` [PATCH v7 1/4] dt-bindings: leds: aw2013: Add awinic,aw2027 compatible Paul Sajna
2026-11-14 22:58 ` sashiko-bot
2026-11-14 22:55 ` [PATCH v7 2/4] leds: aw2013: Use dev_err_probe Paul Sajna
2026-11-14 22:59 ` sashiko-bot
2026-11-14 22:55 ` [PATCH v7 3/4] drivers: leds: aw2013: Leverage C99 for-loops Paul Sajna
2026-11-14 23:00 ` sashiko-bot
2026-11-14 23:13 ` Paul Sajna
2026-11-14 22:55 ` [PATCH v7 4/4] leds: aw2013: Add AW2027 support Paul Sajna
2026-11-14 23:20 ` sashiko-bot [this message]
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=sashiko-outbox-215101@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=lee@kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sajattack@postmarketos.org \
--cc=sashiko-reviews@lists.linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.