[media] cx24117: Fix LNB set_voltage function
authorLuis Alves <ljalvs@gmail.com>
Wed, 13 Nov 2013 18:06:44 +0000 (15:06 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Mon, 9 Dec 2013 11:59:42 +0000 (09:59 -0200)
This patch should fix/enhance the set_voltage function for
the cx24117 demodulator.

Signed-off-by: Luis Alves <ljalvs@gmail.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/dvb-frontends/cx24117.c

index a6fe1aff976b4d7542c66320a08ab1c9afa8dc9c..68f768a5422d063f69b4e33446364f5af699a7a1 100644 (file)
@@ -917,22 +917,15 @@ static int cx24117_set_voltage(struct dvb_frontend *fe,
                voltage == SEC_VOLTAGE_18 ? "SEC_VOLTAGE_18" :
                "SEC_VOLTAGE_OFF");
 
-       /* Set GPIO direction */
-       cmd.args[0] = CMD_SET_GPIODIR;
-       cmd.args[1] = reg;
-       cmd.args[2] = reg;
+       /* Prepare a set GPIO logic level CMD */
+       cmd.args[0] = CMD_SET_GPIOOUT;
+       cmd.args[2] = reg; /* mask */
        cmd.len = 3;
-       ret = cx24117_cmd_execute(fe, &cmd);
-       if (ret)
-               return ret;
 
        if ((voltage == SEC_VOLTAGE_13) ||
            (voltage == SEC_VOLTAGE_18)) {
-               /* Set GPIO logic level */
-               cmd.args[0] = CMD_SET_GPIOOUT;
+               /* power on LNB */
                cmd.args[1] = reg;
-               cmd.args[2] = reg;
-               cmd.len = 3;
                ret = cx24117_cmd_execute(fe, &cmd);
                if (ret != 0)
                        return ret;
@@ -949,17 +942,17 @@ static int cx24117_set_voltage(struct dvb_frontend *fe,
                cmd.args[1] = state->demod ? 0 : 1;
                cmd.args[2] = (voltage == SEC_VOLTAGE_18 ? 0x01 : 0x00);
                cmd.len = 3;
+               ret = cx24117_cmd_execute(fe, &cmd);
 
                /* Min delay time before DiSEqC send */
                msleep(20);
        } else {
-               cmd.args[0] = CMD_SET_GPIOOUT;
+               /* power off LNB */
                cmd.args[1] = 0x00;
-               cmd.args[2] = reg;
-               cmd.len = 3;
+               ret = cx24117_cmd_execute(fe, &cmd);
        }
 
-       return cx24117_cmd_execute(fe, &cmd);
+       return ret;
 }
 
 static int cx24117_set_tone(struct dvb_frontend *fe,
@@ -1277,6 +1270,16 @@ static int cx24117_initfe(struct dvb_frontend *fe)
        cmd.args[2] = CX24117_OCC;
        cmd.len = 3;
        ret = cx24117_cmd_execute_nolock(fe, &cmd);
+       if (ret != 0)
+               goto exit;
+
+       /* Set GPIO direction */
+       /* Set as output - controls LNB power on/off */
+       cmd.args[0] = CMD_SET_GPIODIR;
+       cmd.args[1] = 0x30;
+       cmd.args[2] = 0x30;
+       cmd.len = 3;
+       ret = cx24117_cmd_execute_nolock(fe, &cmd);
 
 exit:
        mutex_unlock(&state->priv->fe_lock);