mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-17 14:30:00 +00:00
V4L/DVB (13976): [STV090x] Added mutex protection around tuner I2C access.
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>
This commit is contained in:
parent
97f7a2ae1a
commit
96506a5086
@ -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");
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user