From 3154b64a6e69f8f0831af3cbb79b4d38242a5696 Mon Sep 17 00:00:00 2001 From: Andreas Regel Date: Tue, 5 Jan 2010 19:20:21 -0300 Subject: [PATCH] --- yaml --- r: 181511 b: refs/heads/master c: 96506a5086d0e9fd7332d6da74f115fa37bb58c6 h: refs/heads/master i: 181509: d9a0567835d628eac06191df23103af54f9135db 181507: aec0064ccc42d8e963000da66a09d2bf096f5cce 181503: 0b9295fa6c0ddcd6d1427281ae022e7e9da960eb v: v3 --- [refs] | 2 +- trunk/drivers/media/dvb/frontends/stv090x.c | 9 +++++++++ trunk/drivers/media/dvb/frontends/stv090x_priv.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 1b594a44aeba..deee4c3f4d4c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 97f7a2ae1a8a1e44a481456375efced75210e5eb +refs/heads/master: 96506a5086d0e9fd7332d6da74f115fa37bb58c6 diff --git a/trunk/drivers/media/dvb/frontends/stv090x.c b/trunk/drivers/media/dvb/frontends/stv090x.c index 9a817a69ed30..e903334a8323 100644 --- a/trunk/drivers/media/dvb/frontends/stv090x.c +++ b/trunk/drivers/media/dvb/frontends/stv090x.c @@ -758,6 +758,9 @@ static int stv090x_i2c_gate_ctrl(struct dvb_frontend *fe, int enable) struct stv090x_state *state = fe->demodulator_priv; u32 reg; + if (enable) + mutex_lock(&state->internal->tuner_lock); + reg = STV090x_READ_DEMOD(state, I2CRPT); if (enable) { dprintk(FE_DEBUG, 1, "Enable Gate"); @@ -771,9 +774,14 @@ static int stv090x_i2c_gate_ctrl(struct dvb_frontend *fe, int enable) if ((STV090x_WRITE_DEMOD(state, I2CRPT, reg)) < 0) goto err; } + + if (!enable) + mutex_unlock(&state->internal->tuner_lock); + return 0; err: dprintk(FE_ERROR, 1, "I/O error"); + mutex_unlock(&state->internal->tuner_lock); return -1; } @@ -4439,6 +4447,7 @@ struct dvb_frontend *stv090x_attach(const struct stv090x_config *config, } mutex_init(&state->internal->demod_lock); + mutex_init(&state->internal->tuner_lock); if (stv090x_sleep(&state->frontend) < 0) { dprintk(FE_ERROR, 1, "Error putting device to sleep"); diff --git a/trunk/drivers/media/dvb/frontends/stv090x_priv.h b/trunk/drivers/media/dvb/frontends/stv090x_priv.h index d38542665b0a..5b780c80d496 100644 --- a/trunk/drivers/media/dvb/frontends/stv090x_priv.h +++ b/trunk/drivers/media/dvb/frontends/stv090x_priv.h @@ -235,6 +235,7 @@ struct stv090x_internal { u8 i2c_addr; struct mutex demod_lock; /* Lock access to shared register */ + struct mutex tuner_lock; /* Lock access to tuners */ s32 mclk; /* Masterclock Divider factor */ u32 dev_ver;