mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
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>
This commit is contained in:
parent
7c2c57ec8c
commit
fdb122928a
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user