]> Pileus Git - ~andy/linux/commitdiff
ASoC: wm8991: Verify device ID during probe()
authorMark Brown <broonie@linaro.org>
Fri, 22 Nov 2013 13:34:48 +0000 (13:34 +0000)
committerMark Brown <broonie@linaro.org>
Sun, 24 Nov 2013 13:53:27 +0000 (13:53 +0000)
Just in case.

Signed-off-by: Mark Brown <broonie@linaro.org>
Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
sound/soc/codecs/wm8991.c

index 5fdcf788e990ebbde17c20579c63842faf67f368..dba0306c42a5c54aa459cc4fe1593b08c92a5abf 100644 (file)
@@ -1335,6 +1335,7 @@ static int wm8991_i2c_probe(struct i2c_client *i2c,
                            const struct i2c_device_id *id)
 {
        struct wm8991_priv *wm8991;
+       unsigned int val;
        int ret;
 
        wm8991 = devm_kzalloc(&i2c->dev, sizeof(*wm8991), GFP_KERNEL);
@@ -1347,6 +1348,16 @@ static int wm8991_i2c_probe(struct i2c_client *i2c,
 
        i2c_set_clientdata(i2c, wm8991);
 
+       ret = regmap_read(wm8991->regmap, WM8991_RESET, &val);
+       if (ret != 0) {
+               dev_err(&i2c->dev, "Failed to read device ID: %d\n", ret);
+               return ret;
+       }
+       if (val != 0x8991) {
+               dev_err(&i2c->dev, "Device with ID %x is not a WM8991\n", val);
+               return -EINVAL;
+       }
+
        ret = regmap_write(wm8991->regmap, WM8991_RESET, 0);
        if (ret < 0) {
                dev_err(&i2c->dev, "Failed to issue reset: %d\n", ret);