diff options
| author | Charles Keepax <ckeepax@opensource.cirrus.com> | 2026-09-01 16:14:17 +0100 |
|---|---|---|
| committer | Lee Jones <lee@kernel.org> | 2026-09-10 17:30:32 +0100 |
| commit | 3c0de351738ea03c455bc7bb0ba54de00fc024a3 (patch) | |
| tree | 01a7b4ff21d9f7ebcc07689af49d91027ee6fb5e | |
| parent | e548e71aac60871484fd78a0d928af8036aac7db (diff) | |
| download | linux-next-3c0de351738ea03c455bc7bb0ba54de00fc024a3.tar.gz linux-next-3c0de351738ea03c455bc7bb0ba54de00fc024a3.zip | |
mfd: cs42l43: Add support for new cs42l44 variant
The cs42l44 is a cost optimised variant of cs42l43b. Add basic support
for this new device.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20260901151417.2546618-1-ckeepax@opensource.cirrus.com
Signed-off-by: Lee Jones <lee@kernel.org>
| -rw-r--r-- | drivers/mfd/cs42l43-i2c.c | 2 | ||||
| -rw-r--r-- | drivers/mfd/cs42l43-sdw.c | 1 | ||||
| -rw-r--r-- | drivers/mfd/cs42l43.c | 18 | ||||
| -rw-r--r-- | include/linux/mfd/cs42l43-regs.h | 1 |
4 files changed, 16 insertions, 6 deletions
diff --git a/drivers/mfd/cs42l43-i2c.c b/drivers/mfd/cs42l43-i2c.c index cbe05c3ea910..dcc167f78d8a 100644 --- a/drivers/mfd/cs42l43-i2c.c +++ b/drivers/mfd/cs42l43-i2c.c @@ -58,6 +58,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); @@ -67,6 +68,7 @@ MODULE_DEVICE_TABLE(of, cs42l43_of_match); static const struct acpi_device_id cs42l43_acpi_match[] = { { "CSC4243", CS42L43_DEVID_VAL }, { "CSC2A3B", CS42L43B_DEVID_VAL }, + { "CSC4244", 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 0a6999453f32..2d4a192dcc01 100644 --- a/drivers/mfd/cs42l43-sdw.c +++ b/drivers/mfd/cs42l43-sdw.c @@ -183,6 +183,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 4212ebcca60b..592677e1db41 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 68831f113589..4c00ceae8b46 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 |
