diff mbox

DiSEqC bug fixed for stv0288 based interfaces

Message ID 7149F387-D819-442B-8E7B-BD135644A0E0@pavlik.it (mailing list archive)
State Superseded
Headers show

Commit Message

Josef Pavlik Sept. 12, 2010, 5:03 p.m. UTC
None
diff mbox

Patch

diff --git a/drivers/media/dvb/frontends/stv0288.c b/drivers/media/dvb/frontends/stv0288.c
index 2930a5d..6cd442e 100644
--- a/drivers/media/dvb/frontends/stv0288.c
+++ b/drivers/media/dvb/frontends/stv0288.c
@@ -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 */
-		return -EREMOTEIO;
-
-	if (stv0288_writeregI(state, 0x06, burst == SEC_MINI_A ? 0x00 : 0xff))
+    if (stv0288_writeregI(state, 0x05, 0x03)) /* simple tone 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))/* burst mode, continuous 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[] = {