Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 65835
b: refs/heads/master
c: 6b897f2
h: refs/heads/master
i:
  65833: 9208cb9
  65831: 95c9dfe
v: v3
  • Loading branch information
Michael Krufky authored and Mauro Carvalho Chehab committed Oct 10, 2007
1 parent 7cdbffa commit a006198
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fd443f7444180c1cd9cbcb816ebf65c8b8e35301
refs/heads/master: 6b897f2c3982af51134ba83f4b6de71d28d35944
63 changes: 41 additions & 22 deletions trunk/drivers/media/video/tea5767.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,48 +264,66 @@ static int set_radio_freq(struct dvb_frontend *fe,
return 0;
}

static int tea5767_signal(struct dvb_frontend *fe)
static int tea5767_read_status(struct dvb_frontend *fe, char *buffer)
{
unsigned char buffer[5];
int rc;
struct tea5767_priv *priv = fe->tuner_priv;
int rc;

memset(buffer, 0, sizeof(buffer));
if (5 != (rc = tuner_i2c_xfer_recv(&priv->i2c_props, buffer, 5)))
memset(buffer, 0, 5);
if (5 != (rc = tuner_i2c_xfer_recv(&priv->i2c_props, buffer, 5))) {
tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc);
return -EREMOTEIO;
}

return ((buffer[3] & TEA5767_ADC_LEVEL_MASK) << 8);
return 0;
}

static int tea5767_stereo(struct dvb_frontend *fe)
static inline int tea5767_signal(struct dvb_frontend *fe, const char *buffer)
{
unsigned char buffer[5];
int rc;
struct tea5767_priv *priv = fe->tuner_priv;

memset(buffer, 0, sizeof(buffer));
if (5 != (rc = tuner_i2c_xfer_recv(&priv->i2c_props, buffer, 5)))
tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc);
int signal = ((buffer[3] & TEA5767_ADC_LEVEL_MASK) << 8);

tuner_dbg("Signal strength: %d\n", signal);

return signal;
}

rc = buffer[2] & TEA5767_STEREO_MASK;
static inline int tea5767_stereo(struct dvb_frontend *fe, const char *buffer)
{
struct tea5767_priv *priv = fe->tuner_priv;

tuner_dbg("radio ST GET = %02x\n", rc);
int stereo = buffer[2] & TEA5767_STEREO_MASK;

return ((buffer[2] & TEA5767_STEREO_MASK) ? V4L2_TUNER_SUB_STEREO : 0);
tuner_dbg("Radio ST GET = %02x\n", stereo);

return (stereo ? V4L2_TUNER_SUB_STEREO : 0);
}

static int tea5767_get_status(struct dvb_frontend *fe, u32 *status)
{
struct tea5767_priv *priv = fe->tuner_priv;
int signal = tea5767_signal(fe);
unsigned char buffer[5];

*status = 0;

if (signal)
*status = TUNER_STATUS_LOCKED;
if (tea5767_stereo(fe))
*status |= TUNER_STATUS_STEREO;
if (0 == tea5767_read_status(fe, buffer)) {
if (tea5767_signal(fe, buffer))
*status = TUNER_STATUS_LOCKED;
if (tea5767_stereo(fe, buffer))
*status |= TUNER_STATUS_STEREO;
}

return 0;
}

static int tea5767_get_rf_strength(struct dvb_frontend *fe, u16 *strength)
{
unsigned char buffer[5];

*strength = 0;

tuner_dbg("tea5767: Signal strength: %d\n", signal);
if (0 == tea5767_read_status(fe, buffer))
*strength = tea5767_signal(fe, buffer);

return 0;
}
Expand Down Expand Up @@ -393,6 +411,7 @@ static struct dvb_tuner_ops tea5767_tuner_ops = {
.release = tea5767_release,
.get_frequency = tea5767_get_frequency,
.get_status = tea5767_get_status,
.get_rf_strength = tea5767_get_rf_strength,
};

struct dvb_frontend *tea5767_attach(struct dvb_frontend *fe,
Expand Down

0 comments on commit a006198

Please sign in to comment.