--- /dev/null
+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