| From d930b5b5bf122a61952cfebabb1e618682a2631a Mon Sep 17 00:00:00 2001 |
| From: Antti Palosaari <crope@iki.fi> |
| Date: Wed, 30 Nov 2016 19:36:14 -0200 |
| Subject: [media] mn88473: fix chip id check on probe |
| |
| From: Antti Palosaari <crope@iki.fi> |
| |
| commit d930b5b5bf122a61952cfebabb1e618682a2631a 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: 7908fad99a6c ("[media] mn88473: finalize driver") |
| |
| 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/mn88473.c | 24 ++++++++++++------------ |
| 1 file changed, 12 insertions(+), 12 deletions(-) |
| |
| --- a/drivers/media/dvb-frontends/mn88473.c |
| +++ b/drivers/media/dvb-frontends/mn88473.c |
| @@ -485,18 +485,6 @@ static int mn88473_probe(struct i2c_clie |
| goto err_kfree; |
| } |
| |
| - /* Check demod answers with correct chip id */ |
| - ret = regmap_read(dev->regmap[0], 0xff, &uitmp); |
| - if (ret) |
| - goto err_regmap_0_regmap_exit; |
| - |
| - dev_dbg(&client->dev, "chip id=%02x\n", uitmp); |
| - |
| - if (uitmp != 0x03) { |
| - 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, |
| @@ -533,6 +521,18 @@ static int mn88473_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, &uitmp); |
| + if (ret) |
| + goto err_regmap_2_regmap_exit; |
| + |
| + dev_dbg(&client->dev, "chip id=%02x\n", uitmp); |
| + |
| + if (uitmp != 0x03) { |
| + 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) |