]> www.vanbest.org Git - sasc-ng.git/commitdiff
add cwidx patch for dvb-v4l driver
authorleslie <unknown>
Thu, 18 Sep 2008 13:14:40 +0000 (21:14 +0800)
committerleslie <unknown>
Thu, 18 Sep 2008 13:14:40 +0000 (21:14 +0800)
patches/dvb-cwidx-v4l.diff [new file with mode: 0644]

diff --git a/patches/dvb-cwidx-v4l.diff b/patches/dvb-cwidx-v4l.diff
new file mode 100644 (file)
index 0000000..4941473
--- /dev/null
@@ -0,0 +1,94 @@
+diff -ruN linux/drivers/media/dvb/ttpci/av7110_ca.c linux/drivers/media/dvb/ttpci/av7110_ca.c\r
+--- linux/drivers/media/dvb/ttpci/av7110_ca.c\r
++++ linux/drivers/media/dvb/ttpci/av7110_ca.c\r
+@@ -35,6 +35,10 @@\r
+ #include <linux/timer.h>\r
+ #include <linux/poll.h>\r
+\r
++#ifndef LINUX_VERSION_CODE\r
++#include <linux/version.h>\r
++#endif\r
++\r
+ #include "av7110.h"\r
+ #include "av7110_hw.h"\r
+ #include "av7110_ca.h"\r
+@@ -287,10 +291,31 @@\r
+        }\r
+\r
+        case CA_GET_MSG:\r
+-               break;\r
++        {\r
++                ca_pid_t *arg = (ca_pid_t*) parg;\r
++                u16 buf[4], res[2];\r
++                buf[0]=0x0745;\r
++                buf[1]=2;\r
++                buf[2]=arg->pid >> 16;\r
++                buf[3]=arg->pid & 0xFFFF;\r
++                av7110_fw_request(av7110,buf,sizeof(buf),res,2);\r
++                arg->index=(res[0]<<16) + res[1];\r
++                break;\r
++        }\r
+\r
+        case CA_SEND_MSG:\r
+-               break;\r
++        {\r
++                ca_pid_t *arg = (ca_pid_t*) parg;\r
++                u16 buf[6], res[2];\r
++                buf[0]=0x0746;\r
++                buf[1]=4;\r
++                buf[2]=arg->pid >> 16;\r
++                buf[3]=arg->pid & 0xFFFF;\r
++                buf[4]=arg->index >> 16;\r
++                buf[5]=arg->index & 0xFFFF;\r
++                av7110_fw_request(av7110,buf,sizeof(buf),res,2);\r
++                break;\r
++        }\r
+\r
+        case CA_GET_DESCR_INFO:\r
+        {\r
+@@ -319,6 +344,45 @@\r
+                break;\r
+        }\r
+\r
++        case CA_SET_PID:\r
++        {\r
++                int handle;\r
++                ca_pid_t *pid = (ca_pid_t*) parg;\r
++\r
++                if (pid->pid >= 0x1fff)\r
++                        return -EINVAL;\r
++                if (pid->index < 0 || pid->index >= 16)\r
++                        return -EINVAL;\r
++\r
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16))\r
++                if (down_interruptible (&av7110->demux.mutex))\r
++#else\r
++                if (mutex_lock_interruptible (&av7110->demux.mutex))\r
++#endif\r
++                       return -ERESTARTSYS;\r
++\r
++                for(handle=0; handle<32; handle++) {\r
++                  struct dvb_demux_filter *dvbdmxfilter=av7110->handle2filter[handle];\r
++                  if(dvbdmxfilter) {\r
++                    struct dvb_demux_feed *feed=dvbdmxfilter->feed;\r
++                    if(feed && feed->state==DMX_STATE_GO && feed->pid==pid->pid) {\r
++                      /* we map the new cmd to CacheError as it's not\r
++                         implemented anyways, i.e. free. */\r
++                      av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, CacheError, 1,\r
++                                  (handle<<8)|pid->index); /* hw handle / cw index*/\r
++                      break;\r
++                      }\r
++                    }\r
++                  }\r
++\r
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16))\r
++                up(&av7110->demux.mutex);\r
++#else\r
++                mutex_unlock(&av7110->demux.mutex);\r
++#endif\r
++                break;\r
++        }\r
++\r
+        default:\r
+                return -EINVAL;\r
+        }\r