V4L/DVB (13982): [STV090x] setup master clock in stv090x_init instead of stv090x_setup.
authorAndreas Regel <andreas.regel@gmx.de>
Tue, 5 Jan 2010 22:23:41 +0000 (19:23 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 26 Feb 2010 18:10:37 +0000 (15:10 -0300)
This is needed when clock input is driven from tuner and an output
divider different from 1 is used.

Signed-off-by: Andreas Regel <andreas.regel@gmx.de>
Signed-off-by: Manu Abraham <manu@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/frontends/stv090x.c

index 93be76ced896e1fe93a329c1cb58addbcdb1d211..4dc30911f4080aca0818ece059a43bfe3f631e07 100644 (file)
@@ -4292,6 +4292,15 @@ static int stv090x_init(struct dvb_frontend *fe)
        const struct stv090x_config *config = state->config;
        u32 reg;
 
+       if (state->internal->mclk == 0) {
+               stv090x_set_mclk(state, 135000000, config->xtal); /* 135 Mhz */
+               msleep(5);
+               if (stv090x_write_reg(state, STV090x_SYNTCTRL,
+                                     0x20 | config->clk_mode) < 0)
+                       goto err;
+               stv090x_get_mclk(state);
+       }
+
        if (stv090x_wakeup(fe) < 0) {
                dprintk(FE_ERROR, 1, "Error waking device");
                goto err;
@@ -4426,12 +4435,6 @@ static int stv090x_setup(struct dvb_frontend *fe)
        if (stv090x_write_reg(state, STV090x_TSTRES0, 0x00) < 0)
                goto err;
 
-       stv090x_set_mclk(state, 135000000, config->xtal); /* 135 Mhz */
-       msleep(5);
-       if (stv090x_write_reg(state, STV090x_SYNTCTRL, 0x20 | config->clk_mode) < 0)
-               goto err;
-       stv090x_get_mclk(state);
-
        return 0;
 err:
        dprintk(FE_ERROR, 1, "I/O error");