From 597b1963912c5f1c6e55da1f1cbea882e7cfdceb Mon Sep 17 00:00:00 2001 From: Michael Krufky Date: Fri, 13 Jun 2008 20:33:23 -0300 Subject: [PATCH] --- yaml --- r: 98495 b: refs/heads/master c: 74d50724a02d7cdc7f7887411518ec43d0251b97 h: refs/heads/master i: 98493: f2d5fb665803a0bb8334fa231d32f7ca7133a8eb 98491: 613b379d60899c6ee86af55d41288f4801c4dba8 98487: 0f260fe3578117b54311bdfdcec2b0a1d5a790c4 98479: 2483681700eddb2f8fd24767ca6f0facf69d1526 98463: 6dd7ec82e3354e4925cfce619497e07902e9649d 98431: a3b24e68464f26f7b75355186e687877ee559706 v: v3 --- [refs] | 2 +- trunk/drivers/media/dvb/frontends/au8522.c | 23 ++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 0bc477210fb9..e631f303e5e2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 104fe9a2d2a56f25fb95800a7ab0f7600dd6879c +refs/heads/master: 74d50724a02d7cdc7f7887411518ec43d0251b97 diff --git a/trunk/drivers/media/dvb/frontends/au8522.c b/trunk/drivers/media/dvb/frontends/au8522.c index 084a280c2d7f..978a287b751b 100644 --- a/trunk/drivers/media/dvb/frontends/au8522.c +++ b/trunk/drivers/media/dvb/frontends/au8522.c @@ -463,10 +463,13 @@ static int au8522_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p) { struct au8522_state *state = fe->demodulator_priv; + int ret = -EINVAL; dprintk("%s(frequency=%d)\n", __func__, p->frequency); - state->current_frequency = p->frequency; + if ((state->current_frequency == p->frequency) && + (state->current_modulation == p->u.vsb.modulation)) + return 0; au8522_enable_modulation(fe, p->u.vsb.modulation); @@ -476,11 +479,16 @@ static int au8522_set_frontend(struct dvb_frontend *fe, if (fe->ops.tuner_ops.set_params) { if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 1); - fe->ops.tuner_ops.set_params(fe, p); + ret = fe->ops.tuner_ops.set_params(fe, p); if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0); } + if (ret < 0) + return ret; + + state->current_frequency = p->frequency; + return 0; } @@ -498,6 +506,16 @@ static int au8522_init(struct dvb_frontend *fe) return 0; } +static int au8522_sleep(struct dvb_frontend *fe) +{ + struct au8522_state *state = fe->demodulator_priv; + dprintk("%s()\n", __func__); + + state->current_frequency = 0; + + return 0; +} + static int au8522_read_status(struct dvb_frontend *fe, fe_status_t *status) { struct au8522_state *state = fe->demodulator_priv; @@ -672,6 +690,7 @@ static struct dvb_frontend_ops au8522_ops = { }, .init = au8522_init, + .sleep = au8522_sleep, .i2c_gate_ctrl = au8522_i2c_gate_ctrl, .set_frontend = au8522_set_frontend, .get_frontend = au8522_get_frontend,