diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2007-08-31 15:39:39 -0400 |
---|---|---|
committer | Michael Krufky <mkrufky@linuxtv.org> | 2007-08-31 15:39:39 -0400 |
commit | cf898a9e25f6f2174034a221ca67749306c26b0d (patch) | |
tree | 1d0d5184d985b4a889a2bb9d53f36c3015f20594 /linux/drivers/media/video/tuner-simple.c | |
parent | 62918a44d22a61db9bbc4b6361c9df239fcca919 (diff) | |
download | mediapointer-dvb-s2-cf898a9e25f6f2174034a221ca67749306c26b0d.tar.gz mediapointer-dvb-s2-cf898a9e25f6f2174034a221ca67749306c26b0d.tar.bz2 |
tuner-simple: add get_rf_strength and improve status reading efficiency
From: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Diffstat (limited to 'linux/drivers/media/video/tuner-simple.c')
-rw-r--r-- | linux/drivers/media/video/tuner-simple.c | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/linux/drivers/media/video/tuner-simple.c b/linux/drivers/media/video/tuner-simple.c index 8ece12ca9..e3247174e 100644 --- a/linux/drivers/media/video/tuner-simple.c +++ b/linux/drivers/media/video/tuner-simple.c @@ -110,7 +110,7 @@ struct tuner_simple_priv { /* ---------------------------------------------------------------------- */ -static int tuner_getstatus(struct dvb_frontend *fe) +static int tuner_read_status(struct dvb_frontend *fe) { struct tuner_simple_priv *priv = fe->tuner_priv; unsigned char byte; @@ -121,63 +121,66 @@ static int tuner_getstatus(struct dvb_frontend *fe) return byte; } -static int tuner_signal(struct dvb_frontend *fe) +static inline int tuner_signal(const int status) { - return (tuner_getstatus(fe) & TUNER_SIGNAL) << 13; + return (status & TUNER_SIGNAL) << 13; } -static int tuner_stereo(struct dvb_frontend *fe) +static inline int tuner_stereo(const int type, const int status) { - struct tuner_simple_priv *priv = fe->tuner_priv; - - int stereo, status; - - status = tuner_getstatus(fe); - - switch (priv->type) { + switch (type) { case TUNER_PHILIPS_FM1216ME_MK3: case TUNER_PHILIPS_FM1236_MK3: case TUNER_PHILIPS_FM1256_IH3: case TUNER_LG_NTSC_TAPE: - stereo = ((status & TUNER_SIGNAL) == TUNER_STEREO_MK3); - break; + return ((status & TUNER_SIGNAL) == TUNER_STEREO_MK3); default: - stereo = status & TUNER_STEREO; + return status & TUNER_STEREO; } - - return stereo; } -#if 0 /* unused */ -static int tuner_islocked (struct i2c_client *c) +static inline int tuner_islocked(const int status) { - return (tuner_getstatus (c) & TUNER_FL); + return (status & TUNER_FL); } -static int tuner_afcstatus (struct i2c_client *c) +static inline int tuner_afcstatus(const int status) { - return (tuner_getstatus (c) & TUNER_AFC) - 2; + return (status & TUNER_AFC) - 2; } -static int tuner_mode (struct i2c_client *c) +#if 0 /* unused */ +static inline int tuner_mode(const int status) { - return (tuner_getstatus (c) & TUNER_MODE) >> 3; + return (status & TUNER_MODE) >> 3; } #endif static int simple_get_status(struct dvb_frontend *fe, u32 *status) { struct tuner_simple_priv *priv = fe->tuner_priv; - int signal = tuner_signal(fe); + int tuner_status = tuner_read_status(fe); *status = 0; - if (signal) + if (tuner_islocked(tuner_status)) *status = TUNER_STATUS_LOCKED; - if (tuner_stereo(fe)) + if (tuner_stereo(priv->type, tuner_status)) *status |= TUNER_STATUS_STEREO; - tuner_dbg("tuner-simple: Signal strength: %d\n", signal); + tuner_dbg("AFC Status: %d\n", tuner_afcstatus(tuner_status)); + + return 0; +} + +static int simple_get_rf_strength(struct dvb_frontend *fe, u16 *strength) +{ + struct tuner_simple_priv *priv = fe->tuner_priv; + int signal = tuner_signal(tuner_read_status(fe)); + + *strength = signal; + + tuner_dbg("Signal strength: %d\n", signal); return 0; } @@ -623,9 +626,10 @@ static struct dvb_tuner_ops simple_tuner_ops = { }, #endif .set_analog_params = simple_set_params, - .release = simple_release, - .get_frequency = simple_get_frequency, - .get_status = simple_get_status, + .release = simple_release, + .get_frequency = simple_get_frequency, + .get_status = simple_get_status, + .get_rf_strength = simple_get_rf_strength, }; struct dvb_frontend *simple_tuner_attach(struct dvb_frontend *fe, |