Commit 6894c070 authored by Andreas Matthies's avatar Andreas Matthies Committed by Mauro Carvalho Chehab

[media] tda10071: change firmware download condition

Reading firmware status register to detect whether firmware is
running or not didn't work 100% reliably. That register was
likely set by firmware itself which means it could not contain
reasonable values until firmware is up and running. Usually it
just worked as some garbage value was returned accidentally but it
appears that in some cases returned garbage value was 0x00 which
was considered "firmware is up and running" by the driver and
firmware loading was skipped leaving device to non-working state.
Fix problem by removing unreliable check and let the driver keep
count whether firmware is loaded or not.
Signed-off-by: default avatarAndreas Matthies <a.matthies@gmx.net>
Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent f5ca8c24
...@@ -912,14 +912,8 @@ static int tda10071_init(struct dvb_frontend *fe) ...@@ -912,14 +912,8 @@ static int tda10071_init(struct dvb_frontend *fe)
{ 0xd5, 0x03, 0x03 }, { 0xd5, 0x03, 0x03 },
}; };
/* firmware status */ if (priv->warm) {
ret = tda10071_rd_reg(priv, 0x51, &tmp);
if (ret)
goto error;
if (!tmp) {
/* warm state - wake up device from sleep */ /* warm state - wake up device from sleep */
priv->warm = 1;
for (i = 0; i < ARRAY_SIZE(tab); i++) { for (i = 0; i < ARRAY_SIZE(tab); i++) {
ret = tda10071_wr_reg_mask(priv, tab[i].reg, ret = tda10071_wr_reg_mask(priv, tab[i].reg,
...@@ -937,7 +931,6 @@ static int tda10071_init(struct dvb_frontend *fe) ...@@ -937,7 +931,6 @@ static int tda10071_init(struct dvb_frontend *fe)
goto error; goto error;
} else { } else {
/* cold state - try to download firmware */ /* cold state - try to download firmware */
priv->warm = 0;
/* request the firmware, this will block and timeout */ /* request the firmware, this will block and timeout */
ret = request_firmware(&fw, fw_file, priv->i2c->dev.parent); ret = request_firmware(&fw, fw_file, priv->i2c->dev.parent);
......
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