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
next prev parent reply other threads:[~2026-11-14 23:20 UTC|newest]
Thread overview: 9+ 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:55 ` [PATCH v7 2/4] leds: aw2013: Use dev_err_probe Paul Sajna
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]
2026-11-14 23:26 ` Paul Sajna
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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox