Commit 735f0b9a authored by Michael Krufky's avatar Michael Krufky Committed by Mauro Carvalho Chehab

V4L/DVB (6137): tuner-simple: add get_rf_strength and improve status reading efficiency

Signed-off-by: default avatarMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 8fb3b9f7
...@@ -102,7 +102,7 @@ struct tuner_simple_priv { ...@@ -102,7 +102,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; struct tuner_simple_priv *priv = fe->tuner_priv;
unsigned char byte; unsigned char byte;
...@@ -113,47 +113,60 @@ static int tuner_getstatus(struct dvb_frontend *fe) ...@@ -113,47 +113,60 @@ static int tuner_getstatus(struct dvb_frontend *fe)
return byte; 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; switch (type) {
int stereo, status;
status = tuner_getstatus(fe);
switch (priv->type) {
case TUNER_PHILIPS_FM1216ME_MK3: case TUNER_PHILIPS_FM1216ME_MK3:
case TUNER_PHILIPS_FM1236_MK3: case TUNER_PHILIPS_FM1236_MK3:
case TUNER_PHILIPS_FM1256_IH3: case TUNER_PHILIPS_FM1256_IH3:
case TUNER_LG_NTSC_TAPE: case TUNER_LG_NTSC_TAPE:
stereo = ((status & TUNER_SIGNAL) == TUNER_STEREO_MK3); return ((status & TUNER_SIGNAL) == TUNER_STEREO_MK3);
break;
default: default:
stereo = status & TUNER_STEREO; return status & TUNER_STEREO;
} }
}
return stereo; static inline int tuner_islocked(const int status)
{
return (status & TUNER_FL);
}
static inline int tuner_afcstatus(const int status)
{
return (status & TUNER_AFC) - 2;
} }
static int simple_get_status(struct dvb_frontend *fe, u32 *status) static int simple_get_status(struct dvb_frontend *fe, u32 *status)
{ {
struct tuner_simple_priv *priv = fe->tuner_priv; struct tuner_simple_priv *priv = fe->tuner_priv;
int signal = tuner_signal(fe); int tuner_status = tuner_read_status(fe);
*status = 0; *status = 0;
if (signal) if (tuner_islocked(tuner_status))
*status = TUNER_STATUS_LOCKED; *status = TUNER_STATUS_LOCKED;
if (tuner_stereo(fe)) if (tuner_stereo(priv->type, tuner_status))
*status |= TUNER_STATUS_STEREO; *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; return 0;
} }
...@@ -583,6 +596,7 @@ static struct dvb_tuner_ops simple_tuner_ops = { ...@@ -583,6 +596,7 @@ static struct dvb_tuner_ops simple_tuner_ops = {
.release = simple_release, .release = simple_release,
.get_frequency = simple_get_frequency, .get_frequency = simple_get_frequency,
.get_status = simple_get_status, .get_status = simple_get_status,
.get_rf_strength = simple_get_rf_strength,
}; };
struct dvb_frontend *simple_tuner_attach(struct dvb_frontend *fe, struct dvb_frontend *simple_tuner_attach(struct dvb_frontend *fe,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment