Re: [PATCH v4 6/6 RESEND] mfd: motorola-cpcap: add support for Mot CPCAP composition
From: Svyatoslav Ryhel
Date: Thu May 07 2026 - 10:42:28 EST
чт, 7 трав. 2026 р. о 17:07 Lee Jones <lee@xxxxxxxxxx> пише:
>
> On Tue, 28 Apr 2026, Svyatoslav Ryhel wrote:
>
> > Add a MFD subdevice composition used in Tegra20 based Mot board
> > (Motorola Atrix 4G and Droid X2).
> >
> > Signed-off-by: Svyatoslav Ryhel <clamor95@xxxxxxxxx>
> > ---
> > drivers/mfd/motorola-cpcap.c | 50 ++++++++++++++++++++++++++++++++++++
> > 1 file changed, 50 insertions(+)
> >
> > diff --git a/drivers/mfd/motorola-cpcap.c b/drivers/mfd/motorola-cpcap.c
> > index 516d1e33affa..fdec92f5c6b0 100644
> > --- a/drivers/mfd/motorola-cpcap.c
> > +++ b/drivers/mfd/motorola-cpcap.c
> > @@ -335,6 +335,54 @@ static const struct cpcap_chip_data cpcap_mapphone_data = {
> > .num_devices = ARRAY_SIZE(cpcap_mapphone_mfd_devices),
> > };
> >
> > +/*
> > + * The Mot board features a USB-PHY and charger similar to the ones in
> > + * Mapphone; however, because Mot is based on Tegra20, it is incompatible
> > + * with the existing implementation, which is tightly interconnected with
> > + * the OMAP USB PHY.
> > + */
> > +static const struct mfd_cell cpcap_mot_mfd_devices[] = {
> > + {
> > + .name = "cpcap_adc",
> > + .of_compatible = "motorola,mot-cpcap-adc",
> > + }, {
> > + .name = "cpcap_battery",
> > + .of_compatible = "motorola,cpcap-battery",
> > + }, {
> > + .name = "cpcap-regulator",
> > + .of_compatible = "motorola,mot-cpcap-regulator",
> > + }, {
> > + .name = "cpcap-rtc",
> > + .of_compatible = "motorola,cpcap-rtc",
> > + }, {
> > + .name = "cpcap-pwrbutton",
> > + .of_compatible = "motorola,cpcap-pwrbutton",
> > + }, {
> > + .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",
>
> MFD_CELL_OF() for all.
>
> > + }, {
> > + .name = "cpcap-codec",
> > + },
>
> MFD_CELL_NAME()
>
I was not aware these macros exist. Thank you for pointing to them.
> > +};
> > +
> > +static const struct cpcap_chip_data cpcap_mot_data = {
> > + .mfd_devices = cpcap_mot_mfd_devices,
> > + .num_devices = ARRAY_SIZE(cpcap_mot_mfd_devices),
> > +};
> > +
> > static int cpcap_probe(struct spi_device *spi)
> > {
> > struct cpcap_ddata *cpcap;
> > @@ -389,6 +437,7 @@ static int cpcap_probe(struct spi_device *spi)
> > static const struct of_device_id cpcap_of_match[] = {
> > { .compatible = "motorola,cpcap", .data = &cpcap_default_data },
> > { .compatible = "motorola,mapphone-cpcap", .data = &cpcap_mapphone_data },
> > + { .compatible = "motorola,mot-cpcap", .data = &cpcap_mot_data },
> > { /* sentinel */ }
> > };
> > MODULE_DEVICE_TABLE(of, cpcap_of_match);
> > @@ -396,6 +445,7 @@ MODULE_DEVICE_TABLE(of, cpcap_of_match);
> > static const struct spi_device_id cpcap_spi_ids[] = {
> > { .name = "cpcap", .driver_data = (kernel_ulong_t)&cpcap_default_data },
> > { .name = "mapphone-cpcap", .driver_data = (kernel_ulong_t)&cpcap_mapphone_data },
> > + { .name = "mot-cpcap", .driver_data = (kernel_ulong_t)&cpcap_mot_data },
> > { /* sentinel */ }
> > };
> > MODULE_DEVICE_TABLE(spi, cpcap_spi_ids);
> > --
> > 2.51.0
> >
>
> --
> Lee Jones