From fb2723796ed9b9f937afe8a977249ed1df2115d7 Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Wed, 9 Mar 2016 11:50:43 +0800 Subject: [PATCH] ASoC: rt5640: fix rt5640_i2c_probe fail sometimes if the codec is not initialized completely, i2c transfer will be failed, so we just return PROBE_DEFER to let codec have chance to be probed later. Change-Id: I68922ffa7ddf048ebe3f95be9349d38b7b059982 Signed-off-by: Sugar Zhang --- sound/soc/codecs/rt5640.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c index 6626e2cfbcb7..ee920bc4c784 100644 --- a/sound/soc/codecs/rt5640.c +++ b/sound/soc/codecs/rt5640.c @@ -2337,7 +2337,10 @@ static int rt5640_i2c_probe(struct i2c_client *i2c, msleep(400); } - regmap_read(rt5640->regmap, RT5640_VENDOR_ID2, &val); + ret = regmap_read(rt5640->regmap, RT5640_VENDOR_ID2, &val); + if (ret) + return -EPROBE_DEFER; + if (val != RT5640_DEVICE_ID) { dev_err(&i2c->dev, "Device with ID register %#x is not rt5640/39\n", val); -- 2.34.1