summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/tuner-simple.c
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@linuxtv.org>2007-08-31 15:39:39 -0400
committerMichael Krufky <mkrufky@linuxtv.org>2007-08-31 15:39:39 -0400
commitcf898a9e25f6f2174034a221ca67749306c26b0d (patch)
tree1d0d5184d985b4a889a2bb9d53f36c3015f20594 /linux/drivers/media/video/tuner-simple.c
parent62918a44d22a61db9bbc4b6361c9df239fcca919 (diff)
downloadmediapointer-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.c64
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,