From: Lee Jones <lee@kernel.org>
To: Svyatoslav Ryhel <clamor95@gmail.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Pavel Machek <pavel@kernel.org>,
David Lechner <dlechner@baylibre.com>,
Tony Lindgren <tony@atomide.com>,
linux-input@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-leds@vger.kernel.org
Subject: Re: [PATCH v4 5/6 RESEND] mfd: motorola-cpcap: diverge configuration per-board
Date: Wed, 13 May 2026 15:05:50 +0100 [thread overview]
Message-ID: <20260513140550.GD305027@google.com> (raw)
In-Reply-To: <CAPVz0n1Ubvj9MHHMcM2BpxAcTCCheMihr3aJUqcDVoi_V0OQ5g@mail.gmail.com>
On Thu, 07 May 2026, Svyatoslav Ryhel wrote:
> чт, 7 трав. 2026 р. о 17:05 Lee Jones <lee@kernel.org> пише:
> >
> > On Tue, 28 Apr 2026, Svyatoslav Ryhel wrote:
> >
> > > MFD have rigid subdevice structure which does not allow flexible dynamic
> > > subdevice linking. Address this by diverging CPCAP subdevice composition
> > > to take into account board specific configuration.
> > >
> > > Create a common default subdevice composition, rename existing subdevice
> > > composition into cpcap_mapphone_mfd_devices since it targets mainly
> > > Mapphone board.
> > >
> > > Removed st,6556002 as it is no longer applicable to all cases and
> > > duplicates motorola,cpcap, which is used as the default composition.
> > >
> > > Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> > > ---
> >
> > Changelog?
> >
>
> Changelog is in the cover.
>
> > > drivers/mfd/motorola-cpcap.c | 101 ++++++++++++++++++++++++++++-------
> > > 1 file changed, 83 insertions(+), 18 deletions(-)
> > >
> > > diff --git a/drivers/mfd/motorola-cpcap.c b/drivers/mfd/motorola-cpcap.c
> > > index d8243b956f87..516d1e33affa 100644
> > > --- a/drivers/mfd/motorola-cpcap.c
> > > +++ b/drivers/mfd/motorola-cpcap.c
> > > @@ -12,6 +12,7 @@
> > > #include <linux/kernel.h>
> > > #include <linux/module.h>
> > > #include <linux/mod_devicetable.h>
> > > +#include <linux/property.h>
> > > #include <linux/regmap.h>
> > > #include <linux/sysfs.h>
> > >
> > > @@ -24,10 +25,16 @@
> > > #define CPCAP_REGISTER_SIZE 4
> > > #define CPCAP_REGISTER_BITS 16
> > >
> > > +struct cpcap_chip_data {
> > > + const struct mfd_cell *mfd_devices;
> > > + unsigned int num_devices;
> > > +};
> >
> > This is a red flag.
> >
> > > struct cpcap_ddata {
> > > struct spi_device *spi;
> > > struct regmap_irq *irqs;
> > > struct regmap_irq_chip_data *irqdata[CPCAP_NR_IRQ_CHIPS];
> > > + const struct cpcap_chip_data *cdata;
> > > const struct regmap_config *regmap_conf;
> > > struct regmap *regmap;
> > > };
> > > @@ -195,20 +202,6 @@ static int cpcap_init_irq(struct cpcap_ddata *cpcap)
> > > return 0;
> > > }
> > >
> > > -static const struct of_device_id cpcap_of_match[] = {
> > > - { .compatible = "motorola,cpcap", },
> > > - { .compatible = "st,6556002", },
> > > - {},
> > > -};
> > > -MODULE_DEVICE_TABLE(of, cpcap_of_match);
> > > -
> > > -static const struct spi_device_id cpcap_spi_ids[] = {
> > > - { .name = "cpcap", },
> > > - { .name = "6556002", },
> > > - {},
> > > -};
> > > -MODULE_DEVICE_TABLE(spi, cpcap_spi_ids);
> > > -
> > > static const struct regmap_config cpcap_regmap_config = {
> > > .reg_bits = 16,
> > > .reg_stride = 4,
> > > @@ -241,7 +234,56 @@ static int cpcap_resume(struct device *dev)
> > >
> > > static DEFINE_SIMPLE_DEV_PM_OPS(cpcap_pm, cpcap_suspend, cpcap_resume);
> > >
> > > -static const struct mfd_cell cpcap_mfd_devices[] = {
> > > +static const struct mfd_cell cpcap_default_mfd_devices[] = {
> > > + {
> > > + .name = "cpcap_adc",
> > > + .of_compatible = "motorola,cpcap-adc",
> > > + }, {
> > > + .name = "cpcap_battery",
> > > + .of_compatible = "motorola,cpcap-battery",
> > > + }, {
> > > + .name = "cpcap-regulator",
> > > + .of_compatible = "motorola,cpcap-regulator",
> > > + }, {
> > > + .name = "cpcap-rtc",
> > > + .of_compatible = "motorola,cpcap-rtc",
> > > + }, {
> > > + .name = "cpcap-pwrbutton",
> > > + .of_compatible = "motorola,cpcap-pwrbutton",
> > > + }, {
> > > + .name = "cpcap-usb-phy",
> > > + .of_compatible = "motorola,cpcap-usb-phy",
> > > + }, {
> > > + .name = "cpcap-led",
> > > + .id = 0,
> > > + .of_compatible = "motorola,cpcap-led-red",
> > > + }, {
> > > + .name = "cpcap-led",
> > > + .id = 1,
> > > + .of_compatible = "motorola,cpcap-led-green",
> > > + }, {
> > > + .name = "cpcap-led",
> > > + .id = 2,
> > > + .of_compatible = "motorola,cpcap-led-blue",
> > > + }, {
> > > + .name = "cpcap-led",
> > > + .id = 3,
> > > + .of_compatible = "motorola,cpcap-led-adl",
> > > + }, {
> > > + .name = "cpcap-led",
> > > + .id = 4,
> > > + .of_compatible = "motorola,cpcap-led-cp",
> > > + }, {
> > > + .name = "cpcap-codec",
> > > + },
> > > +};
> > > +
> > > +static const struct cpcap_chip_data cpcap_default_data = {
> > > + .mfd_devices = cpcap_default_mfd_devices,
> > > + .num_devices = ARRAY_SIZE(cpcap_default_mfd_devices),
> > > +};
> > > +
> > > +static const struct mfd_cell cpcap_mapphone_mfd_devices[] = {
> > > {
> > > .name = "cpcap_adc",
> > > .of_compatible = "motorola,mapphone-cpcap-adc",
> > > @@ -285,7 +327,12 @@ static const struct mfd_cell cpcap_mfd_devices[] = {
> > > .of_compatible = "motorola,cpcap-led-cp",
> > > }, {
> > > .name = "cpcap-codec",
> > > - }
> > > + },
> > > +};
> > > +
> > > +static const struct cpcap_chip_data cpcap_mapphone_data = {
> > > + .mfd_devices = cpcap_mapphone_mfd_devices,
> > > + .num_devices = ARRAY_SIZE(cpcap_mapphone_mfd_devices),
> > > };
> > >
> > > static int cpcap_probe(struct spi_device *spi)
> > > @@ -297,9 +344,17 @@ static int cpcap_probe(struct spi_device *spi)
> > > if (!cpcap)
> > > return -ENOMEM;
> > >
> > > + cpcap->cdata = device_get_match_data(&spi->dev);
> > > + if (!cpcap->cdata)
> > > + return -ENODEV;
> > > +
> > > cpcap->spi = spi;
> > > spi_set_drvdata(spi, cpcap);
> > >
> > > @@ -331,16 +382,24 @@ static int cpcap_probe(struct spi_device *spi)
> > > spi->dev.coherent_dma_mask = 0;
> > > spi->dev.dma_mask = &spi->dev.coherent_dma_mask;
> > >
> > > - return devm_mfd_add_devices(&spi->dev, 0, cpcap_mfd_devices,
> > > - ARRAY_SIZE(cpcap_mfd_devices), NULL, 0, NULL);
> > > + return devm_mfd_add_devices(&spi->dev, 0, cpcap->cdata->mfd_devices,
> > > + cpcap->cdata->num_devices, NULL, 0, NULL);
> > > }
> > >
> > > +static const struct of_device_id cpcap_of_match[] = {
> > > + { .compatible = "motorola,cpcap", .data = &cpcap_default_data },
> > > + { .compatible = "motorola,mapphone-cpcap", .data = &cpcap_mapphone_data },
> >
> > We don't allow data from one device registration API (MFD) to be passed
> > through another (OF) because it tends to lead to all sorts of "creative
> > solutions". Pass a value instead and match on that in a switch()
> > statement like all of the other MFD drivers do.
> >
>
> You don't allow this. I have not seen this enforced anywhere in the
> kernel except the mfd subsystem. Fine, does not matter, if this makes
> you happy I will adjust.
Where else would this rule be applicable? I can't think of anywhere.
--
Lee Jones
next prev parent reply other threads:[~2026-05-13 14:05 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-28 15:36 [PATCH v4 0/6 RESEND] mfd: cpcap: convert documentation to schema and add Mot board support Svyatoslav Ryhel
2026-04-28 15:36 ` [PATCH v4 1/6 RESEND] dt-bindings: leds: leds-cpcap: convert to DT schema Svyatoslav Ryhel
2026-04-28 17:15 ` Rob Herring (Arm)
2026-04-28 15:36 ` [PATCH v4 2/6 RESEND] dt-bindings: input: cpcap-pwrbutton: " Svyatoslav Ryhel
2026-04-28 17:15 ` Rob Herring (Arm)
2026-04-28 15:36 ` [PATCH v4 3/6 RESEND] dt-bindings: mfd: motorola-cpcap: " Svyatoslav Ryhel
2026-04-28 15:36 ` [PATCH v4 4/6 RESEND] dt-bindings: mfd: motorola-cpcap: document Mapphone and Mot CPCAP Svyatoslav Ryhel
2026-04-28 15:36 ` [PATCH v4 5/6 RESEND] mfd: motorola-cpcap: diverge configuration per-board Svyatoslav Ryhel
2026-05-07 14:05 ` Lee Jones
2026-05-07 14:33 ` Svyatoslav Ryhel
2026-05-13 14:05 ` Lee Jones [this message]
2026-05-13 16:47 ` Svyatoslav Ryhel
2026-05-07 14:42 ` Svyatoslav Ryhel
2026-05-13 14:04 ` Lee Jones
2026-04-28 15:36 ` [PATCH v4 6/6 RESEND] mfd: motorola-cpcap: add support for Mot CPCAP composition Svyatoslav Ryhel
2026-05-07 14:07 ` Lee Jones
2026-05-07 14:36 ` 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=20260513140550.GD305027@google.com \
--to=lee@kernel.org \
--cc=clamor95@gmail.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=dmitry.torokhov@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=pavel@kernel.org \
--cc=robh@kernel.org \
--cc=tony@atomide.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 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.