From: Lee Jones <lee@kernel.org>
To: Svyatoslav Ryhel <clamor95@gmail.com>
Cc: Pavel Machek <pavel@kernel.org>,
linux-kernel@vger.kernel.org, linux-leds@vger.kernel.org,
mfd@lists.linux.dev
Subject: Re: [PATCH v4] leds: Add driver for MAX8907 LED cell
Date: Wed, 4 Nov 2026 16:02:36 +0000 [thread overview]
Message-ID: <20261104160236.GC1650678@google.com> (raw)
In-Reply-To: <CAPVz0n05rXtBJzPZo4k9=ns52n10rAKpW83gbwpQwZQW3i-u6Q@mail.gmail.com>
On Wed, 04 Nov 2026, Svyatoslav Ryhel wrote:
> ср, 4 лист. 2026 р. о 17:16 Lee Jones <lee@kernel.org> пише:
> >
> > --- checkpatch.pl (1 issue) ---
> > Line 38: WARNING: please write a help paragraph that fully describes the config symbol with at least 4 lines
> > ----------------------------------
> >
> > On Tue, 27 Oct 2026, Svyatoslav Ryhel wrote:
> >
> > > Add a small driver to control the LED cell provided by the MAX8907 PMIC.
> > > The LED does not require any specific configuration and is folded into the
> > > PMIC's node.
> > >
> > > Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> > > ---
> > > Changes in v2:
> > > - rebased so patch is now applicable to linux/next
> > >
> > > Changes in v3:
> > > - added check if led is off for get callback
> > > - added dedicated MAX8907_REG_WLED_MODE_ON mask
> > > - switched to devm_led_classdev_register_ext
> > >
> > > Changes in v4:
> > > - platform_set_drvdata dropped
> > > - init_data.devicename dropped
> > > - added MODULE_ALIAS
> > > ---
> > > drivers/leds/Kconfig | 7 +++
> > > drivers/leds/Makefile | 1 +
> > > drivers/leds/leds-max8907.c | 90 +++++++++++++++++++++++++++++++++++++
> > > drivers/mfd/max8907.c | 1 +
> > > include/linux/mfd/max8907.h | 2 +-
> > > 5 files changed, 100 insertions(+), 1 deletion(-)
> > > create mode 100644 drivers/leds/leds-max8907.c
> > >
> > > diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
> > > index 788e689fe875c..3796c562919fe 100644
> > > --- a/drivers/leds/Kconfig
> > > +++ b/drivers/leds/Kconfig
> > > @@ -813,6 +813,13 @@ config LEDS_MAX77705
> > > help
> > > LED driver for MAX77705 PMIC from Maxim Integrated.
> > >
> > > +config LEDS_MAX8907
> > > + tristate "LED support for MAX8907 PMIC"
> > > + depends on LEDS_CLASS && MFD_MAX8907
> > > + help
> > > + This option enables support for on-chip LED drivers on
> > > + MAXIM MAX8907 PMIC.
> >
> > As requested on v3, please expand this help text to at least 4 lines to satisfy
> > 'checkpatch.pl'.
> >
> > > +
> > > config LEDS_MAX8997
> > > tristate "LED support for MAX8997 PMIC"
> > > depends on LEDS_CLASS && MFD_MAX8997
> > > diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
> > > index 3da746279bb81..24efda3fbaa44 100644
> > > --- a/drivers/leds/Makefile
> > > +++ b/drivers/leds/Makefile
> > > @@ -67,6 +67,7 @@ obj-$(CONFIG_LEDS_LTC3220) += leds-ltc3220.o
> > > obj-$(CONFIG_LEDS_MAX5970) += leds-max5970.o
> > > obj-$(CONFIG_LEDS_MAX77650) += leds-max77650.o
> > > obj-$(CONFIG_LEDS_MAX77705) += leds-max77705.o
> > > +obj-$(CONFIG_LEDS_MAX8907) += leds-max8907.o
> > > obj-$(CONFIG_LEDS_MAX8997) += leds-max8997.o
> > > obj-$(CONFIG_LEDS_MC13783) += leds-mc13783.o
> > > obj-$(CONFIG_LEDS_MENF21BMC) += leds-menf21bmc.o
> > > diff --git a/drivers/leds/leds-max8907.c b/drivers/leds/leds-max8907.c
> > > new file mode 100644
> > > index 0000000000000..a5c445f75d1b1
> > > --- /dev/null
> > > +++ b/drivers/leds/leds-max8907.c
> > > @@ -0,0 +1,90 @@
> > > +// SPDX-License-Identifier: GPL-2.0-only
> > > +
> > > +#include <linux/err.h>
> > > +#include <linux/leds.h>
> > > +#include <linux/mfd/max8907.h>
> > > +#include <linux/module.h>
> > > +#include <linux/platform_device.h>
> > > +#include <linux/property.h>
> > > +#include <linux/regmap.h>
> > > +
> > > +#define MAX8907_REG_WLED_MODE_ON BIT(0)
> > > +
> > > +struct max8907_led_data {
> > > + struct max8907 *max8907;
> >
> > As asked on v3, what is 'max8907' used for?
> >
> > > + struct regmap *regmap;
> > > + struct led_classdev cdev;
> > > +};
> > > +
> > > +static enum led_brightness max8907_led_get_brightness(struct led_classdev *cdev)
> > > +{
> > > + struct max8907_led_data *ddata = container_of(cdev, struct max8907_led_data, cdev);
> > > + unsigned int brightness_lvl;
> > > + int ret;
> > > +
> > > + ret = regmap_read(ddata->regmap, MAX8907_REG_WLED_MODE_CNTL, &brightness_lvl);
> > > + if (ret || !(brightness_lvl & MAX8907_REG_WLED_MODE_ON))
> > > + return LED_OFF;
> > > +
> > > + ret = regmap_read(ddata->regmap, MAX8907_REG_WLED_CNTL, &brightness_lvl);
> > > + if (ret)
> > > + return LED_OFF;
> > > +
> > > + return brightness_lvl;
> > > +}
> > > +
> > > +static int max8907_led_set_brightness(struct led_classdev *cdev,
> > > + enum led_brightness brightness)
> > > +{
> > > + struct max8907_led_data *ddata = container_of(cdev, struct max8907_led_data, cdev);
> > > + int brightness_lvl, ret;
> > > +
> > > + brightness_lvl = clamp(brightness, LED_OFF, LED_FULL);
> > > +
> > > + if (brightness_lvl) {
> > > + ret = regmap_write(ddata->regmap, MAX8907_REG_WLED_CNTL, brightness_lvl);
> > > + if (ret)
> > > + return ret;
> > > + }
> > > +
> > > + return regmap_update_bits(ddata->regmap, MAX8907_REG_WLED_MODE_CNTL,
> > > + MAX8907_REG_WLED_MODE_ON,
> > > + brightness_lvl ? MAX8907_REG_WLED_MODE_ON : 0);
> > > +}
> > > +
> > > +static int max8907_led_probe(struct platform_device *pdev)
> > > +{
> > > + struct device *dev = &pdev->dev;
> > > + struct max8907 *max8907 = dev_get_drvdata(dev->parent);
> > > + struct led_init_data init_data = { };
> > > + struct max8907_led_data *ddata;
> > > +
> > > + ddata = devm_kzalloc(dev, sizeof(*ddata), GFP_KERNEL);
> > > + if (!ddata)
> > > + return -ENOMEM;
> > > +
> > > + ddata->max8907 = max8907;
> > > + ddata->regmap = max8907->regmap_gen;
> > > +
> > > + init_data.fwnode = dev_fwnode(dev->parent);
> >
> > This will evaluate to 'pmic'. The sysfs attribute will be incorrect.
> >
> > Since there is no child node, why not set 'ddata->cdev.name' directly
> > and use 'devm_led_classdev_register()'?
> >
> > > +
> > > + ddata->cdev.brightness = LED_OFF;
> > > + ddata->cdev.flags = LED_CORE_SUSPENDRESUME;
> > > + ddata->cdev.max_brightness = LED_FULL;
> > > +
> > > + ddata->cdev.brightness_get = max8907_led_get_brightness;
> > > + ddata->cdev.brightness_set_blocking = max8907_led_set_brightness;
> > > +
> > > + return devm_led_classdev_register_ext(dev, &ddata->cdev, &init_data);
> > > +}
> > > +
> > > +static struct platform_driver max8907_led_driver = {
> > > + .driver.name = "max8907-leds",
> >
> > Cute. But please expand.
> >
> > > + .probe = max8907_led_probe,
> > > +};
> > > +module_platform_driver(max8907_led_driver);
> > > +
> > > +MODULE_ALIAS("platform:max8907-leds");
> > > +MODULE_AUTHOR("Svyatolsav Ryhel <clamor95@gmail.com>");
> >
> > Your name is misspelt here.
> >
> > > +MODULE_DESCRIPTION("MAX8907 LED driver");
> > > +MODULE_LICENSE("GPL");
> > > diff --git a/drivers/mfd/max8907.c b/drivers/mfd/max8907.c
> > > index e282dd82ece69..826d7768fd8d0 100644
> > > --- a/drivers/mfd/max8907.c
> > > +++ b/drivers/mfd/max8907.c
> > > @@ -20,6 +20,7 @@
> > > #include <linux/slab.h>
> > >
> > > static const struct mfd_cell max8907_cells[] = {
> > > + { .name = "max8907-leds", },
> >
> > Separate patch.
> >
>
> All valid, but way adding led requires a separate patch? Just to know.
Build-deps only.
> The max8907.h change can be left with leds change? It changes reg name
> used by led cell.
Yes. That's a build-dep.
> > > { .name = "max8907-regulator", },
> > > { .name = "max8907-rtc", },
> > > };
> > > diff --git a/include/linux/mfd/max8907.h b/include/linux/mfd/max8907.h
> > > index e222250f0cc1e..35b2ede54f856 100644
> > > --- a/include/linux/mfd/max8907.h
> > > +++ b/include/linux/mfd/max8907.h
> > > @@ -112,7 +112,7 @@
> > > #define MAX8907_REG_CHG_IRQ2_MASK 0x81
> > > #define MAX8907_REG_CHG_STAT 0x82
> > > #define MAX8907_REG_WLED_MODE_CNTL 0x84
> > > -#define MAX8907_REG_ILED_CNTL 0x84
> > > +#define MAX8907_REG_WLED_CNTL 0x85
> > > #define MAX8907_REG_II1RR 0x8E
> > > #define MAX8907_REG_II2RR 0x8F
> > > #define MAX8907_REG_LDOCTL20 0x9C
> > > --
> > > 2.53.0
> > >
> > >
> >
> > --
> > Lee Jones
--
Lee Jones
next prev parent reply other threads:[~2026-11-04 16:02 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-27 11:50 [PATCH v4] leds: Add driver for MAX8907 LED cell Svyatoslav Ryhel
2026-10-27 11:57 ` sashiko-bot
2026-11-04 15:16 ` Lee Jones
2026-11-04 15:38 ` Svyatoslav Ryhel
2026-11-04 16:02 ` Lee Jones [this message]
2026-11-04 17:11 ` Svyatoslav Ryhel
2026-11-05 14:08 ` Lee Jones
2026-11-05 14:28 ` Svyatoslav Ryhel
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=20261104160236.GC1650678@google.com \
--to=lee@kernel.org \
--cc=clamor95@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=mfd@lists.linux.dev \
--cc=pavel@kernel.org \
/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.