|
@@ -135,15 +135,33 @@
|
|
|
|
|
|
|
|
|
enum cmds {
|
|
|
- CMD_SET_VCO = 0x10,
|
|
|
- CMD_TUNEREQUEST = 0x11,
|
|
|
- CMD_MPEGCONFIG = 0x13,
|
|
|
- CMD_TUNERINIT = 0x14,
|
|
|
- CMD_LNBSEND = 0x21, /* Formerly CMD_SEND_DISEQC */
|
|
|
- CMD_LNBDCLEVEL = 0x22,
|
|
|
- CMD_SET_TONE = 0x23,
|
|
|
- CMD_UPDFWVERS = 0x35,
|
|
|
- CMD_TUNERSLEEP = 0x36,
|
|
|
+ CMD_SET_VCOFREQ = 0x10,
|
|
|
+ CMD_TUNEREQUEST = 0x11,
|
|
|
+ CMD_GLOBAL_MPEGCFG = 0x13,
|
|
|
+ CMD_MPEGCFG = 0x14,
|
|
|
+ CMD_TUNERINIT = 0x15,
|
|
|
+ CMD_GET_SRATE = 0x18,
|
|
|
+ CMD_SET_GOLDCODE = 0x19,
|
|
|
+ CMD_GET_AGCACC = 0x1a,
|
|
|
+ CMD_DEMODINIT = 0x1b,
|
|
|
+ CMD_GETCTLACC = 0x1c,
|
|
|
+
|
|
|
+ CMD_LNBCONFIG = 0x20,
|
|
|
+ CMD_LNBSEND = 0x21,
|
|
|
+ CMD_LNBDCLEVEL = 0x22,
|
|
|
+ CMD_LNBPCBCONFIG = 0x23,
|
|
|
+ CMD_LNBSENDTONEBST = 0x24,
|
|
|
+ CMD_LNBUPDREPLY = 0x25,
|
|
|
+
|
|
|
+ CMD_SET_GPIOMODE = 0x30,
|
|
|
+ CMD_SET_GPIOEN = 0x31,
|
|
|
+ CMD_SET_GPIODIR = 0x32,
|
|
|
+ CMD_SET_GPIOOUT = 0x33,
|
|
|
+ CMD_ENABLERSCORR = 0x34,
|
|
|
+ CMD_FWVERSION = 0x35,
|
|
|
+ CMD_SET_SLEEPMODE = 0x36,
|
|
|
+ CMD_BERCTRL = 0x3c,
|
|
|
+ CMD_EVENTCTRL = 0x3d,
|
|
|
};
|
|
|
|
|
|
static LIST_HEAD(hybrid_tuner_instance_list);
|
|
@@ -619,8 +637,8 @@ static int cx24117_load_firmware(struct dvb_frontend *fe,
|
|
|
cx24117_writereg(state, 0xf7, 0x0c);
|
|
|
cx24117_writereg(state, 0xe0, 0x00);
|
|
|
|
|
|
- /* CMD 1B */
|
|
|
- cmd.args[0] = 0x1b;
|
|
|
+ /* Init demodulator */
|
|
|
+ cmd.args[0] = CMD_DEMODINIT;
|
|
|
cmd.args[1] = 0x00;
|
|
|
cmd.args[2] = 0x01;
|
|
|
cmd.args[3] = 0x00;
|
|
@@ -629,8 +647,8 @@ static int cx24117_load_firmware(struct dvb_frontend *fe,
|
|
|
if (ret != 0)
|
|
|
goto error;
|
|
|
|
|
|
- /* CMD 10 */
|
|
|
- cmd.args[0] = CMD_SET_VCO;
|
|
|
+ /* Set VCO frequency */
|
|
|
+ cmd.args[0] = CMD_SET_VCOFREQ;
|
|
|
cmd.args[1] = 0x06;
|
|
|
cmd.args[2] = 0x2b;
|
|
|
cmd.args[3] = 0xd8;
|
|
@@ -648,8 +666,8 @@ static int cx24117_load_firmware(struct dvb_frontend *fe,
|
|
|
if (ret != 0)
|
|
|
goto error;
|
|
|
|
|
|
- /* CMD 15 */
|
|
|
- cmd.args[0] = 0x15;
|
|
|
+ /* Tuner init */
|
|
|
+ cmd.args[0] = CMD_TUNERINIT;
|
|
|
cmd.args[1] = 0x00;
|
|
|
cmd.args[2] = 0x01;
|
|
|
cmd.args[3] = 0x00;
|
|
@@ -667,8 +685,8 @@ static int cx24117_load_firmware(struct dvb_frontend *fe,
|
|
|
if (ret != 0)
|
|
|
goto error;
|
|
|
|
|
|
- /* CMD 13 */
|
|
|
- cmd.args[0] = CMD_MPEGCONFIG;
|
|
|
+ /* Global MPEG config */
|
|
|
+ cmd.args[0] = CMD_GLOBAL_MPEGCFG;
|
|
|
cmd.args[1] = 0x00;
|
|
|
cmd.args[2] = 0x00;
|
|
|
cmd.args[3] = 0x00;
|
|
@@ -679,9 +697,9 @@ static int cx24117_load_firmware(struct dvb_frontend *fe,
|
|
|
if (ret != 0)
|
|
|
goto error;
|
|
|
|
|
|
- /* CMD 14 */
|
|
|
+ /* MPEG config for each demod */
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
- cmd.args[0] = CMD_TUNERINIT;
|
|
|
+ cmd.args[0] = CMD_MPEGCFG;
|
|
|
cmd.args[1] = (u8) i;
|
|
|
cmd.args[2] = 0x00;
|
|
|
cmd.args[3] = 0x05;
|
|
@@ -699,8 +717,8 @@ static int cx24117_load_firmware(struct dvb_frontend *fe,
|
|
|
cx24117_writereg(state, 0xcf, 0x00);
|
|
|
cx24117_writereg(state, 0xe5, 0x04);
|
|
|
|
|
|
- /* Firmware CMD 35: Get firmware version */
|
|
|
- cmd.args[0] = CMD_UPDFWVERS;
|
|
|
+ /* Get firmware version */
|
|
|
+ cmd.args[0] = CMD_FWVERSION;
|
|
|
cmd.len = 2;
|
|
|
for (i = 0; i < 4; i++) {
|
|
|
cmd.args[1] = i;
|
|
@@ -779,8 +797,8 @@ static int cx24117_read_signal_strength(struct dvb_frontend *fe,
|
|
|
u8 reg = (state->demod == 0) ?
|
|
|
CX24117_REG_SSTATUS0 : CX24117_REG_SSTATUS1;
|
|
|
|
|
|
- /* Firmware CMD 1A */
|
|
|
- cmd.args[0] = 0x1a;
|
|
|
+ /* Read AGC accumulator register */
|
|
|
+ cmd.args[0] = CMD_GET_AGCACC;
|
|
|
cmd.args[1] = (u8) state->demod;
|
|
|
cmd.len = 2;
|
|
|
ret = cx24117_cmd_execute(fe, &cmd);
|
|
@@ -899,8 +917,8 @@ static int cx24117_set_voltage(struct dvb_frontend *fe,
|
|
|
voltage == SEC_VOLTAGE_18 ? "SEC_VOLTAGE_18" :
|
|
|
"SEC_VOLTAGE_OFF");
|
|
|
|
|
|
- /* CMD 32 */
|
|
|
- cmd.args[0] = 0x32;
|
|
|
+ /* Set GPIO direction */
|
|
|
+ cmd.args[0] = CMD_SET_GPIODIR;
|
|
|
cmd.args[1] = reg;
|
|
|
cmd.args[2] = reg;
|
|
|
cmd.len = 3;
|
|
@@ -910,8 +928,8 @@ static int cx24117_set_voltage(struct dvb_frontend *fe,
|
|
|
|
|
|
if ((voltage == SEC_VOLTAGE_13) ||
|
|
|
(voltage == SEC_VOLTAGE_18)) {
|
|
|
- /* CMD 33 */
|
|
|
- cmd.args[0] = 0x33;
|
|
|
+ /* Set GPIO logic level */
|
|
|
+ cmd.args[0] = CMD_SET_GPIOOUT;
|
|
|
cmd.args[1] = reg;
|
|
|
cmd.args[2] = reg;
|
|
|
cmd.len = 3;
|
|
@@ -926,7 +944,7 @@ static int cx24117_set_voltage(struct dvb_frontend *fe,
|
|
|
/* Wait for voltage/min repeat delay */
|
|
|
msleep(100);
|
|
|
|
|
|
- /* CMD 22 - CMD_LNBDCLEVEL */
|
|
|
+ /* Set 13V/18V select pin */
|
|
|
cmd.args[0] = CMD_LNBDCLEVEL;
|
|
|
cmd.args[1] = state->demod ? 0 : 1;
|
|
|
cmd.args[2] = (voltage == SEC_VOLTAGE_18 ? 0x01 : 0x00);
|
|
@@ -935,7 +953,7 @@ static int cx24117_set_voltage(struct dvb_frontend *fe,
|
|
|
/* Min delay time before DiSEqC send */
|
|
|
msleep(20);
|
|
|
} else {
|
|
|
- cmd.args[0] = 0x33;
|
|
|
+ cmd.args[0] = CMD_SET_GPIOOUT;
|
|
|
cmd.args[1] = 0x00;
|
|
|
cmd.args[2] = reg;
|
|
|
cmd.len = 3;
|
|
@@ -968,8 +986,7 @@ static int cx24117_set_tone(struct dvb_frontend *fe,
|
|
|
msleep(20);
|
|
|
|
|
|
/* Set the tone */
|
|
|
- /* CMD 23 - CMD_SET_TONE */
|
|
|
- cmd.args[0] = CMD_SET_TONE;
|
|
|
+ cmd.args[0] = CMD_LNBPCBCONFIG;
|
|
|
cmd.args[1] = (state->demod ? 0 : 1);
|
|
|
cmd.args[2] = 0x00;
|
|
|
cmd.args[3] = 0x00;
|
|
@@ -1231,8 +1248,8 @@ static int cx24117_initfe(struct dvb_frontend *fe)
|
|
|
|
|
|
mutex_lock(&state->priv->fe_lock);
|
|
|
|
|
|
- /* Firmware CMD 36: Power config */
|
|
|
- cmd.args[0] = CMD_TUNERSLEEP;
|
|
|
+ /* Set sleep mode off */
|
|
|
+ cmd.args[0] = CMD_SET_SLEEPMODE;
|
|
|
cmd.args[1] = (state->demod ? 1 : 0);
|
|
|
cmd.args[2] = 0;
|
|
|
cmd.len = 3;
|
|
@@ -1244,8 +1261,8 @@ static int cx24117_initfe(struct dvb_frontend *fe)
|
|
|
if (ret != 0)
|
|
|
goto exit;
|
|
|
|
|
|
- /* CMD 3C */
|
|
|
- cmd.args[0] = 0x3c;
|
|
|
+ /* Set BER control */
|
|
|
+ cmd.args[0] = CMD_BERCTRL;
|
|
|
cmd.args[1] = (state->demod ? 1 : 0);
|
|
|
cmd.args[2] = 0x10;
|
|
|
cmd.args[3] = 0x10;
|
|
@@ -1254,8 +1271,8 @@ static int cx24117_initfe(struct dvb_frontend *fe)
|
|
|
if (ret != 0)
|
|
|
goto exit;
|
|
|
|
|
|
- /* CMD 34 */
|
|
|
- cmd.args[0] = 0x34;
|
|
|
+ /* Set RS correction (enable/disable) */
|
|
|
+ cmd.args[0] = CMD_ENABLERSCORR;
|
|
|
cmd.args[1] = (state->demod ? 1 : 0);
|
|
|
cmd.args[2] = CX24117_OCC;
|
|
|
cmd.len = 3;
|
|
@@ -1278,8 +1295,8 @@ static int cx24117_sleep(struct dvb_frontend *fe)
|
|
|
dev_dbg(&state->priv->i2c->dev, "%s() demod%d\n",
|
|
|
__func__, state->demod);
|
|
|
|
|
|
- /* Firmware CMD 36: Power config */
|
|
|
- cmd.args[0] = CMD_TUNERSLEEP;
|
|
|
+ /* Set sleep mode on */
|
|
|
+ cmd.args[0] = CMD_SET_SLEEPMODE;
|
|
|
cmd.args[1] = (state->demod ? 1 : 0);
|
|
|
cmd.args[2] = 1;
|
|
|
cmd.len = 3;
|
|
@@ -1558,7 +1575,8 @@ static int cx24117_get_frontend(struct dvb_frontend *fe)
|
|
|
|
|
|
u8 buf[0x1f-4];
|
|
|
|
|
|
- cmd.args[0] = 0x1c;
|
|
|
+ /* Read current tune parameters */
|
|
|
+ cmd.args[0] = CMD_GETCTLACC;
|
|
|
cmd.args[1] = (u8) state->demod;
|
|
|
cmd.len = 2;
|
|
|
ret = cx24117_cmd_execute(fe, &cmd);
|