All of lore.kernel.org
 help / color / mirror / Atom feed
From: Malcolm Priestley <tvboxspy@gmail.com>
To: linux-media@vger.kernel.org
Subject: [PATCH 2/2] DM04/QQBOX v1.86 PID filtering changes
Date: Fri, 22 Apr 2011 10:20:57 +0100	[thread overview]
Message-ID: <1303464057.2525.9.camel@localhost> (raw)

 Improve PID filtering and program register 20 correctly.
 Make sure stream_on message is sent if streaming is off, otherwise
 PIDs are not registered.
 Move mutex outside lme2510_enable_pid.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
 drivers/media/dvb/dvb-usb/lmedm04.c |   37 ++++++++++++++++++++++------------
 1 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/drivers/media/dvb/dvb-usb/lmedm04.c b/drivers/media/dvb/dvb-usb/lmedm04.c
index aa9a6ff..ab94a62 100644
--- a/drivers/media/dvb/dvb-usb/lmedm04.c
+++ b/drivers/media/dvb/dvb-usb/lmedm04.c
@@ -127,6 +127,7 @@ struct lme2510_state {
 	u8 i2c_tuner_gate_r;
 	u8 i2c_tuner_addr;
 	u8 stream_on;
+	u8 pid_size;
 	void *buffer;
 	struct urb *lme_urb;
 	void *usb_buffer;
@@ -224,29 +225,28 @@ static int lme2510_enable_pid(struct dvb_usb_device *d, u8 index, u16 pid_out)
 	static u8 pid_buff[] = LME_ZERO_PID;
 	static u8 rbuf[1];
 	u8 pid_no = index * 2;
+	u8 pid_len = pid_no + 2;
 	int ret = 0;
 	deb_info(1, "PID Setting Pid %04x", pid_out);
 
+	if (st->pid_size == 0)
+		ret |= lme2510_stream_restart(d);
+
 	pid_buff[2] = pid_no;
 	pid_buff[3] = (u8)pid_out & 0xff;
 	pid_buff[4] = pid_no + 1;
 	pid_buff[5] = (u8)(pid_out >> 8);
 
-	/* wait for i2c mutex */
-	ret = mutex_lock_interruptible(&d->i2c_mutex);
-	if (ret < 0) {
-		ret = -EAGAIN;
-		return ret;
-	}
+	if (pid_len > st->pid_size)
+		st->pid_size = pid_len;
+	pid_buff[7] = 0x80 + st->pid_size;
 
 	ret |= lme2510_usb_talk(d, pid_buff ,
 		sizeof(pid_buff) , rbuf, sizeof(rbuf));
 
-	if (st->stream_on & 1)
+	if (st->stream_on)
 		ret |= lme2510_stream_restart(d);
 
-	mutex_unlock(&d->i2c_mutex);
-
 	return ret;
 }
 
@@ -362,18 +362,23 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap)
 
 static int lme2510_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
 {
+	struct lme2510_state *st = adap->dev->priv;
 	static u8 clear_pid_reg[] = LME_CLEAR_PID;
 	static u8 rbuf[1];
-	int ret = 0;
+	int ret;
 
 	deb_info(1, "PID Clearing Filter");
 
 	ret = mutex_lock_interruptible(&adap->dev->i2c_mutex);
+	if (ret < 0)
+		return -EAGAIN;
 
 	if (!onoff)
 		ret |= lme2510_usb_talk(adap->dev, clear_pid_reg,
 			sizeof(clear_pid_reg), rbuf, sizeof(rbuf));
 
+	st->pid_size = 0;
+
 	mutex_unlock(&adap->dev->i2c_mutex);
 
 	return 0;
@@ -388,8 +393,14 @@ static int lme2510_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
 		pid, index, onoff);
 
 	if (onoff)
-		if (!pid_filter)
-			ret = lme2510_enable_pid(adap->dev, index, pid);
+		if (!pid_filter) {
+			ret = mutex_lock_interruptible(&adap->dev->i2c_mutex);
+			if (ret < 0)
+				return -EAGAIN;
+			ret |= lme2510_enable_pid(adap->dev, index, pid);
+			mutex_unlock(&adap->dev->i2c_mutex);
+	}
+
 
 	return ret;
 }
@@ -1303,5 +1314,5 @@ module_exit(lme2510_module_exit);
 
 MODULE_AUTHOR("Malcolm Priestley <tvboxspy@gmail.com>");
 MODULE_DESCRIPTION("LME2510(C) DVB-S USB2.0");
-MODULE_VERSION("1.85");
+MODULE_VERSION("1.86");
 MODULE_LICENSE("GPL");
-- 
1.7.4.1


                 reply	other threads:[~2011-04-22  9:21 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1303464057.2525.9.camel@localhost \
    --to=tvboxspy@gmail.com \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.