diff options
author | Frank Li <Frank.Li@nxp.com> | 2023-07-13 18:25:12 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-07-17 22:59:46 +0100 |
commit | 8b30cdbe0b911562fc1496078162dc9547b69be5 (patch) | |
tree | fa1cdc848e3d57d30db42d4e3ecef46751a4de60 | |
parent | f0e5ea2c742db2a4bf3d2ea34632b29c9bb1d95e (diff) | |
download | lwn-8b30cdbe0b911562fc1496078162dc9547b69be5.tar.gz lwn-8b30cdbe0b911562fc1496078162dc9547b69be5.zip |
ASoC: codec: wm8960: add additional probe check for codec identification
The wm8960 codec is not readable, resulting in a NACK for address 0x3d (8-bit).
This can partially indicate it. For example: wm8962 codec use the same address
but is readable. This additional probe check will help prevent loading the wm8960
module incorrectly on wm8962 hardware.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20230713222513.1636591-1-Frank.Li@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/wm8960.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c index 366f5d769d6d..b2c1432d4f9b 100644 --- a/sound/soc/codecs/wm8960.c +++ b/sound/soc/codecs/wm8960.c @@ -1415,6 +1415,7 @@ static int wm8960_i2c_probe(struct i2c_client *i2c) struct wm8960_data *pdata = dev_get_platdata(&i2c->dev); struct wm8960_priv *wm8960; int ret; + u8 val; wm8960 = devm_kzalloc(&i2c->dev, sizeof(struct wm8960_priv), GFP_KERNEL); @@ -1436,6 +1437,12 @@ static int wm8960_i2c_probe(struct i2c_client *i2c) else if (i2c->dev.of_node) wm8960_set_pdata_from_of(i2c, &wm8960->pdata); + ret = i2c_master_recv(i2c, &val, sizeof(val)); + if (ret >= 0) { + dev_err(&i2c->dev, "Not wm8960, wm8960 reg can not read by i2c\n"); + return -EINVAL; + } + ret = wm8960_reset(wm8960->regmap); if (ret != 0) { dev_err(&i2c->dev, "Failed to issue reset\n"); |