[PATCH v7 6/6] mfd: motorola-cpcap: add support for Mot CPCAP composition
Svyatoslav Ryhel <[email protected]> Tue, 21 Jul 2026 12:56:53 +0300
| Newsgroups | org.kernel.vger.linux-leds,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-input,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Add a MFD subdevice composition used in Tegra20 based Mot board (Motorola Atrix 4G and Droid X2). Signed-off-by: Svyatoslav Ryhel <[email protected]> --- drivers/mfd/motorola-cpcap.c | 20 +++++++++++++++++++- include/linux/mfd/motorola-cpcap.h | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/motorola-cpcap.c b/drivers/mfd/motorola-cpcap.c index 5feb403f26101..65d5eb18aa004 100644 --- a/drivers/mfd/motorola-cpcap.c +++ b/drivers/mfd/motorola-cpcap.c @@ -236,7 +236,6 @@ static const struct mfd_cell cpcap_common_devices[] = { MFD_CELL_OF("cpcap-led", NULL, NULL, 0, 1, "motorola,cpcap-led-green"), MFD_CELL_OF("cpcap-led", NULL, NULL, 0, 2, "motorola,cpcap-led-blue"), MFD_CELL_OF("cpcap-led", NULL, NULL, 0, 3, "motorola,cpcap-led-adl"), - MFD_CELL_OF("cpcap-led", NULL, NULL, 0, 4, "motorola,cpcap-led-cp"), MFD_CELL_NAME("cpcap-codec"), }; @@ -244,6 +243,7 @@ static const struct mfd_cell cpcap_default_devices[] = { MFD_CELL_OF("cpcap_adc", NULL, NULL, 0, 0, "motorola,cpcap-adc"), MFD_CELL_OF("cpcap-regulator", NULL, NULL, 0, 0, "motorola,cpcap-regulator"), MFD_CELL_OF("cpcap-usb-phy", NULL, NULL, 0, 0, "motorola,cpcap-usb-phy"), + MFD_CELL_OF("cpcap-led", NULL, NULL, 0, 4, "motorola,cpcap-led-cp"), }; static const struct mfd_cell cpcap_mapphone_devices[] = { @@ -251,6 +251,18 @@ static const struct mfd_cell cpcap_mapphone_devices[] = { MFD_CELL_OF("cpcap-charger", NULL, NULL, 0, 0, "motorola,mapphone-cpcap-charger"), MFD_CELL_OF("cpcap-regulator", NULL, NULL, 0, 0, "motorola,mapphone-cpcap-regulator"), MFD_CELL_OF("cpcap-usb-phy", NULL, NULL, 0, 0, "motorola,mapphone-cpcap-usb-phy"), + MFD_CELL_OF("cpcap-led", NULL, NULL, 0, 4, "motorola,cpcap-led-cp"), +}; + +/* + * 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_devices[] = { + MFD_CELL_OF("cpcap_adc", NULL, NULL, 0, 0, "motorola,mot-cpcap-adc"), + MFD_CELL_OF("cpcap-regulator", NULL, NULL, 0, 0, "motorola,mot-cpcap-regulator"), }; static int cpcap_probe(struct spi_device *spi) @@ -275,6 +287,10 @@ static int cpcap_probe(struct spi_device *spi) cells = cpcap_mapphone_devices; num_cells = ARRAY_SIZE(cpcap_mapphone_devices); break; + case CPCAP_MOT: + cells = cpcap_mot_devices; + num_cells = ARRAY_SIZE(cpcap_mot_devices); + break; default: return dev_err_probe(&spi->dev, -ENODEV, "Unknown device %d\n", cpcap->variant); @@ -326,6 +342,7 @@ static int cpcap_probe(struct spi_device *spi) static const struct of_device_id cpcap_of_match[] = { { .compatible = "motorola,cpcap", .data = (void *)CPCAP_DEFAULT }, { .compatible = "motorola,mapphone-cpcap", .data = (void *)CPCAP_MAPPHONE }, + { .compatible = "motorola,mot-cpcap", .data = (void *)CPCAP_MOT }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, cpcap_of_match); @@ -333,6 +350,7 @@ MODULE_DEVICE_TABLE(of, cpcap_of_match); static const struct spi_device_id cpcap_spi_ids[] = { { .name = "cpcap", .driver_data = CPCAP_DEFAULT }, { .name = "mapphone-cpcap", .driver_data = CPCAP_MAPPHONE }, + { .name = "mot-cpcap", .driver_data = CPCAP_MOT }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(spi, cpcap_spi_ids); diff --git a/include/linux/mfd/motorola-cpcap.h b/include/linux/mfd/motorola-cpcap.h index 1a85b06272c8f..bb23363eeccdf 100644 --- a/include/linux/mfd/motorola-cpcap.h +++ b/include/linux/mfd/motorola-cpcap.h @@ -28,6 +28,7 @@ enum cpcap_variant { CPCAP_DEFAULT = 1, CPCAP_MAPPHONE, + CPCAP_MOT, CPCAP_MAX }; -- 2.53.0