Commit 2cd52996 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Greg Kroah-Hartman

tda1004x: only update the frontend properties if locked

commit e8beb023 upstream.

The tda1004x was updating the properties cache before locking.
If the device is not locked, the data at the registers are just
random values with no real meaning.

This caused the driver to fail with libdvbv5, as such library
calls GET_PROPERTY from time to time, in order to return the
DVB stats.

Tested with a saa7134 card 78:
	ASUSTeK P7131 Dual, vendor PCI ID: 1043:4862
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 590d6fd4
...@@ -903,9 +903,18 @@ static int tda1004x_get_fe(struct dvb_frontend *fe) ...@@ -903,9 +903,18 @@ static int tda1004x_get_fe(struct dvb_frontend *fe)
{ {
struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache; struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
struct tda1004x_state* state = fe->demodulator_priv; struct tda1004x_state* state = fe->demodulator_priv;
int status;
dprintk("%s\n", __func__); dprintk("%s\n", __func__);
status = tda1004x_read_byte(state, TDA1004X_STATUS_CD);
if (status == -1)
return -EIO;
/* Only update the properties cache if device is locked */
if (!(status & 8))
return 0;
// inversion status // inversion status
fe_params->inversion = INVERSION_OFF; fe_params->inversion = INVERSION_OFF;
if (tda1004x_read_byte(state, TDA1004X_CONFC1) & 0x20) if (tda1004x_read_byte(state, TDA1004X_CONFC1) & 0x20)
......
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