Re: [PATCH 3/3] mfd: cs42l43: Add support for new cs42l44 variant

Lee Jones <[email protected]>
Newsgroups org.kernel.vger.linux-sound,dev.linux.lists.mfd,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.