Commit 352a587c authored by Malcolm Priestley's avatar Malcolm Priestley Committed by Mauro Carvalho Chehab

[media] DiSEqC bug fixed for stv0288 based interfaces

Fixed problem with DiSEqC communication. The message was wrongly modulated,
so the DiSEqC switch was not work.

This patch fixes DiSEqC messages, simple tone burst and tone on/off.
I verified it with osciloscope against the DiSEqC documentation.

Interface: PCI DVB-S TV tuner TeVii S420
Kernel: 2.6.32-24-generic (UBUNTU 10.4)
Signed-off-by: default avatarJosef Pavlik <josef@pavlik.it>
Tested-by: default avatarMalcolm Priestley <tvboxspy@gmail.com>
Cc: Igor M. Liplianin <liplianin@me.by>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 0e44dec1
......@@ -6,6 +6,8 @@
Copyright (C) 2008 Igor M. Liplianin <liplianin@me.by>
Removed stb6000 specific tuner code and revised some
procedures.
2010-09-01 Josef Pavlik <josef@pavlik.it>
Fixed diseqc_msg, diseqc_burst and set_tone problems
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -156,14 +158,13 @@ static int stv0288_send_diseqc_msg(struct dvb_frontend *fe,
stv0288_writeregI(state, 0x09, 0);
msleep(30);
stv0288_writeregI(state, 0x05, 0x16);
stv0288_writeregI(state, 0x05, 0x12);/* modulated mode, single shot */
for (i = 0; i < m->msg_len; i++) {
if (stv0288_writeregI(state, 0x06, m->msg[i]))
return -EREMOTEIO;
msleep(12);
}
msleep(m->msg_len*12);
return 0;
}
......@@ -174,13 +175,14 @@ static int stv0288_send_diseqc_burst(struct dvb_frontend *fe,
dprintk("%s\n", __func__);
if (stv0288_writeregI(state, 0x05, 0x16))/* burst mode */
if (stv0288_writeregI(state, 0x05, 0x03))/* burst mode, single shot */
return -EREMOTEIO;
if (stv0288_writeregI(state, 0x06, burst == SEC_MINI_A ? 0x00 : 0xff))
return -EREMOTEIO;
if (stv0288_writeregI(state, 0x06, 0x12))
msleep(15);
if (stv0288_writeregI(state, 0x05, 0x12))
return -EREMOTEIO;
return 0;
......@@ -192,18 +194,19 @@ static int stv0288_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
switch (tone) {
case SEC_TONE_ON:
if (stv0288_writeregI(state, 0x05, 0x10))/* burst mode */
if (stv0288_writeregI(state, 0x05, 0x10))/* cont carrier */
return -EREMOTEIO;
return stv0288_writeregI(state, 0x06, 0xff);
break;
case SEC_TONE_OFF:
if (stv0288_writeregI(state, 0x05, 0x13))/* burst mode */
if (stv0288_writeregI(state, 0x05, 0x12))/* burst mode off*/
return -EREMOTEIO;
return stv0288_writeregI(state, 0x06, 0x00);
break;
default:
return -EINVAL;
}
return 0;
}
static u8 stv0288_inittab[] = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment