[media] au8522: bug-fix: enable modulation AFTER tune (instead of before tuning)
authorMichael Krufky <mkrufky@kernellabs.com>
Mon, 12 Mar 2012 20:07:22 +0000 (17:07 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 19 Mar 2012 22:05:46 +0000 (19:05 -0300)
The au8522 driver programs the tuner after programming the demodulator,
but the tuner should be programmed first. This patch fixes this behavior.

EDIT: Apparantly Devin created a similar patch some time ago, but hasn't
submitted it for merge.  I never saw his patch, but I thank him anyhow
for his efforts.  In addition, Devin pointed out a flaw in my patch:

This newly generated patch takes Devin's comments into account.

Thanks-to: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Cc: stable@kernel.org
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/frontends/au8522_dig.c

index c688b95df48645682fec8c2cefbd17cb51b5271e..25f650934c736345d9cb0879f177358042484190 100644 (file)
@@ -588,11 +588,6 @@ static int au8522_set_frontend(struct dvb_frontend *fe)
            (state->current_modulation == c->modulation))
                return 0;
 
-       au8522_enable_modulation(fe, c->modulation);
-
-       /* Allow the demod to settle */
-       msleep(100);
-
        if (fe->ops.tuner_ops.set_params) {
                if (fe->ops.i2c_gate_ctrl)
                        fe->ops.i2c_gate_ctrl(fe, 1);
@@ -604,6 +599,11 @@ static int au8522_set_frontend(struct dvb_frontend *fe)
        if (ret < 0)
                return ret;
 
+       /* Allow the tuner to settle */
+       msleep(100);
+
+       au8522_enable_modulation(fe, c->modulation);
+
        state->current_frequency = c->frequency;
 
        return 0;