| From 365fe4e0ce218dc5ad10df17b150a366b6015499 Mon Sep 17 00:00:00 2001 |
| From: Antti Palosaari <crope@iki.fi> |
| Date: Wed, 30 Nov 2016 22:08:27 -0200 |
| Subject: [media] mn88472: fix chip id check on probe |
| |
| From: Antti Palosaari <crope@iki.fi> |
| |
| commit 365fe4e0ce218dc5ad10df17b150a366b6015499 upstream. |
| |
| A register used to identify chip during probe was overwritten during |
| firmware download and due to that later probe's for warm chip were |
| failing. Detect chip from the another register, which is located on |
| different register bank 2. |
| |
| Fixes: 94d0eaa41987 ("[media] mn88472: move out of staging to media") |
| |
| Signed-off-by: Antti Palosaari <crope@iki.fi> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/media/dvb-frontends/mn88472.c | 24 ++++++++++++------------ |
| 1 file changed, 12 insertions(+), 12 deletions(-) |
| |
| --- a/drivers/media/dvb-frontends/mn88472.c |
| +++ b/drivers/media/dvb-frontends/mn88472.c |
| @@ -488,18 +488,6 @@ static int mn88472_probe(struct i2c_clie |
| goto err_kfree; |
| } |
| |
| - /* Check demod answers with correct chip id */ |
| - ret = regmap_read(dev->regmap[0], 0xff, &utmp); |
| - if (ret) |
| - goto err_regmap_0_regmap_exit; |
| - |
| - dev_dbg(&client->dev, "chip id=%02x\n", utmp); |
| - |
| - if (utmp != 0x02) { |
| - ret = -ENODEV; |
| - goto err_regmap_0_regmap_exit; |
| - } |
| - |
| /* |
| * Chip has three I2C addresses for different register banks. Used |
| * addresses are 0x18, 0x1a and 0x1c. We register two dummy clients, |
| @@ -536,6 +524,18 @@ static int mn88472_probe(struct i2c_clie |
| } |
| i2c_set_clientdata(dev->client[2], dev); |
| |
| + /* Check demod answers with correct chip id */ |
| + ret = regmap_read(dev->regmap[2], 0xff, &utmp); |
| + if (ret) |
| + goto err_regmap_2_regmap_exit; |
| + |
| + dev_dbg(&client->dev, "chip id=%02x\n", utmp); |
| + |
| + if (utmp != 0x02) { |
| + ret = -ENODEV; |
| + goto err_regmap_2_regmap_exit; |
| + } |
| + |
| /* Sleep because chip is active by default */ |
| ret = regmap_write(dev->regmap[2], 0x05, 0x3e); |
| if (ret) |