Re: [PATCH 3/3] mfd: cs42l43: Add support for new cs42l44 variant
Lee Jones <[email protected]> Thu, 6 Aug 2026 15:42:10 +0100
| Newsgroups | dev.linux.lists.mfd,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-sound |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 08 Jul 2026, Charles Keepax wrote: > The cs42l44 is a cost optimised variant of cs42l43b. Add basic support > for this new device. > > Signed-off-by: Charles Keepax <[email protected]> > --- > drivers/mfd/cs42l43-i2c.c | 2 ++ > drivers/mfd/cs42l43-sdw.c | 1 + > drivers/mfd/cs42l43.c | 18 ++++++++++++------ > include/linux/mfd/cs42l43-regs.h | 1 + > 4 files changed, 16 insertions(+), 6 deletions(-) Doesn't apply anymore, sorry. Please rebase. > diff --git a/drivers/mfd/cs42l43-i2c.c b/drivers/mfd/cs42l43-i2c.c > index bd9752d2cfc34..1af878c7a20b4 100644 > --- a/drivers/mfd/cs42l43-i2c.c > +++ b/drivers/mfd/cs42l43-i2c.c > @@ -59,6 +59,7 @@ static int cs42l43_i2c_probe(struct i2c_client *i2c) > static const struct of_device_id cs42l43_of_match[] = { > { .compatible = "cirrus,cs42l43", .data = (void *)CS42L43_DEVID_VAL }, > { .compatible = "cirrus,cs42l43b", .data = (void *)CS42L43B_DEVID_VAL }, > + { .compatible = "cirrus,cs42l44", .data = (void *)CS42L43B_DEVID_VAL }, > { } > }; > MODULE_DEVICE_TABLE(of, cs42l43_of_match); > @@ -68,6 +69,7 @@ MODULE_DEVICE_TABLE(of, cs42l43_of_match); > static const struct acpi_device_id cs42l43_acpi_match[] = { > { .id = "CSC4243", .driver_data = CS42L43_DEVID_VAL }, > { .id = "CSC2A3B", .driver_data = CS42L43B_DEVID_VAL }, > + { .id = "CSC4244", .driver_data = CS42L43B_DEVID_VAL }, > { } > }; > MODULE_DEVICE_TABLE(acpi, cs42l43_acpi_match); > diff --git a/drivers/mfd/cs42l43-sdw.c b/drivers/mfd/cs42l43-sdw.c > index 6ccfdcd3f6698..81dd19df53685 100644 > --- a/drivers/mfd/cs42l43-sdw.c > +++ b/drivers/mfd/cs42l43-sdw.c > @@ -184,6 +184,7 @@ static int cs42l43_sdw_probe(struct sdw_slave *sdw, const struct sdw_device_id * > static const struct sdw_device_id cs42l43_sdw_id[] = { > SDW_SLAVE_ENTRY(0x01FA, 0x4243, (void *)CS42L43_DEVID_VAL), > SDW_SLAVE_ENTRY(0x01FA, 0x2A3B, (void *)CS42L43B_DEVID_VAL), > + SDW_SLAVE_ENTRY(0x01FA, 0x4244, (void *)CS42L43B_DEVID_VAL), > { } > }; > MODULE_DEVICE_TABLE(sdw, cs42l43_sdw_id); > diff --git a/drivers/mfd/cs42l43.c b/drivers/mfd/cs42l43.c > index 33479ddd539a6..d6027fa4de705 100644 > --- a/drivers/mfd/cs42l43.c > +++ b/drivers/mfd/cs42l43.c > @@ -959,6 +959,7 @@ static void cs42l43_boot_work(struct work_struct *work) > { > struct cs42l43 *cs42l43 = container_of(work, struct cs42l43, boot_work); > unsigned int devid, revid, otp; > + bool valid_id; > int ret; > > ret = cs42l43_wait_for_attach(cs42l43); > @@ -973,19 +974,24 @@ static void cs42l43_boot_work(struct work_struct *work) > > switch (devid) { > case CS42L43_DEVID_VAL: > + valid_id = (cs42l43->variant_id == CS42L43_DEVID_VAL); > + break; > case CS42L43B_DEVID_VAL: > - if (devid != cs42l43->variant_id) { > - dev_err(cs42l43->dev, > - "Device ID (0x%06x) does not match variant ID (0x%06lx)\n", > - devid, cs42l43->variant_id); > - goto err; > - } > + case CS42L44_DEVID_VAL: > + valid_id = (cs42l43->variant_id == CS42L43B_DEVID_VAL); > break; > default: > dev_err(cs42l43->dev, "Unrecognised devid: 0x%06x\n", devid); > goto err; > } > > + if (!valid_id) { > + dev_err(cs42l43->dev, > + "Device ID (0x%06x) does not match variant ID (0x%06lx)\n", > + devid, cs42l43->variant_id); > + goto err; > + } > + > ret = regmap_read(cs42l43->regmap, CS42L43_REVID, &revid); > if (ret) { > dev_err(cs42l43->dev, "Failed to read rev: %d\n", ret); > diff --git a/include/linux/mfd/cs42l43-regs.h b/include/linux/mfd/cs42l43-regs.h > index 68831f113589d..4c00ceae8b461 100644 > --- a/include/linux/mfd/cs42l43-regs.h > +++ b/include/linux/mfd/cs42l43-regs.h > @@ -1183,6 +1183,7 @@ > > /* CS42L43B VARIANT REGISTERS */ > #define CS42L43B_DEVID_VAL 0x0042A43B > +#define CS42L44_DEVID_VAL 0x00042A44 > > #define CS42L43B_DECIM_VOL_CTRL_CH1_CH2 0x00008280 > #define CS42L43B_DECIM_VOL_CTRL_CH3_CH4 0x00008284 > -- > 2.47.3 > -- Lee Jones