Skip to content

Commit

Permalink
V4L/DVB (13976): [STV090x] Added mutex protection around tuner I2C ac…
Browse files Browse the repository at this point in the history
…cess.

With this change it is possible to have the same I2C address for both tuners.

Signed-off-by: Andreas Regel <andreas.regel@gmx.de>
Signed-off-by: Manu Abraham <manu@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
powARman authored and Mauro Carvalho Chehab committed Feb 26, 2010
1 parent 97f7a2a commit 96506a5
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 0 deletions.
9 changes: 9 additions & 0 deletions drivers/media/dvb/frontends/stv090x.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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;
}

Expand Down Expand Up @@ -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");
Expand Down
1 change: 1 addition & 0 deletions drivers/media/dvb/frontends/stv090x_priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down

0 comments on commit 96506a5

Please sign in to comment.