aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/common/tuners/mxl5007t.c
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@linuxtv.org>2008-07-26 12:06:57 -0300
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-07-27 11:07:33 -0300
commitc39c1fd29373d204b11b71946d0f4c97e4974dd9 (patch)
tree7d199c0da52075b404f13cd9d2bef983f26c3f3c /drivers/media/common/tuners/mxl5007t.c
parent59d27521c0f50fadf3382e2b325a7e8a04d9a770 (diff)
downloadkernel_samsung_smdk4412-c39c1fd29373d204b11b71946d0f4c97e4974dd9.zip
kernel_samsung_smdk4412-c39c1fd29373d204b11b71946d0f4c97e4974dd9.tar.gz
kernel_samsung_smdk4412-c39c1fd29373d204b11b71946d0f4c97e4974dd9.tar.bz2
V4L/DVB (8531): mxl5007t: move i2c gate handling outside of mutex protected code blocks
There is no reason to protect the i2c gate handling within the mxl5007t state mutex. Thanks to Steven Toth for pointing this out. Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/common/tuners/mxl5007t.c')
-rw-r--r--drivers/media/common/tuners/mxl5007t.c45
1 files changed, 24 insertions, 21 deletions
diff --git a/drivers/media/common/tuners/mxl5007t.c b/drivers/media/common/tuners/mxl5007t.c
index f3b193a..4a1ea54 100644
--- a/drivers/media/common/tuners/mxl5007t.c
+++ b/drivers/media/common/tuners/mxl5007t.c
@@ -660,11 +660,11 @@ static int mxl5007t_get_status(struct dvb_frontend *fe, u32 *status)
s32 rf_input_level;
int ret;
- mutex_lock(&state->lock);
-
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1);
+ mutex_lock(&state->lock);
+
ret = mxl5007t_synth_lock_status(state, &rf_locked, &ref_locked);
if (mxl_fail(ret))
goto fail;
@@ -676,10 +676,11 @@ static int mxl5007t_get_status(struct dvb_frontend *fe, u32 *status)
goto fail;
mxl_debug("rf input power: %d", rf_input_level);
fail:
+ mutex_unlock(&state->lock);
+
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0);
- mutex_unlock(&state->lock);
return ret;
}
@@ -730,11 +731,11 @@ static int mxl5007t_set_params(struct dvb_frontend *fe,
return -EINVAL;
}
- mutex_lock(&state->lock);
-
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1);
+ mutex_lock(&state->lock);
+
ret = mxl5007t_tuner_init(state, mode);
if (mxl_fail(ret))
goto fail;
@@ -747,10 +748,11 @@ static int mxl5007t_set_params(struct dvb_frontend *fe,
state->bandwidth = (fe->ops.info.type == FE_OFDM) ?
params->u.ofdm.bandwidth : 0;
fail:
+ mutex_unlock(&state->lock);
+
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0);
- mutex_unlock(&state->lock);
return ret;
}
@@ -802,11 +804,11 @@ static int mxl5007t_set_analog_params(struct dvb_frontend *fe,
}
mxl_debug("setting mxl5007 to system %s", mode_name);
- mutex_lock(&state->lock);
-
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1);
+ mutex_lock(&state->lock);
+
ret = mxl5007t_tuner_init(state, cable ? cbl_mode : ota_mode);
if (mxl_fail(ret))
goto fail;
@@ -818,10 +820,11 @@ static int mxl5007t_set_analog_params(struct dvb_frontend *fe,
state->frequency = freq;
state->bandwidth = 0;
fail:
+ mutex_unlock(&state->lock);
+
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0);
- mutex_unlock(&state->lock);
return ret;
}
@@ -833,11 +836,11 @@ static int mxl5007t_init(struct dvb_frontend *fe)
int ret;
u8 d;
- mutex_lock(&state->lock);
-
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1);
+ mutex_lock(&state->lock);
+
ret = mxl5007t_read_reg(state, 0x05, &d);
if (mxl_fail(ret))
goto fail;
@@ -845,11 +848,11 @@ static int mxl5007t_init(struct dvb_frontend *fe)
ret = mxl5007t_write_reg(state, 0x05, d | 0x01);
mxl_fail(ret);
fail:
+ mutex_unlock(&state->lock);
+
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0);
- mutex_unlock(&state->lock);
-
return ret;
}
@@ -859,11 +862,11 @@ static int mxl5007t_sleep(struct dvb_frontend *fe)
int ret;
u8 d;
- mutex_lock(&state->lock);
-
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1);
+ mutex_lock(&state->lock);
+
ret = mxl5007t_read_reg(state, 0x05, &d);
if (mxl_fail(ret))
goto fail;
@@ -871,11 +874,11 @@ static int mxl5007t_sleep(struct dvb_frontend *fe)
ret = mxl5007t_write_reg(state, 0x05, d & ~0x01);
mxl_fail(ret);
fail:
+ mutex_unlock(&state->lock);
+
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0);
- mutex_unlock(&state->lock);
-
return ret;
}
@@ -995,18 +998,18 @@ struct dvb_frontend *mxl5007t_attach(struct dvb_frontend *fe,
mutex_init(&state->lock);
- mutex_lock(&state->lock);
-
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1);
+ mutex_lock(&state->lock);
+
ret = mxl5007t_get_chip_id(state);
+ mutex_unlock(&state->lock);
+
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0);
- mutex_unlock(&state->lock);
-
/* check return value of mxl5007t_get_chip_id */
if (mxl_fail(ret))
goto fail;