Commit ba68fa31 authored by Oder Chiou's avatar Oder Chiou Committed by Mark Brown

ASoC: rt5663: Delay and retry reading rt5663 ID register

In the probe, the codec may not be ready for I2C reading or there are some
glitches on the i2c line. So if the i2c reading value is incorrect, it will
read again after delay. This issue is similar the patch
https://patchwork.kernel.org/patch/9681421/. In current project, these 2
devices were connected to the same i2c line, and they met the same problem.
Signed-off-by: default avatarOder Chiou <oder_chiou@realtek.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 457c25ef
...@@ -3428,7 +3428,16 @@ static int rt5663_i2c_probe(struct i2c_client *i2c, ...@@ -3428,7 +3428,16 @@ static int rt5663_i2c_probe(struct i2c_client *i2c,
ret); ret);
return ret; return ret;
} }
ret = regmap_read(regmap, RT5663_VENDOR_ID_2, &val);
if (ret || (val != RT5663_DEVICE_ID_2 && val != RT5663_DEVICE_ID_1)) {
dev_err(&i2c->dev,
"Device with ID register %#x is not rt5663, retry one time.\n",
val);
msleep(100);
regmap_read(regmap, RT5663_VENDOR_ID_2, &val); regmap_read(regmap, RT5663_VENDOR_ID_2, &val);
}
switch (val) { switch (val) {
case RT5663_DEVICE_ID_2: case RT5663_DEVICE_ID_2:
rt5663->regmap = devm_regmap_init_i2c(i2c, &rt5663_v2_regmap); rt5663->regmap = devm_regmap_init_i2c(i2c, &rt5663_v2_regmap);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment