| From e8beb02343e7582980c6705816cd957cf4f74c7a Mon Sep 17 00:00:00 2001 |
| From: Mauro Carvalho Chehab <mchehab@osg.samsung.com> |
| Date: Wed, 3 Feb 2016 17:33:48 -0200 |
| Subject: [media] tda1004x: only update the frontend properties if locked |
| |
| From: Mauro Carvalho Chehab <mchehab@osg.samsung.com> |
| |
| commit e8beb02343e7582980c6705816cd957cf4f74c7a 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: Mauro Carvalho Chehab <mchehab@osg.samsung.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/media/dvb-frontends/tda1004x.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| --- a/drivers/media/dvb-frontends/tda1004x.c |
| +++ b/drivers/media/dvb-frontends/tda1004x.c |
| @@ -903,9 +903,18 @@ static int tda1004x_get_fe(struct dvb_fr |
| { |
| struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache; |
| struct tda1004x_state* state = fe->demodulator_priv; |
| + int status; |
| |
| 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 |
| fe_params->inversion = INVERSION_OFF; |
| if (tda1004x_read_byte(state, TDA1004X_CONFC1) & 0x20) |