From 6b142b3c81e6e532dfad7256fcc7e75fded49245 Mon Sep 17 00:00:00 2001 From: Devin Heitmueller Date: Sun, 13 Mar 2011 02:02:01 -0300 Subject: [PATCH] [media] drxd: provide ability to disable the i2c gate control function If the tuner is not actually behind an i2c gate, using the i2c gate control function can wedge the i2c bus. Provide the ability to control on a per-board basis whether it should be used. Problem was noticed on the HVR-900 R2, where it resulted in the first tuning attempt succeeding, and then all subsequent attempts to access the xc3028 being treated as failures (including the call to sleep the tuner). Signed-off-by: Mauro Carvalho Chehab --- drivers/media/dvb/frontends/drxd.h | 4 ++++ drivers/media/dvb/frontends/drxd_hard.c | 3 +++ drivers/media/video/em28xx/em28xx-dvb.c | 1 + 3 files changed, 8 insertions(+) diff --git a/drivers/media/dvb/frontends/drxd.h b/drivers/media/dvb/frontends/drxd.h index 81093b9b156..b21c85315d7 100644 --- a/drivers/media/dvb/frontends/drxd.h +++ b/drivers/media/dvb/frontends/drxd.h @@ -44,6 +44,10 @@ struct drxd_config u8 demoda_address; u8 demod_revision; + /* If the tuner is not behind an i2c gate, be sure to flip this bit + or else the i2c bus could get wedged */ + u8 disable_i2c_gate_ctrl; + u32 IF; int (*pll_set) (void *priv, void *priv_params, u8 pll_addr, u8 demoda_addr, s32 *off); diff --git a/drivers/media/dvb/frontends/drxd_hard.c b/drivers/media/dvb/frontends/drxd_hard.c index 994195fe9fb..b8baafe3b54 100644 --- a/drivers/media/dvb/frontends/drxd_hard.c +++ b/drivers/media/dvb/frontends/drxd_hard.c @@ -2662,6 +2662,9 @@ int drxd_config_i2c(struct dvb_frontend *fe, int onoff) { struct drxd_state *state=fe->demodulator_priv; + if (state->config.disable_i2c_gate_ctrl == 1) + return 0; + return DRX_ConfigureI2CBridge(state, onoff); } diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c index bdbdb1bd8ec..f18e41f0bbc 100644 --- a/drivers/media/video/em28xx/em28xx-dvb.c +++ b/drivers/media/video/em28xx/em28xx-dvb.c @@ -291,6 +291,7 @@ static struct drxd_config em28xx_drxd = { .demoda_address = 0x00, .pll_address = 0x00, .pll_type = DRXD_PLL_NONE, .clock = 12000, .insert_rs_byte = 1, .pll_set = NULL, .osc_deviation = NULL, .IF = 42800000, + .disable_i2c_gate_ctrl = 1, }; static int mt352_terratec_xs_init(struct dvb_frontend *fe) -- 2.39.5