<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>TCOS project all GIT changes</title><link>http://www.tcosproject.org</link><description>Thin Client operating system</description><lastBuildDate>Sun, 05 Feb 2012 05:30:08 GMT</lastBuildDate><generator>PyRSS2Gen-1.0.0</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>[tcos.git] Use a global LIB_MULTIARCH var</title><link>http://tcosproject.org/cgit/tcos.git/commit/?id=25d04cd3cd35a391f64b304ea76dfd98dcc5123a</link><description>Use a global LIB_MULTIARCH var&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 25d04cd3cd35a391f64b304ea76dfd98dcc5123a&lt;br /&gt;Date: Thu, 02 Feb 2012 10:48:36 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcos.git/diff/?id=25d04cd3cd35a391f64b304ea76dfd98dcc5123a"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/bin/gentcos
+++ b/bin/gentcos
@@ -27,6 +27,12 @@ if [ $ID -ne 0 ]; then
  exit 1
 fi
 
+# Multiarch DIR
+LIB_MULTIARCH=/usr/lib/
+[ -e /usr/lib/i386-linux-gnu   ] &amp;&amp; LIB_MULTIARCH=/usr/lib/i386-linux-gnu/
+[ -e /usr/lib/x86_64-linux-gnu ] &amp;&amp; LIB_MULTIARCH=/usr/lib/x86_64-linux-gnu/
+export LIB_MULTIARCH
+
 . /etc/tcos/tcos.conf
 [ -e /var/lib/tcos/version.conf ] &amp;&amp; . /var/lib/tcos/version.conf
 . ${TCOS_DIR}/tcos-generation-functions.sh&lt;br /&gt;&lt;br /&gt;--- a/hooks-addons/08pcimodules
+++ b/hooks-addons/08pcimodules
@@ -5,3 +5,4 @@
 cpifexists /usr/bin/pcimodules        /bin/
 mv -f $DESTDIR/usr/lib/libz.so.1 $DESTDIR/lib/libz.so.1 2&gt;/dev/null
 mv -f $DESTDIR/usr/lib/libpci.so.3 $DESTDIR/lib/libpci.so.3 2&gt;/dev/null
+mv -f $DESTDIR/$LIB_MULTIARCH/libpci.so.3 $DESTDIR/lib/libpci.so.3 2&gt;/dev/null&lt;br /&gt;&lt;br /&gt;--- a/hooks-addons/50xorg
+++ b/hooks-addons/50xorg
@@ -173,10 +173,8 @@ if [ -e /usr/lib/mesa/libGL.so.1 ]; then
 fi
 
 # multiarch support
-[ -e /usr/lib/i386-linux-gnu/libGL.so.1 ] &amp;&amp; LIBGL_PATH=/usr/lib/i386-linux-gnu/
-[ -e /usr/lib/x86_64-linux-gnu/libGL.so.1 ] &amp;&amp; LIBGL_PATH=/usr/lib/x86_64-linux-gnu/
-[ -e /usr/lib/i386-linux-gnu/mesa/libGL.so.1 ] &amp;&amp; LIBGL_PATH=/usr/lib/i386-linux-gnu/mesa/
-[ -e /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 ] &amp;&amp; LIBGL_PATH=/usr/lib/x86_64-linux-gnu/mesa/
+[ -e $LIB_MULTIARCH/libGL.so.1 ] &amp;&amp; LIBGL_PATH=$LIB_MULTIARCH
+[ -e $LIB_MULTIARCH/mesa/libGL.so.1 ] &amp;&amp; LIBGL_PATH=$LIB_MULTIARCH/mesa/
 
 # delete vnc extension
 rm -f $DESTDIR/usr/lib/xorg/modules/extensions/libvnc.so&lt;br /&gt;&lt;br /&gt;--- a/hooks-addons/51dri
+++ b/hooks-addons/51dri
@@ -10,8 +10,7 @@
 #TCOS_XORG_DRI_MATROX=
 
 DRI_DIR=/usr/lib/dri/
-[ -d /usr/lib/i386-linux-gnu/dri/   ] &amp;&amp; DRI_DIR=/usr/lib/i386-linux-gnu/dri/
-[ -d /usr/lib/x86_64-linux-gnu/dri/ ] &amp;&amp; DRI_DIR=/usr/lib/x86_64-linux-gnu/dri/
+[ -d $LIB_MULTIARCH/dri ] &amp;&amp; DRI_DIR=$LIB_MULTIARCH/dri/
 
 mkdir -p ${DESTDIR}/${DRI_DIR}
 &lt;br /&gt;&lt;br /&gt;--- a/hooks-addons/clean_initramfs
+++ b/hooks-addons/clean_initramfs
@@ -105,10 +105,8 @@ create_link /usr/bin/mcopy /usr/bin/mmove
 create_link /usr/bin/mcopy /usr/bin/mmount
 create_link /usr/bin/mcopy /usr/bin/mtype
 
-create_link /usr/lib/libpci.so.3 /lib/libpci.so.3
-[ -e /lib/x86_64-linux-gnu/libpci.so.3 ] &amp;&amp; create_link /usr/lib/x86_64-linux-gnu/libpci.so.3 /lib/libpci.so.3
-[ -e /lib/i386-linux-gnu/libpci.so.3 ]   &amp;&amp; create_link /usr/lib/i386-linux-gnu/libpci.so.3   /lib/libpci.so.3
 
+create_link "$LIB_MULTIARCH/libpci.so.3" /lib/libpci.so.3
 create_link /usr/lib/libz.so.1 /lib/libz.so.1
 
 create_link /etc/console/boottime.kmap.gz /etc/boottime.kmap.gz&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>25d04cd3cd35a391f64b304ea76dfd98dcc5123a</guid><pubDate>Thu, 02 Feb 2012 10:48:36 GMT</pubDate></item><item><title>[tcos.git] Install conf/tcos.conf instead of conf/tcos.conf.etc</title><link>http://tcosproject.org/cgit/tcos.git/commit/?id=f6c5d6ff4dbdfdca1f560896f9936271f4ff24de</link><description>Install conf/tcos.conf instead of conf/tcos.conf.etc&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: f6c5d6ff4dbdfdca1f560896f9936271f4ff24de&lt;br /&gt;Date: Thu, 02 Feb 2012 10:47:56 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcos.git/diff/?id=f6c5d6ff4dbdfdca1f560896f9936271f4ff24de"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/Makefile
+++ b/Makefile
@@ -95,7 +95,7 @@ install:
 	chmod -x $(DESTDIR)$(TCOS_DIR)/scripts/tcos
 
 
-	install -m 640 conf/tcos.conf.etc $(DESTDIR)$(TCOS_CONF)/tcos.conf
+	install -m 640 conf/tcos.conf $(DESTDIR)$(TCOS_CONF)/tcos.conf
 
 	install -m 644 conf/version.conf $(DESTDIR)/var/lib/tcos/version.conf
 	sed -i 's/__TCOS_VERSION__/$(VERSION)/g'       $(DESTDIR)/var/lib/tcos/version.conf&lt;br /&gt;&lt;br /&gt;--- a/conf/tcos.conf
+++ b/conf/tcos.conf
@@ -24,5 +24,16 @@ TCOS_KERNEL=
 
 TCOS_DEBUG=1
 
+# Net boot menu (set to 1 to enable)
+TCOS_NETBOOT_MENU=
+
+# Net boot menu VESA MODE (not work with all BIOS)
+TCOS_NETBOOT_MENU_VESA=1
+
+# Hide install and update options (set to empty to show options)
+TCOS_NETBOOT_HIDE_INSTALL=1
+
 # template to use
 TCOS_TEMPLATE=tcos.conf.all
+
+&lt;br /&gt;&lt;br /&gt;--- a/conf/tcos.conf.etc
+++ /dev/null
@@ -1,35 +0,0 @@
-# some build vars
-TCOS_DIR=/usr/share/tcos
-TCOS_BINS=/usr/lib/tcos
-TFTP_DIR=/var/lib/tcos/tftp
-TCOS_CONF=/etc/tcos
-TCOS_VAR=/var/lib/tcos
-TCOS_PKG_CACHE=/var/cache/tcos/packages
-TCOS_CHROOT=/var/lib/tcos/chroot
-TFTP_MSG=tcos.msg
-TFTP_MSG_HELP1=help.msg
-TFTP_MSG_HELP2=help2.msg
-TFTP_LOGO_LSS=logo.lss
-TFTP_LOGO_JPG=pxetcos.jpg
-TCOS_PXECFG=pxelinux.cfg.tpl
-TCOS_PXECFG_MENU=pxelinux.menu.cfg.tpl
-TCOS_TEMPLATES_DIR=/usr/share/tcos/templates
-TCOS_TEMPLATES_ETC=/etc/tcos/templates
-
-ISOS="/var/lib/tcos/isos"
-VOLUMENAME="TCOS boot cd"
-DISTRO="TCOS"
-
-TCOS_KERNEL=
-
-# Net boot menu (set to 1 to enable)
-TCOS_NETBOOT_MENU=
-
-# Net boot menu VESA MODE (not work with all BIOS)
-TCOS_NETBOOT_MENU_VESA=1
-
-# Hide install and update options (set to empty to show options)
-TCOS_NETBOOT_HIDE_INSTALL=1
-
-# template to use
-TCOS_TEMPLATE=tcos.conf.all&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>f6c5d6ff4dbdfdca1f560896f9936271f4ff24de</guid><pubDate>Thu, 02 Feb 2012 10:47:56 GMT</pubDate></item><item><title>[tcos.git] Simplify grep commands</title><link>http://tcosproject.org/cgit/tcos.git/commit/?id=7f9a51cc3fa64163cdc87203ad7756e68ee7d0c5</link><description>Simplify grep commands&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 7f9a51cc3fa64163cdc87203ad7756e68ee7d0c5&lt;br /&gt;Date: Wed, 01 Feb 2012 14:38:09 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcos.git/diff/?id=7f9a51cc3fa64163cdc87203ad7756e68ee7d0c5"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/bin/gentcos
+++ b/bin/gentcos
@@ -488,8 +488,7 @@ check_xfs() {
         echo "        and configure to allow remote connections. See README."
         echo ""
     else
-      xfs_config=$(grep -c "^no-listen" /etc/X11/fs/config 2&gt;/dev/null)
-      if [ ! -e /etc/tcos/chroot ] &amp;&amp; [ $xfs_config != 0 ]; then
+      if [ ! -e /etc/tcos/chroot ] &amp;&amp; grep -q "^no-listen" /etc/X11/fs/config ; then
         echo "WARNING:"
         echo "        TCOS need a network font server. Please edit /etc/X11/fs/config"
         echo "        search for no-listen = tcp line and put like this:"
@@ -505,7 +504,7 @@ link_vmlinuz() {
        if [ -f $TCOS_VMLINUZ ] ; then
           vmlinuz=$(basename ${TCOS_VMLINUZ} )
           TCOS_KERNEL=${vmlinuz#vmlinuz-}
-           if [ $(find  ${TFTP_DIR}/*${vmlinuz}* 2&gt; /dev/null | grep -c vmlinuz) = 0 ]; then
+           if ! find  ${TFTP_DIR}/*${vmlinuz}* 2&gt; /dev/null | grep -q vmlinuz ; then
               # no link, create
               echo "Linking ${TCOS_VMLINUZ} in ${TFTP_DIR}/"
               ln -s $TCOS_VMLINUZ ${TFTP_DIR}/
@@ -513,7 +512,7 @@ link_vmlinuz() {
        elif [ -f /boot/${TCOS_VMLINUZ} ]; then
           vmlinuz=${TCOS_VMLINUZ}
           TCOS_KERNEL=${vmlinuz#vmlinuz-}
-           if [ $(find  ${TFTP_DIR}/*${vmlinuz}* 2&gt; /dev/null | grep -c vmlinuz) = 0 ]; then
+           if ! find  ${TFTP_DIR}/*${vmlinuz}* 2&gt; /dev/null | grep -q vmlinuz ; then
               # no link, create
               echo "Linking ${TCOS_VMLINUZ} in ${TFTP_DIR}/"
               ln -s /boot/$TCOS_VMLINUZ ${TFTP_DIR}/&lt;br /&gt;&lt;br /&gt;--- a/debian/tcos-standalone.init
+++ b/debian/tcos-standalone.init
@@ -53,7 +53,7 @@ ETHTOOL=""
 do_start()
 {
         # don't start if start-stop-daemon is not a ELF file (installing in chroot)
-        if [ $(file /sbin/start-stop-daemon |grep -c ELF) != "1" ] ; then
+        if ! file /sbin/start-stop-daemon |grep -q ELF ; then
           log_begin_msg "Fake start-stop-daemon detected, not starting "
           return 0
         fi&lt;br /&gt;&lt;br /&gt;--- a/hooks-addons/00main
+++ b/hooks-addons/00main
@@ -61,7 +61,7 @@ if [ -e /sbin/start-stop-daemon.original ]; then
   copy_exec /sbin/start-stop-daemon.original  /sbin/
   rm -f $DESTDIR/sbin/start-stop-daemon.original
   cp -a /sbin/start-stop-daemon.original $DESTDIR/sbin/start-stop-daemon
-  if [ "$(file ${DESTDIR}/sbin/start-stop-daemon | grep -c ELF)" = "0" ]; then
+  if ! file ${DESTDIR}/sbin/start-stop-daemon | grep -q ELF ; then
     _echo "   * WARNING:"
     _echo "          /sbin/start-stop-daemon is not a ELF (binary) file"
     _echo "          Some apps will not work."
@@ -71,7 +71,7 @@ elif [ -e /sbin/start-stop-daemon.REAL ]; then
   rm -f $DESTDIR/sbin/start-stop-daemon.REAL
   rm -f $DESTDIR/sbin/start-stop-daemon
   cp -a /sbin/start-stop-daemon.REAL $DESTDIR/sbin/start-stop-daemon
-  if [ "$(file ${DESTDIR}/sbin/start-stop-daemon | grep -c ELF)" = "0" ]; then
+  if ! file ${DESTDIR}/sbin/start-stop-daemon | grep -q ELF ; then
     _echo "   * WARNING:"
     _echo "          /sbin/start-stop-daemon is not a ELF (binary) file"
     _echo "          Some apps will not work."&lt;br /&gt;&lt;br /&gt;--- a/hooks-addons/40etc2300
+++ b/hooks-addons/40etc2300
@@ -34,7 +34,7 @@ chmod +x ${DESTDIR}/scripts/tcos-bottom/15etc2300
 stat_before
  
   manual_add_modules sis5513
-  if [ "$(modprobe --set-version="${TCOS_KERNEL}" -l| grep -c snd-sis7019)" = "0" ]; then
+  if modprobe --set-version="${TCOS_KERNEL}" -l| grep -q snd-sis7019 ; then
     manual_add_modules ac97_codec
     manual_add_modules sis7019
   else&lt;br /&gt;&lt;br /&gt;--- a/hooks-addons/96modules
+++ b/hooks-addons/96modules
@@ -62,7 +62,7 @@ chmod +x ${DESTDIR}/scripts/init-top/tcos_modules
 
 
 # add options to snd-hda-intel
-if [ "$(cat ${DESTDIR}/etc/modprobe.d/alsa-base* | grep -c snd-hda-intel)" = "0" ]; then
+if ! grep -q snd-hda-intel ${DESTDIR}/etc/modprobe.d/alsa-base* ; then
    [ -e ${DESTDIR}/etc/modprobe.d/alsa-base ] &amp;&amp; \
 	mv ${DESTDIR}/etc/modprobe.d/alsa-base ${DESTDIR}/etc/modprobe.d/alsa-base.conf
    echo "options snd-hda-intel model=auto" &gt;&gt; ${DESTDIR}/etc/modprobe.d/alsa-base.conf&lt;br /&gt;&lt;br /&gt;--- a/hooks/tcosbin
+++ b/hooks/tcosbin
@@ -86,7 +86,7 @@ MKSQUASHFS=mksquashfs
 
 if [ -z $TCOS_DISABLE_SQUASHFS ]; then
   # create usr.squashfs
-  if [ $(env | grep -c ^TCOS_SUFFIX) = 1 ]; then
+  if env | grep -q ^TCOS_SUFFIX ; then
     TCOS_SUFFIX=$(env | grep ^TCOS_SUFFIX | awk -F "=" '{print $2}')
     echo "SQUASHFS_FILE=\"usr${TCOS_SUFFIX}-${version}.squashfs\"" &gt;&gt; $DESTDIR/conf/tcos.conf
   fi
@@ -111,7 +111,7 @@ if [ -z $TCOS_DISABLE_SQUASHFS ]; then
 
   # overwrite TCOS_SQUASHFS from shell env var
   # this allow to create cdrom with usr.squashfs embedded
-  if [ $(env | grep -c ^TCOS_SQUASHFS) = 1 ]; then
+  if env | grep -q ^TCOS_SQUASHFS ; then
     TCOS_SQUASHFS=$(env | grep ^TCOS_SQUASHFS | awk -F "=" '{print $2}')
     _echo "DEBUG: overwrite TCOS_SQUASHFS=$TCOS_SQUASHFS"
   else
@@ -221,7 +221,7 @@ fi
 
 
 # read shell env variables to search TCOS_ALL_MODULES
-if [ $(env | grep -c ^TCOS_ALL_MODULES) = 1 ]; then
+if env | grep -q ^TCOS_ALL_MODULES ; then
     TCOS_ALL_MODULES=$(env | grep ^TCOS_ALL_MODULES | awk -F "=" '{print $2}')
 fi
 &lt;br /&gt;&lt;br /&gt;--- a/scripts/tcos-top/20mountnfs
+++ b/scripts/tcos-top/20mountnfs
@@ -86,20 +86,7 @@ fi # end of NFS_MODE
 
 log_begin_msg "Remounting root in RW mode"
 
-  mkdir -p /mnt/ram
-  mount -t tmpfs -o size=5m tmpfs /mnt/ram
-
-  if [ $(grep -c unionfs /proc/modules) = 0 ] &amp;&amp; [ $(grep -c aufs /proc/modules) != 0 ]; then
-       mount -t aufs -o br:/mnt/ram:/mnt/nfs none /root &gt;&gt; /tmp/initramfs.debug 2&gt;&amp;1
-  else
-
-     # NFS mounts must have nfsro instead of ro (see man unionfs) with kernel &lt; 2.6.22
-     if [ "$(uname -r| awk -F"[.|-]" '{print $3}')" -lt 22 ] &amp;&amp; [ "${NFS_MODE}" != "nbd" ] ; then
-       mount -t unionfs -o dirs=/mnt/ram=rw:/mnt/nfs=nfsro unionfs /root
-     else
-       mount -t unionfs -o dirs=/mnt/ram=rw:/mnt/nfs=ro unionfs /root
-     fi
-  fi
+  mount_unionfs /mnt/ram /mnt/nfs /root
 
 log_end_msg $?
 &lt;br /&gt;&lt;br /&gt;--- a/xmlrpc/sh/devicesctl.sh
+++ b/xmlrpc/sh/devicesctl.sh
@@ -116,12 +116,12 @@ fi
 
 if [ "$1" = "--mount" ]; then
   export DISPLAY=:0
-  if [ "$(xprop -root | grep -c LTSPFS)" = "0" ]; then
+  if ! xprop -root | grep -q LTSPFS ; then
       [ -x /bin/ltspfs-set-xprop ] &amp;&amp; /bin/ltspfs-set-xprop now &gt;&gt; /tmp/initramfs.debug 2&gt;&amp;1
   fi
   if [ "$2" != "" ]; then
       mnt=$(basename $2)
-      if [ $(grep -c /mnt/$mnt /proc/mounts) != 0 ]; then
+      if grep -q /mnt/$mnt /proc/mounts ; then
         echo -n "/mnt/$mnt"
         return
       fi&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>7f9a51cc3fa64163cdc87203ad7756e68ee7d0c5</guid><pubDate>Wed, 01 Feb 2012 14:38:09 GMT</pubDate></item><item><title>[tcos.git] hooks-addons/clean_initramfs: multiarch with libpci3</title><link>http://tcosproject.org/cgit/tcos.git/commit/?id=c021d73dd9d67342d22303db7406fd5423a79174</link><description>hooks-addons/clean_initramfs: multiarch with libpci3&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: c021d73dd9d67342d22303db7406fd5423a79174&lt;br /&gt;Date: Wed, 01 Feb 2012 14:37:51 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcos.git/diff/?id=c021d73dd9d67342d22303db7406fd5423a79174"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/hooks-addons/clean_initramfs
+++ b/hooks-addons/clean_initramfs
@@ -106,6 +106,9 @@ create_link /usr/bin/mcopy /usr/bin/mmount
 create_link /usr/bin/mcopy /usr/bin/mtype
 
 create_link /usr/lib/libpci.so.3 /lib/libpci.so.3
+[ -e /lib/x86_64-linux-gnu/libpci.so.3 ] &amp;&amp; create_link /usr/lib/x86_64-linux-gnu/libpci.so.3 /lib/libpci.so.3
+[ -e /lib/i386-linux-gnu/libpci.so.3 ]   &amp;&amp; create_link /usr/lib/i386-linux-gnu/libpci.so.3   /lib/libpci.so.3
+
 create_link /usr/lib/libz.so.1 /lib/libz.so.1
 
 create_link /etc/console/boottime.kmap.gz /etc/boottime.kmap.gz&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>c021d73dd9d67342d22303db7406fd5423a79174</guid><pubDate>Wed, 01 Feb 2012 14:37:51 GMT</pubDate></item><item><title>[tcos.git] Add overlayfs as aufs alternative</title><link>http://tcosproject.org/cgit/tcos.git/commit/?id=2d7053dd5658bbd58e73232c4609f4e7aec4e068</link><description>Add overlayfs as aufs alternative&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 2d7053dd5658bbd58e73232c4609f4e7aec4e068&lt;br /&gt;Date: Sun, 29 Jan 2012 15:29:03 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcos.git/diff/?id=2d7053dd5658bbd58e73232c4609f4e7aec4e068"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/bin/gentcos
+++ b/bin/gentcos
@@ -453,7 +453,7 @@ alert_need_module() {
 
 
 check_modules() {
-    NEED_MODULES="aufs|unionfs squashfs"
+    NEED_MODULES="aufs|overlayfs|unionfs squashfs"
 
     for _module in ${NEED_MODULES}; do
        have_module=0&lt;br /&gt;&lt;br /&gt;--- a/conf/tcos-modules.conf
+++ b/conf/tcos-modules.conf
@@ -15,7 +15,7 @@ CORE_MODULES="${CORE_MODULES} ide-gd_mod ide-cd_mod"
 USB_MODULES="ehci-hcd ohci-hcd uhci-hcd sl811-hcd usbcore usb-storage scsi_mod sr_mod sd_mod"
 
 # live modules ( some off them are not essential )
-LIVE_MODULES="loop unionfs aufs squashfs nls_base nls_utf8 nls_cp437 nls_iso8859-1 nls_cp850"
+LIVE_MODULES="loop unionfs overlayfs aufs squashfs nls_base nls_utf8 nls_cp437 nls_iso8859-1 nls_cp850"
 
 # network modules (vmware and 3Com, Realtek, VIA) you can edit this !!!
 NETWORK_MODULES="pcnet32 3c59x 8139cp 8139too via-rhine r8101"&lt;br /&gt;&lt;br /&gt;--- a/conf/tcos-run-functions.sh
+++ b/conf/tcos-run-functions.sh
@@ -211,6 +211,29 @@ mount_aufs() {
    mount -t aufs -o br:${ramdisk}:${rofs} none ${rwfs} &gt;&gt; /tmp/initramfs.debug 2&gt;&amp;1
 }
 
+mount_overlayfs() {
+  ramdisk=$1
+  rofs=$2
+  rwfs=$3
+  #
+  # example:
+  # mount_overlayfs /mnt/ram   /.usr /usr
+  #                    RAM      RO    RW
+  #
+  _log "OVERLAYFS Creating ramdisk ${ramdisk} of 2 Mb"
+   mkdir -p ${ramdisk} &gt;&gt; /tmp/initramfs.debug 2&gt;&amp;1
+   mount -t tmpfs -o "size=2m" tmpfs ${ramdisk} &gt;&gt; /tmp/initramfs.debug 2&gt;&amp;1
+
+   _log "OVERLAYFS Moving ${rwfs} squashfs to ${rofs}"
+   # move /usr
+   mkdir -p ${rofs} &gt;&gt; /tmp/initramfs.debug 2&gt;&amp;1
+   mount -o move ${rwfs} ${rofs}
+
+   _log "OVERLAYFS Mount with overlayfs ${rofs} and ${ramdisk} to create ${rwfs} in rw mode"
+   # mount overlayfs
+   mount -t overlayfs -o rw,relatime,lowerdir=${rofs},upperdir=${ramdisk} overlayfs ${rwfs} &gt;&gt; /tmp/initramfs.debug 2&gt;&amp;1
+}
+
 mount_unionfs() {
   # DOCUMENTME nounionfs | disable unionfs from /usr mount point
   nounionfs=$(read_cmdline_var "nounionfs" "0")
@@ -218,12 +241,17 @@ mount_unionfs() {
      _log "UNIONFS disabled from cmdline"
      return
   fi
-  # if module not loaded try with aufs or exit :(
-  if [ $(grep unionfs /proc/modules| wc -l) = 0 ]; then
-    if [ $(grep aufs /proc/modules| wc -l) != 0 ]; then
+  # if module not loaded try with aufs/overlayfs or exit :(
+  if ! grep -q unionfs /proc/modules ; then
+    if grep -q aufs /proc/modules ; then
       mount_aufs $1 $2 $3
       return
+
+    elif grep -q overlayfs /proc/modules; then
+      mount_overlayfs $1 $2 $3
+      return
     fi
+
     _log "UNIONFS ERROR mounting unionfs or aufs in rw mode"
     return
   fi
@@ -256,4 +284,3 @@ mount_unionfs() {
    mount -t unionfs -o dirs=${ramdisk}=rw:${rofs}=ro unionfs ${rwfs} &gt;&gt; /tmp/initramfs.debug 2&gt;&amp;1
 }
 
-&lt;br /&gt;&lt;br /&gt;--- a/scripts/tcos-top/01busybox
+++ b/scripts/tcos-top/01busybox
@@ -85,6 +85,6 @@ else
 
 fi
 
-
+grep -q -e aufs -e unionfs /proc/filesystems || modprobe -q -b overlayfs
 
 exit 0&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>2d7053dd5658bbd58e73232c4609f4e7aec4e068</guid><pubDate>Sun, 29 Jan 2012 15:29:03 GMT</pubDate></item><item><title>[tcosmonitor.git] Release 0.2.45</title><link>http://tcosproject.org/cgit/tcosmonitor.git/commit/?id=5a4db5ddceb829e5a76ab095dbcc21ee04b067f6</link><description>Release 0.2.45&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 5a4db5ddceb829e5a76ab095dbcc21ee04b067f6&lt;br /&gt;Date: Wed, 25 Jan 2012 10:59:37 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosmonitor.git/diff/?id=5a4db5ddceb829e5a76ab095dbcc21ee04b067f6"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+tcosmonitor (0.2.45) unstable; urgency=low
+
+  * tcos-devices-ng.py: fix remove_duplicates() inliner
+
+ -- Mario Izquierdo (mariodebian)   Wed, 25 Jan 2012 11:59:16 +0100
+
 tcosmonitor (0.2.44) unstable; urgency=low
 
   * Change Priority to extra, we depend on some extra packages&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>5a4db5ddceb829e5a76ab095dbcc21ee04b067f6</guid><pubDate>Wed, 25 Jan 2012 10:59:37 GMT</pubDate></item><item><title>[af90xx-dkms.git] Version 0.6, update for 3.2 kernel</title><link>http://tcosproject.org/cgit/af90xx-dkms.git/commit/?id=84453d6fc35dc9e22dd630a6081ab2329773bc4b</link><description>Version 0.6, update for 3.2 kernel&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 84453d6fc35dc9e22dd630a6081ab2329773bc4b&lt;br /&gt;Date: Fri, 20 Jan 2012 14:20:11 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/af90xx-dkms.git/diff/?id=84453d6fc35dc9e22dd630a6081ab2329773bc4b"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/compare.sh
+++ b/compare.sh
@@ -1,17 +1,17 @@
 #!/bin/sh
 
-DIR=/usr/src/linux-source-3.1/drivers/media/
+DIR=/usr/src/linux-source-3.2/drivers/media/
 
 cd dvb
 
 for f in *; do
 
-  NEW=$(find ${DIR} -name "$f")
+  NEW=$(find ${DIR}../../ -name "$f")
   if [ -f "${NEW}" ]; then
 
     if ! diff "$NEW" "$f" &gt;/dev/null 2&gt;&amp;1 ; then
       #diff -ur "$NEW" "$f"
-      echo meld "$NEW" "dvb/$f"
+      echo meld "$NEW" "dvb/$f" ";\\"
     else
       echo "SAME FILE $NEW dvb/$f"
     fi&lt;br /&gt;&lt;br /&gt;--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+af90xx-dkms (0.6) unstable; urgency=low
+
+  * Update for 3.2.0 kernel
+  * Add IR support from https://github.com/OpenELEC/OpenELEC.tv
+
+ -- Mario Izquierdo (mariodebian)   Fri, 20 Jan 2012 13:46:34 +0100
+
 af90xx-dkms (0.5) unstable; urgency=low
 
   * Update from 3.1 sources&lt;br /&gt;&lt;br /&gt;--- a/debian/rules
+++ b/debian/rules
@@ -4,7 +4,7 @@
 #export DH_VERBOSE=1
 
 #MODS=af9013 af9033 dvb-core dvb-usb-af9005 dvb-usb-af9015 dvb-usb-af9035 dvb-usb mxl5007t tua9001
-MODS=af9033 dvb-core dvb-usb-af9035 dvb-usb mxl5007t tua9001
+MODS=af9033 dvb-core dvb-usb-af9035 dvb-usb mxl5007t tua9001 tuner_tda18218
 export I=0
 
 # Name of the dkms package&lt;br /&gt;&lt;br /&gt;--- a/dvb/Makefile
+++ b/dvb/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_DVB_CORE) += dvb-core.o
 obj-m += af9033.o
 obj-m += tua9001.o
 obj-m += mxl5007t.o
+obj-m += tuner_tda18218.o
 obj-m += dvb-usb-af9035.o
 
 &lt;br /&gt;&lt;br /&gt;--- a/dvb/af9033.c
+++ b/dvb/af9033.c
@@ -929,6 +929,10 @@ static int af9033_init(struct dvb_frontend *fe)
 		len = ARRAY_SIZE(tuner_init_mxl5007t);
 		init = tuner_init_mxl5007t;
 		break;
+        case AF9033_TUNER_TDA18218:
+                len = ARRAY_SIZE(tuner_init_tda18218);
+                init = tuner_init_tda18218;
+                break;
 	default:
 		len = 0;
 		init = NULL;&lt;br /&gt;&lt;br /&gt;--- a/dvb/af9033.h
+++ b/dvb/af9033.h
@@ -37,6 +37,7 @@ enum af9033_tuner {
 	AF9033_TUNER_TUA9001    = 0x27, /* Infineon TUA 9001 */
 	AF9033_TUNER_FC0011     = 0x28, /* Fitipower FC0011 */
 	AF9033_TUNER_MXL5007t   = 0xa0, /* Maxlinear MXL5007t */
+        AF9033_TUNER_TDA18218   = 0xa1, /* NXP TDA 18218HN */
 };
 
 /* clock setting table:&lt;br /&gt;&lt;br /&gt;--- a/dvb/af9033_priv.h
+++ b/dvb/af9033_priv.h
@@ -305,6 +305,47 @@ static struct regdesc tuner_init_tua9001[] = {
 	{0xF1E6, 0x00},
 };
 
+/* NXP TDA18218 tuner init
+   AF9033_TUNER_TDA18218   = 161 */
+static struct regdesc tuner_init_tda18218[] = {
+        {0x0046, 0x27},
+        {0x0071, 0x05},
+        {0x0072, 0x02},
+        {0x0074, 0x01},
+        {0x0075, 0x03},
+        {0x0076, 0x02},
+        {0x0077, 0x00},
+        {0x0078, 0x01},
+        {0x007a, 0x7e},
+        {0x007b, 0x3e},
+        {0x0098, 0x0a},
+        {0x00b3, 0x00},
+        {0xf007, 0x00},
+        {0xf01f, 0x82},
+        {0xf020, 0x00},
+        {0xf047, 0x00},
+        {0xf077, 0x01},
+        {0xf1e6, 0x00},
+        {0x0057, 0x00},
+        {0x0058, 0x01},
+        {0x005f, 0x00},
+        {0x0060, 0x00},
+        {0x006d, 0x00},
+        {0x0079, 0x00},
+        {0x0093, 0x00},
+        {0x0094, 0x01},
+        {0x0095, 0x02},
+        {0x0096, 0x01},
+        {0x009b, 0x05},
+        {0x009c, 0x80},
+        {0x00c1, 0x01},
+        {0x00c2, 0x00},
+        {0xf029, 0x82},
+        {0xf02a, 0x00},
+        {0xf054, 0x00},
+        {0xf055, 0x00},
+};
+
 static struct regdesc tuner_init_mxl5007t[] = {
 	{0x0046, 0x1b},
 	{0x0057, 0x01},&lt;br /&gt;&lt;br /&gt;--- a/dvb/af9035.c
+++ b/dvb/af9035.c
@@ -22,14 +22,19 @@
  * Thanks to TerraTec for a support received.
  */
 
+#include "dvb-usb-ids.h"
 #include "af9035.h"
 #include "af9033.h"
 #include "tua9001.h"
 #include "mxl5007t.h"
+#include "tuner_tda18218.h"
 
 static int dvb_usb_af9035_debug;
 module_param_named(debug, dvb_usb_af9035_debug, int, 0644);
 MODULE_PARM_DESC(debug, "set debugging level" DVB_USB_DEBUG_STATUS);
+static int dvb_usb_af9035_remote;
+module_param_named(remote, dvb_usb_af9035_remote, int, 0644);
+MODULE_PARM_DESC(remote, "select remote");
 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
 
 static DEFINE_MUTEX(af9035_usb_mutex);
@@ -123,6 +128,12 @@ static int af9035_rw_udev(struct usb_device *udev, struct af9035_req *req)
 	deb_xfer("&lt;&lt;&lt; ");
 	debug_dump(buf, act_len, deb_xfer);
 
+	/* no ack for those packets */
+	if (req-&gt;cmd == CMD_IR_GET || req-&gt;cmd == CMD_IR_SET ) {	
+		if (req-&gt;rlen)
+		memcpy(req-&gt;rbuf, &amp;buf;[3], req-&gt;rlen);
+		goto exit_unlock;
+	}
 	/* check status */
 	if (buf[2]) {
 		err("command:%02x failed:%d", req-&gt;cmd, buf[2]);
@@ -585,6 +596,104 @@ static int af9035_read_eeprom_reg(struct usb_device *udev, u16 reg, u8 *val)
 	return af9035_rw_udev(udev, &amp;req;);
 }
 
+struct af9035_rc_setup {
+	unsigned int id;
+	char *rc_codes;
+};
+
+static char *af9035_rc_setup_match(unsigned int id,
+	const struct af9035_rc_setup *table)
+{
+	for (; table-&gt;rc_codes; table++)
+		if (table-&gt;id == id)
+			return table-&gt;rc_codes;
+	return NULL;
+}
+
+static const struct af9035_rc_setup af9035_rc_setup_modparam[] = {
+	{ AF9035_REMOTE_A_LINK_DTU_M, RC_MAP_ALINK_DTU_M },
+	{ AF9035_REMOTE_MSI_DIGIVOX_MINI_II_V3, RC_MAP_MSI_DIGIVOX_II },
+	{ AF9035_REMOTE_MYGICTV_U718, RC_MAP_TOTAL_MEDIA_IN_HAND },
+	{ AF9035_REMOTE_DIGITTRADE_DVB_T, RC_MAP_DIGITTRADE },
+	{ AF9035_REMOTE_AVERMEDIA_KS, RC_MAP_AVERMEDIA_RM_KS },
+	{ }
+};
+
+static const struct af9035_rc_setup af9035_rc_setup_hashes[] = {
+	{ 0xb8feb708, RC_MAP_MSI_DIGIVOX_II },
+	{ 0xa3703d00, RC_MAP_ALINK_DTU_M },
+	{ 0x9b7dc64e, RC_MAP_TOTAL_MEDIA_IN_HAND }, /* MYGICTV U718 */
+	{ }
+};
+
+static const struct af9035_rc_setup af9035_rc_setup_usbids[] = {
+	{ (USB_VID_TERRATEC &lt;&lt; 16) + USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC,
+		RC_MAP_TERRATEC_SLIM },
+	{ (USB_VID_VISIONPLUS &lt;&lt; 16) + USB_PID_AZUREWAVE_AD_TU700,
+		RC_MAP_AZUREWAVE_AD_TU700 },
+	{ (USB_VID_VISIONPLUS &lt;&lt; 16) + USB_PID_TINYTWIN,
+		RC_MAP_AZUREWAVE_AD_TU700 },
+	{ (USB_VID_MSI_2 &lt;&lt; 16) + USB_PID_MSI_DIGI_VOX_MINI_III,
+		RC_MAP_MSI_DIGIVOX_III },
+	{ (USB_VID_LEADTEK &lt;&lt; 16) + USB_PID_WINFAST_DTV_DONGLE_GOLD,
+		RC_MAP_LEADTEK_Y04G0051 },
+	{ (USB_VID_AVERMEDIA &lt;&lt; 16) + USB_PID_AVERMEDIA_VOLAR_X,
+		RC_MAP_AVERMEDIA_M135A },
+	{ (USB_VID_AFATECH &lt;&lt; 16) + USB_PID_TREKSTOR_DVBT,
+		RC_MAP_TREKSTOR },
+	{ (USB_VID_KWORLD_2 &lt;&lt; 16) + USB_PID_TINYTWIN_2,
+		RC_MAP_DIGITALNOW_TINYTWIN },
+	{ (USB_VID_GTEK &lt;&lt; 16) + USB_PID_TINYTWIN_3,
+		RC_MAP_DIGITALNOW_TINYTWIN },
+	{ }
+};
+
+static void af9035_set_remote_config(struct usb_device *udev,
+		struct dvb_usb_device_properties *props)
+{
+	u16 vid = le16_to_cpu(udev-&gt;descriptor.idVendor);
+	u16 pid = le16_to_cpu(udev-&gt;descriptor.idProduct);
+
+	/* try to load remote based module param */
+	props-&gt;rc.core.rc_codes = af9035_rc_setup_match(
+		dvb_usb_af9035_remote, af9035_rc_setup_modparam);
+
+	/* try to load remote based eeprom hash */
+	if (!props-&gt;rc.core.rc_codes)
+		props-&gt;rc.core.rc_codes = af9035_rc_setup_match(
+			af9035_config.eeprom_sum, af9035_rc_setup_hashes);
+
+	/* try to load remote based USB ID */
+	if (!props-&gt;rc.core.rc_codes)
+		props-&gt;rc.core.rc_codes = af9035_rc_setup_match(
+			(vid &lt;&lt; 16) + pid, af9035_rc_setup_usbids);
+
+	/* try to load remote based USB iManufacturer string */
+	if (!props-&gt;rc.core.rc_codes &amp;&amp; vid == USB_VID_AFATECH) {
+		/* Check USB manufacturer and product strings and try
+		   to determine correct remote in case of chip vendor
+		   reference IDs are used.
+		   DO NOT ADD ANYTHING NEW HERE. Use hashes instead. */
+		char manufacturer[10];
+		memset(manufacturer, 0, sizeof(manufacturer));
+		usb_string(udev, udev-&gt;descriptor.iManufacturer,
+			manufacturer, sizeof(manufacturer));
+		if (!strcmp("MSI", manufacturer)) {
+			/* iManufacturer 1 MSI
+			   iProduct      2 MSI K-VOX */
+			props-&gt;rc.core.rc_codes = af9035_rc_setup_match(
+				AF9035_REMOTE_MSI_DIGIVOX_MINI_II_V3,
+				af9035_rc_setup_modparam);
+		}
+	}
+
+	/* finally load "empty" just for leaving IR receiver enabled */
+	if (!props-&gt;rc.core.rc_codes)
+		props-&gt;rc.core.rc_codes = RC_MAP_EMPTY;
+
+	return;
+}
+
 static int af9035_read_config(struct usb_device *udev)
 {
 	int ret;
@@ -595,6 +704,13 @@ static int af9035_read_config(struct usb_device *udev)
 	if (ret)
 		goto error;
 	deb_info("%s: IR mode:%d\n", __func__, val);
+	for (i = 0; i &lt; af9035_properties_count; i++) {
+		if (val == AF9035_IR_MODE_DISABLED)
+			af9035_properties[i].rc.core.rc_codes = NULL;
+		else
+			af9035_set_remote_config(udev, &amp;af9035;_properties[i]);
+	}
+
 
 	/* TS mode - one or two receivers */
 	ret = af9035_read_eeprom_reg(udev, EEPROM_TS_MODE, &amp;val;);
@@ -608,13 +724,13 @@ static int af9035_read_config(struct usb_device *udev)
 	for (i = 0; i &lt; af9035_properties_count; i++) {
 		/* USB1.1 set smaller buffersize and disable 2nd adapter */
 		if (udev-&gt;speed == USB_SPEED_FULL) {
-			af9035_properties[i].adapter[0].stream.u.bulk.buffersize
+			af9035_properties[i].adapter[0].fe[0].stream.u.bulk.buffersize
 				= TS_USB11_MAX_PACKET_SIZE;
 			/* disable 2nd adapter because we don't have
 			   PID-filters */
 			af9035_config.dual_mode = 0;
 		} else {
-			af9035_properties[i].adapter[0].stream.u.bulk.buffersize
+			af9035_properties[i].adapter[0].fe[0].stream.u.bulk.buffersize
 				= TS_USB20_FRAME_SIZE;
 		}
 	}
@@ -697,6 +813,9 @@ static int af9035_read_config(struct usb_device *udev)
 		case AF9033_TUNER_MXL5007t:
 			af9035_af9033_config[i].rf_spec_inv = 1;
 			break;
+                case AF9033_TUNER_TDA18218:
+			af9035_af9033_config[i].rf_spec_inv = 1;
+			break;
 		default:
 			warn("tuner ID:%d not supported, please report!", val);
 			return -ENODEV;
@@ -711,8 +830,10 @@ error:
 		err("eeprom read failed:%d", ret);
 
 	if (le16_to_cpu(udev-&gt;descriptor.idVendor) == USB_VID_AVERMEDIA &amp;&amp;
-	    le16_to_cpu(udev-&gt;descriptor.idProduct) == USB_PID_AVERMEDIA_A825) {
-		deb_info("%s: AverMedia A825: overriding config\n", __func__);
+	    (le16_to_cpu(udev-&gt;descriptor.idProduct) == USB_PID_AVERMEDIA_A825 ||
+             le16_to_cpu(udev-&gt;descriptor.idProduct) == USB_PID_AVERMEDIA_A835 ||
+             le16_to_cpu(udev-&gt;descriptor.idProduct) == USB_PID_AVERMEDIA_B835)) {
+		deb_info("%s: AverMedia A825/A835/B835: overriding config\n", __func__);
 		/* set correct IF */
 		for (i = 0; i &lt; af9035_properties[0].num_adapters; i++) {
 			af9035_af9033_config[i].if_freq = 4570000;
@@ -722,6 +843,36 @@ error:
 	return ret;
 }
 
+static int af9035_rc_query(struct dvb_usb_device *d)
+{
+
+// 	{ 0x05, 0x12, KEY_POWER },       /* POWER */
+	struct af9035_state *priv = d-&gt;priv;
+	int ret;
+	u8 buf[5];	
+
+	struct af9035_req req = {CMD_IR_GET, LINK, 0, 0, 
+		sizeof(buf), buf};
+	ret = af9035_rw_udev(d-&gt;udev, &amp;req;);	
+	if (ret)
+		goto error;
+	
+    if (buf[00] == 0x05 &amp;&amp; buf[02] != 0xe7 ) {
+    	deb_info("%s: %02x %02x %02x %02x %02x \n", __func__,
+	      	buf[00], buf[01], buf[02], buf[03], buf[04], buf[05]);	
+    	priv-&gt;rc_keycode = buf[00] &lt;&lt; 8 | buf[02];
+    	deb_info("%s: %d \n", __func__,
+	       priv-&gt;rc_keycode);
+    	rc_keydown(d-&gt;rc_dev, priv-&gt;rc_keycode, 0);	
+    }
+
+error:
+	if (ret)
+		err("%s: failed:%d", __func__, ret);
+
+	return ret;
+}
+
 static int af9035_aux_init(struct usb_device *d)
 {
 	int ret;
@@ -783,10 +934,10 @@ static int af9035_identify_state(struct usb_device *udev,
 static int af9035_af9033_frontend_attach(struct dvb_usb_adapter *adap)
 {
 	/* attach demodulator */
-	adap-&gt;fe = dvb_attach(af9033_attach, &amp;af9035;_af9033_config[adap-&gt;id],
+	adap-&gt;fe_adap[0].fe = dvb_attach(af9033_attach, &amp;af9035;_af9033_config[adap-&gt;id],
 		&amp;adap-;&gt;dev-&gt;i2c_adap);
 
-	return adap-&gt;fe == NULL ? -ENODEV : 0;
+	return adap-&gt;fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static struct tua9001_config af9035_tua9001_config[] = {
@@ -815,6 +966,11 @@ static struct mxl5007t_config af9035_mxl5007t_config[] = {
 	}
 };
 
+static struct tda18218_config af9035_tda18218_config = {
+        .i2c_address = 0xc0,
+        .i2c_wr_max = 17,
+};
+
 static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
 {
 	int ret;
@@ -852,7 +1008,7 @@ static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
 				 reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1);
 		}
 
-		ret = dvb_attach(tua9001_attach, adap-&gt;fe, &amp;adap-;&gt;dev-&gt;i2c_adap,
+		ret = dvb_attach(tua9001_attach, adap-&gt;fe_adap[0].fe, &amp;adap-;&gt;dev-&gt;i2c_adap,
 			&amp;af9035;_tua9001_config[adap-&gt;id]) == NULL ? -ENODEV : 0;
 
 		break;
@@ -905,11 +1061,45 @@ static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
 				1);
 		}
 
-		ret = dvb_attach(mxl5007t_attach, adap-&gt;fe, &amp;adap-;&gt;dev-&gt;i2c_adap,
+		ret = dvb_attach(mxl5007t_attach, adap-&gt;fe_adap[0].fe, &amp;adap-;&gt;dev-&gt;i2c_adap,
 			af9035_af9033_config[adap-&gt;id].tuner_address,
 			&amp;af9035;_mxl5007t_config[adap-&gt;id]) == NULL ? -ENODEV : 0;
 
 		break;
+          case AF9033_TUNER_TDA18218:
+                  af9035_af9033_config[adap-&gt;id].tuner_address = af9035_tua9001_config[adap-&gt;id].i2c_address;
+                  af9035_af9033_config[adap-&gt;id].tuner_address += adap-&gt;id;
+                  if (adap-&gt;id == 0) {
+                  /* gpiot3 TUA9001 RESETN
+                  gpiot2 TUA9001 RXEN */
+                  ret = af9035_write_reg_bits(adap-&gt;dev, LINK,
+                          p_reg_top_gpiot2_en, reg_top_gpiot2_en_pos,
+                          reg_top_gpiot2_en_len, 1);
+                  ret = af9035_write_reg_bits(adap-&gt;dev, LINK,
+                          p_reg_top_gpiot2_on, reg_top_gpiot2_on_pos,
+                          reg_top_gpiot2_on_len, 1);
+                  ret = af9035_write_reg_bits(adap-&gt;dev, LINK,
+                          p_reg_top_gpiot3_en, reg_top_gpiot3_en_pos,
+                          reg_top_gpiot3_en_len, 1);
+                  ret = af9035_write_reg_bits(adap-&gt;dev, LINK,
+                          p_reg_top_gpiot3_on, reg_top_gpiot3_on_pos,
+                          reg_top_gpiot3_on_len, 1);
+
+                  /* reset tuner */
+                  ret = af9035_write_reg_bits(adap-&gt;dev, LINK, p_reg_top_gpiot3_o,
+                          reg_top_gpiot3_o_pos, reg_top_gpiot3_o_len, 0);
+                  msleep(1);
+                  ret = af9035_write_reg_bits(adap-&gt;dev, LINK, p_reg_top_gpiot3_o,
+                          reg_top_gpiot3_o_pos, reg_top_gpiot3_o_len, 1);
+
+                   /* activate tuner - TODO: do that like I2C gate control */
+                   ret = af9035_write_reg_bits(adap-&gt;dev, LINK, p_reg_top_gpiot2_o,
+                           reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1);
+                   }
+
+                   ret = dvb_attach(tuner_tda18218_attach, adap-&gt;fe_adap[0].fe, &amp;adap-;&gt;dev-&gt;i2c_adap,
+                           &amp;af9035;_tda18218_config) == NULL ? -ENODEV : 0;
+                   break;
 	default:
 		ret = -ENODEV;
 		err("unknown tuner ID:%d",
@@ -926,12 +1116,17 @@ static struct usb_device_id af9035_usb_table[] = {
 	{USB_DEVICE(USB_VID_AFATECH,   USB_PID_AFATECH_AF9035_1003)},
 	{USB_DEVICE(USB_VID_AFATECH,   USB_PID_AFATECH_AF9035_9035)},
 /*  5 */{USB_DEVICE(USB_VID_TERRATEC,  USB_PID_TERRATEC_CINERGY_T_STICK)},
-/*  6 */{USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A825)},
+        {USB_DEVICE(USB_VID_TERRATEC,  USB_PID_TERRATEC_CINERGY_T_STICK_2)},
+/*  7 */{USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A825)},
+/*  8 */{USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835)},
+        {USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_B835)},
 	{0},
 };
 
 MODULE_DEVICE_TABLE(usb, af9035_usb_table);
 
+#define AF9035_RC_INTERVAL 200
+
 static struct dvb_usb_device_properties af9035_properties[] = {
 	{
 		.caps = DVB_USB_IS_AN_I2C_ADAPTER,
@@ -941,10 +1136,25 @@ static struct dvb_usb_device_properties af9035_properties[] = {
 		.firmware = "dvb-usb-af9035-01.fw",
 		.no_reconnect = 1,
 
-		.size_of_priv = 0,
+		.size_of_priv = sizeof(struct af9035_state),
 
+		.num_adapters = 2,
 		.adapter = {
 			{
+			.num_frontends = 1,
+			.fe = {{
+
+				.frontend_attach =
+					af9035_af9033_frontend_attach,
+				.tuner_attach    = af9035_tuner_attach,
+				.stream = {
+					.type = USB_BULK,
+					.count = 6,
+					.endpoint = 0x84,
+				},
+			}},
+			},
+			/*{
 				.frontend_attach =
 					af9035_af9033_frontend_attach,
 				.tuner_attach = af9035_tuner_attach,
@@ -953,11 +1163,13 @@ static struct dvb_usb_device_properties af9035_properties[] = {
 					.count = 4,
 					.endpoint = 0x84,
 				},
-			},
+			},*/
 			{
+			.num_frontends = 1,
+			.fe = {{
 				.frontend_attach =
 					af9035_af9033_frontend_attach,
-				.tuner_attach = af9035_tuner_attach,
+				.tuner_attach    = af9035_tuner_attach,
 				.stream = {
 					.type = USB_BULK,
 					.count = 4,
@@ -969,14 +1181,39 @@ static struct dvb_usb_device_properties af9035_properties[] = {
 						}
 					}
 				},
+			}},
 			}
+			/*{
+				.frontend_attach =
+					af9035_af9033_frontend_attach,
+				.tuner_attach = af9035_tuner_attach,
+				.stream = {
+					.type = USB_BULK,
+					.count = 4,
+					.endpoint = 0x85,
+					.u = {
+						.bulk = {
+							.buffersize =
+						TS_USB20_FRAME_SIZE,
+						}
+					}
+				},
+			}*/
 		},
 
 		.identify_state = af9035_identify_state,
 
+		.rc.core = {
+			.protocol         = RC_TYPE_NEC,
+			.module_name      = "af9035",
+			.rc_query         = af9035_rc_query,
+			.rc_interval      = AF9035_RC_INTERVAL,
+			.allowed_protos   = RC_TYPE_NEC,
+		},
+
 		.i2c_algo = &amp;af9035;_i2c_algo,
 
-		.num_device_descs = 3,
+		.num_device_descs = 4,
 		.devices = {
 			{
 				.name = "Afatech AF9035 DVB-T USB2.0 stick",
@@ -989,18 +1226,24 @@ static struct dvb_usb_device_properties af9035_properties[] = {
 			},
 			{
 				.name = "TerraTec Cinergy T Stick",
-				.cold_ids = {&amp;af9035;_usb_table[5], NULL},
+				.cold_ids = {&amp;af9035;_usb_table[5],
+                                             &amp;af9035;_usb_table[6], NULL},
 				.warm_ids = {NULL},
 			},
 			{
 				.name = "Avermedia TwinStar",
-				.cold_ids = {&amp;af9035;_usb_table[6], NULL},
-				.warm_ids = {NULL},
+				.cold_ids = {&amp;af9035;_usb_table[7], NULL},
+	 			.warm_ids = {NULL},
+                        },
+                        {
+                                .name = "Avermedia AverTV Volar HD &amp; HD PRO (A835)",
+                                .cold_ids = {&amp;af9035;_usb_table[8],
+                                             &amp;af9035;_usb_table[9], NULL},
+                                .warm_ids = {NULL},
 			},
 		}
 	},
 };
-
 static int af9035_usb_probe(struct usb_interface *intf,
 			    const struct usb_device_id *id)
 {&lt;br /&gt;&lt;br /&gt;--- a/dvb/af9035.h
+++ b/dvb/af9035.h
@@ -168,6 +168,9 @@ struct af9035_req {
 struct af9035_config {
 	u8 dual_mode:1;
 	u16 mt2060_if1[2];
+	u16 firmware_size;
+	u16 firmware_checksum;
+	u32 eeprom_sum;
 };
 
 struct af9035_segment {
@@ -184,7 +187,27 @@ struct af9035_firmware_header {
 	struct af9035_segment segment[SEGMENT_MAX_COUNT];
 };
 
+enum af9035_remote {
+	AF9035_REMOTE_NONE                    = 0,
+/* 1 */	AF9035_REMOTE_A_LINK_DTU_M,
+	AF9035_REMOTE_MSI_DIGIVOX_MINI_II_V3,
+	AF9035_REMOTE_MYGICTV_U718,
+	AF9035_REMOTE_DIGITTRADE_DVB_T,
+/* 5 */	AF9035_REMOTE_AVERMEDIA_KS,
+};
 
+struct af9035_state {
+	struct i2c_adapter i2c_adap; /* I2C adapter for 2nd FE */
+	u8 rc_repeat;
+	u32 rc_keycode;
+};
 
+enum af9035_ir_mode {
+	AF9035_IR_MODE_DISABLED = 0,
+	AF9035_IR_MODE_HID,
+	AF9035_IR_MODE_RLC,
+	AF9035_IR_MODE_RC6,
+	AF9035_IR_MODE_POLLING, /* just guess */
+};
 
 #endif&lt;br /&gt;&lt;br /&gt;--- a/dvb/dvb-usb-dvb.c
+++ b/dvb/dvb-usb-dvb.c
@@ -17,15 +17,20 @@ static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
 	if (adap == NULL)
 		return -ENODEV;
 
+	if ((adap-&gt;active_fe &lt; 0) ||
+	    (adap-&gt;active_fe &gt;= adap-&gt;num_frontends_initialized)) {
+		return -EINVAL;
+	}
+
 	newfeedcount = adap-&gt;feedcount + (onoff ? 1 : -1);
 
 	/* stop feed before setting a new pid if there will be no pid anymore */
 	if (newfeedcount == 0) {
 		deb_ts("stop feeding\n");
-		usb_urb_kill(&amp;adap-;&gt;stream);
+		usb_urb_kill(&amp;adap-;&gt;fe_adap[adap-&gt;active_fe].stream);
 
-		if (adap-&gt;props.streaming_ctrl != NULL) {
-			ret = adap-&gt;props.streaming_ctrl(adap, 0);
+		if (adap-&gt;props.fe[adap-&gt;active_fe].streaming_ctrl != NULL) {
+			ret = adap-&gt;props.fe[adap-&gt;active_fe].streaming_ctrl(adap, 0);
 			if (ret &lt; 0) {
 				err("error while stopping stream.");
 				return ret;
@@ -36,36 +41,37 @@ static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
 	adap-&gt;feedcount = newfeedcount;
 
 	/* activate the pid on the device specific pid_filter */
-	deb_ts("setting pid (%s): %5d %04x at index %d '%s'\n",adap-&gt;pid_filtering ?
-		"yes" : "no", dvbdmxfeed-&gt;pid,dvbdmxfeed-&gt;pid,dvbdmxfeed-&gt;index,onoff ?
-		"on" : "off");
-	if (adap-&gt;props.caps &amp; DVB_USB_ADAP_HAS_PID_FILTER &amp;&amp;
-		adap-&gt;pid_filtering &amp;&amp;
-		adap-&gt;props.pid_filter != NULL)
-		adap-&gt;props.pid_filter(adap, dvbdmxfeed-&gt;index, dvbdmxfeed-&gt;pid,onoff);
+	deb_ts("setting pid (%s): %5d %04x at index %d '%s'\n",
+		adap-&gt;fe_adap[adap-&gt;active_fe].pid_filtering ?
+		"yes" : "no", dvbdmxfeed-&gt;pid, dvbdmxfeed-&gt;pid,
+		dvbdmxfeed-&gt;index, onoff ? "on" : "off");
+	if (adap-&gt;props.fe[adap-&gt;active_fe].caps &amp; DVB_USB_ADAP_HAS_PID_FILTER &amp;&amp;
+		adap-&gt;fe_adap[adap-&gt;active_fe].pid_filtering &amp;&amp;
+		adap-&gt;props.fe[adap-&gt;active_fe].pid_filter != NULL)
+		adap-&gt;props.fe[adap-&gt;active_fe].pid_filter(adap, dvbdmxfeed-&gt;index, dvbdmxfeed-&gt;pid, onoff);
 
 	/* start the feed if this was the first feed and there is still a feed
 	 * for reception.
 	 */
 	if (adap-&gt;feedcount == onoff &amp;&amp; adap-&gt;feedcount &gt; 0) {
 		deb_ts("submitting all URBs\n");
-		usb_urb_submit(&amp;adap-;&gt;stream);
+		usb_urb_submit(&amp;adap-;&gt;fe_adap[adap-&gt;active_fe].stream);
 
 		deb_ts("controlling pid parser\n");
-		if (adap-&gt;props.caps &amp; DVB_USB_ADAP_HAS_PID_FILTER &amp;&amp;
-			adap-&gt;props.caps &amp;
+		if (adap-&gt;props.fe[adap-&gt;active_fe].caps &amp; DVB_USB_ADAP_HAS_PID_FILTER &amp;&amp;
+			adap-&gt;props.fe[adap-&gt;active_fe].caps &amp;
 			DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF &amp;&amp;
-			adap-&gt;props.pid_filter_ctrl != NULL) {
-			ret = adap-&gt;props.pid_filter_ctrl(adap,
-				adap-&gt;pid_filtering);
+			adap-&gt;props.fe[adap-&gt;active_fe].pid_filter_ctrl != NULL) {
+			ret = adap-&gt;props.fe[adap-&gt;active_fe].pid_filter_ctrl(adap,
+				adap-&gt;fe_adap[adap-&gt;active_fe].pid_filtering);
 			if (ret &lt; 0) {
 				err("could not handle pid_parser");
 				return ret;
 			}
 		}
 		deb_ts("start feeding\n");
-		if (adap-&gt;props.streaming_ctrl != NULL) {
-			ret = adap-&gt;props.streaming_ctrl(adap, 1);
+		if (adap-&gt;props.fe[adap-&gt;active_fe].streaming_ctrl != NULL) {
+			ret = adap-&gt;props.fe[adap-&gt;active_fe].streaming_ctrl(adap, 1);
 			if (ret &lt; 0) {
 				err("error while enabling fifo.");
 				return ret;
@@ -90,6 +96,7 @@ static int dvb_usb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
 
 int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap, short *adapter_nums)
 {
+	int i;
 	int ret = dvb_register_adapter(&amp;adap-;&gt;dvb_adap, adap-&gt;dev-&gt;desc-&gt;name,
 				       adap-&gt;dev-&gt;owner, &amp;adap-;&gt;dev-&gt;udev-&gt;dev,
 				       adapter_nums);
@@ -112,7 +119,12 @@ int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap, short *adapter_nums)
 	adap-&gt;demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
 	adap-&gt;demux.priv             = adap;
 
-	adap-&gt;demux.feednum          = adap-&gt;demux.filternum = adap-&gt;max_feed_count;
+	adap-&gt;demux.filternum        = 0;
+	for (i = 0; i &lt; adap-&gt;props.num_frontends; i++) {
+		if (adap-&gt;demux.filternum &lt; adap-&gt;fe_adap[i].max_feed_count)
+			adap-&gt;demux.filternum = adap-&gt;fe_adap[i].max_feed_count;
+	}
+	adap-&gt;demux.feednum          = adap-&gt;demux.filternum;
 	adap-&gt;demux.start_feed       = dvb_usb_start_feed;
 	adap-&gt;demux.stop_feed        = dvb_usb_stop_feed;
 	adap-&gt;demux.write_to_decoder = NULL;
@@ -156,14 +168,33 @@ int dvb_usb_adapter_dvb_exit(struct dvb_usb_adapter *adap)
 	return 0;
 }
 
+static int dvb_usb_set_active_fe(struct dvb_frontend *fe, int onoff)
+{
+	struct dvb_usb_adapter *adap = fe-&gt;dvb-&gt;priv;
+
+	int ret = (adap-&gt;props.frontend_ctrl) ?
+		adap-&gt;props.frontend_ctrl(fe, onoff) : 0;
+
+	if (ret &lt; 0) {
+		err("frontend_ctrl request failed");
+		return ret;
+	}
+	if (onoff)
+		adap-&gt;active_fe = fe-&gt;id;
+
+	return 0;
+}
+
 static int dvb_usb_fe_wakeup(struct dvb_frontend *fe)
 {
 	struct dvb_usb_adapter *adap = fe-&gt;dvb-&gt;priv;
 
 	dvb_usb_device_power_ctrl(adap-&gt;dev, 1);
 
-	if (adap-&gt;fe_init)
-		adap-&gt;fe_init(fe);
+	dvb_usb_set_active_fe(fe, 1);
+
+	if (adap-&gt;fe_adap[fe-&gt;id].fe_init)
+		adap-&gt;fe_adap[fe-&gt;id].fe_init(fe);
 
 	return 0;
 }
@@ -172,45 +203,81 @@ static int dvb_usb_fe_sleep(struct dvb_frontend *fe)
 {
 	struct dvb_usb_adapter *adap = fe-&gt;dvb-&gt;priv;
 
-	if (adap-&gt;fe_sleep)
-		adap-&gt;fe_sleep(fe);
+	if (adap-&gt;fe_adap[fe-&gt;id].fe_sleep)
+		adap-&gt;fe_adap[fe-&gt;id].fe_sleep(fe);
+
+	dvb_usb_set_active_fe(fe, 0);
 
 	return dvb_usb_device_power_ctrl(adap-&gt;dev, 0);
 }
 
 int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)
 {
-	if (adap-&gt;props.frontend_attach == NULL) {
-		err("strange: '%s' #%d doesn't want to attach a frontend.",adap-&gt;dev-&gt;desc-&gt;name, adap-&gt;id);
-		return 0;
-	}
+	int ret, i;
 
-	/* re-assign sleep and wakeup functions */
-	if (adap-&gt;props.frontend_attach(adap) == 0 &amp;&amp; adap-&gt;fe != NULL) {
-		adap-&gt;fe_init  = adap-&gt;fe-&gt;ops.init;  adap-&gt;fe-&gt;ops.init  = dvb_usb_fe_wakeup;
-		adap-&gt;fe_sleep = adap-&gt;fe-&gt;ops.sleep; adap-&gt;fe-&gt;ops.sleep = dvb_usb_fe_sleep;
+	/* register all given adapter frontends */
+	for (i = 0; i &lt; adap-&gt;props.num_frontends; i++) {
 
-		if (dvb_register_frontend(&amp;adap-;&gt;dvb_adap, adap-&gt;fe)) {
-			err("Frontend registration failed.");
-			dvb_frontend_detach(adap-&gt;fe);
-			adap-&gt;fe = NULL;
-			return -ENODEV;
+		if (adap-&gt;props.fe[i].frontend_attach == NULL) {
+			err("strange: '%s' #%d,%d "
+			    "doesn't want to attach a frontend.",
+			    adap-&gt;dev-&gt;desc-&gt;name, adap-&gt;id, i);
+
+			return 0;
+		}
+
+		ret = adap-&gt;props.fe[i].frontend_attach(adap);
+		if (ret || adap-&gt;fe_adap[i].fe == NULL) {
+			/* only print error when there is no FE at all */
+			if (i == 0)
+				err("no frontend was attached by '%s'",
+					adap-&gt;dev-&gt;desc-&gt;name);
+
+			return 0;
+		}
+
+		adap-&gt;fe_adap[i].fe-&gt;id = i;
+
+		/* re-assign sleep and wakeup functions */
+		adap-&gt;fe_adap[i].fe_init = adap-&gt;fe_adap[i].fe-&gt;ops.init;
+		adap-&gt;fe_adap[i].fe-&gt;ops.init  = dvb_usb_fe_wakeup;
+		adap-&gt;fe_adap[i].fe_sleep = adap-&gt;fe_adap[i].fe-&gt;ops.sleep;
+		adap-&gt;fe_adap[i].fe-&gt;ops.sleep = dvb_usb_fe_sleep;
+
+		if (dvb_register_frontend(&amp;adap-;&gt;dvb_adap, adap-&gt;fe_adap[i].fe)) {
+			err("Frontend %d registration failed.", i);
+			dvb_frontend_detach(adap-&gt;fe_adap[i].fe);
+			adap-&gt;fe_adap[i].fe = NULL;
+			/* In error case, do not try register more FEs,
+			 * still leaving already registered FEs alive. */
+			if (i == 0)
+				return -ENODEV;
+			else
+				return 0;
 		}
 
 		/* only attach the tuner if the demod is there */
-		if (adap-&gt;props.tuner_attach != NULL)
-			adap-&gt;props.tuner_attach(adap);
-	} else
-		err("no frontend was attached by '%s'",adap-&gt;dev-&gt;desc-&gt;name);
+		if (adap-&gt;props.fe[i].tuner_attach != NULL)
+			adap-&gt;props.fe[i].tuner_attach(adap);
+
+		adap-&gt;num_frontends_initialized++;
+	}
 
 	return 0;
 }
 
 int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap)
 {
-	if (adap-&gt;fe != NULL) {
-		dvb_unregister_frontend(adap-&gt;fe);
-		dvb_frontend_detach(adap-&gt;fe);
+	int i = adap-&gt;num_frontends_initialized - 1;
+
+	/* unregister all given adapter frontends */
+	for (; i &gt;= 0; i--) {
+		if (adap-&gt;fe_adap[i].fe != NULL) {
+			dvb_unregister_frontend(adap-&gt;fe_adap[i].fe);
+			dvb_frontend_detach(adap-&gt;fe_adap[i].fe);
+		}
 	}
+	adap-&gt;num_frontends_initialized = 0;
+
 	return 0;
 }&lt;br /&gt;&lt;br /&gt;--- a/dvb/dvb-usb-ids.h
+++ b/dvb/dvb-usb-ids.h
@@ -37,6 +37,7 @@
 #define USB_VID_HAUPPAUGE			0x2040
 #define USB_VID_HYPER_PALTEK			0x1025
 #define USB_VID_INTEL				0x8086
+#define USB_VID_ITETECH				0x048d
 #define USB_VID_KWORLD				0xeb2a
 #define USB_VID_KWORLD_2			0x1b80
 #define USB_VID_KYE				0x0458
@@ -80,7 +81,10 @@
 #define USB_PID_AFATECH_AF9035_1003			0x1003
 #define USB_PID_AFATECH_AF9035_9035			0x9035
 #define USB_PID_AVERMEDIA_A825				0x0825
+#define USB_PID_AVERMEDIA_A835                          0xa835
+#define USB_PID_AVERMEDIA_B835                          0xb835
 #define USB_PID_TERRATEC_CINERGY_T_STICK		0x0093
+#define USB_PID_TERRATEC_CINERGY_T_STICK_2		0x00aa
 #define USB_PID_TREKSTOR_DVBT				0x901b
 #define USB_VID_ALINK_DTU				0xf170
 #define USB_PID_ANSONIC_DVBT_USB			0x6000
@@ -133,6 +137,7 @@
 #define USB_PID_GRANDTEC_DVBT_USB_COLD			0x0fa0
 #define USB_PID_GRANDTEC_DVBT_USB_WARM			0x0fa1
 #define USB_PID_INTEL_CE9500				0x9500
+#define USB_PID_ITETECH_IT9135				0x9135
 #define USB_PID_KWORLD_399U				0xe399
 #define USB_PID_KWORLD_399U_2				0xe400
 #define USB_PID_KWORLD_395U				0xe396
@@ -143,6 +148,7 @@
 #define USB_PID_KWORLD_PC160_2T				0xc160
 #define USB_PID_KWORLD_PC160_T				0xc161
 #define USB_PID_KWORLD_UB383_T				0xe383
+#define USB_PID_KWORLD_UB499_2T_T09			0xe409
 #define USB_PID_KWORLD_VSTREAM_COLD			0x17de
 #define USB_PID_KWORLD_VSTREAM_WARM			0x17df
 #define USB_PID_TERRATEC_CINERGY_T_USB_XE		0x0055
@@ -247,6 +253,9 @@
 #define USB_PID_PCTV_200E				0x020e
 #define USB_PID_PCTV_400E				0x020f
 #define USB_PID_PCTV_450E				0x0222
+#define USB_PID_PCTV_452E				0x021f
+#define USB_PID_TECHNOTREND_CONNECT_S2_3600		0x3007
+#define USB_PID_TECHNOTREND_CONNECT_S2_3650_CI		0x300a
 #define USB_PID_NEBULA_DIGITV				0x0201
 #define USB_PID_DVICO_BLUEBIRD_LGDT			0xd820
 #define USB_PID_DVICO_BLUEBIRD_LG064F_COLD		0xd500&lt;br /&gt;&lt;br /&gt;--- a/dvb/dvb-usb-init.c
+++ b/dvb/dvb-usb-init.c
@@ -29,7 +29,7 @@ MODULE_PARM_DESC(force_pid_filter_usage, "force all dvb-usb-devices to use a PID
 static int dvb_usb_adapter_init(struct dvb_usb_device *d, short *adapter_nrs)
 {
 	struct dvb_usb_adapter *adap;
-	int ret, n;
+	int ret, n, o;
 
 	for (n = 0; n &lt; d-&gt;props.num_adapters; n++) {
 		adap = &amp;d-;&gt;adapter[n];
@@ -38,31 +38,42 @@ static int dvb_usb_adapter_init(struct dvb_usb_device *d, short *adapter_nrs)
 
 		memcpy(&amp;adap-;&gt;props, &amp;d-;&gt;props.adapter[n], sizeof(struct dvb_usb_adapter_properties));
 
+	for (o = 0; o &lt; adap-&gt;props.num_frontends; o++) {
+		struct dvb_usb_adapter_fe_properties *props = &amp;adap-;&gt;props.fe[o];
 		/* speed - when running at FULL speed we need a HW PID filter */
-		if (d-&gt;udev-&gt;speed == USB_SPEED_FULL &amp;&amp; !(adap-&gt;props.caps &amp; DVB_USB_ADAP_HAS_PID_FILTER)) {
+		if (d-&gt;udev-&gt;speed == USB_SPEED_FULL &amp;&amp; !(props-&gt;caps &amp; DVB_USB_ADAP_HAS_PID_FILTER)) {
 			err("This USB2.0 device cannot be run on a USB1.1 port. (it lacks a hardware PID filter)");
 			return -ENODEV;
 		}
 
-		if ((d-&gt;udev-&gt;speed == USB_SPEED_FULL &amp;&amp; adap-&gt;props.caps &amp; DVB_USB_ADAP_HAS_PID_FILTER) ||
-			(adap-&gt;props.caps &amp; DVB_USB_ADAP_NEED_PID_FILTERING)) {
-			info("will use the device's hardware PID filter (table count: %d).", adap-&gt;props.pid_filter_count);
-			adap-&gt;pid_filtering  = 1;
-			adap-&gt;max_feed_count = adap-&gt;props.pid_filter_count;
+		if ((d-&gt;udev-&gt;speed == USB_SPEED_FULL &amp;&amp; props-&gt;caps &amp; DVB_USB_ADAP_HAS_PID_FILTER) ||
+			(props-&gt;caps &amp; DVB_USB_ADAP_NEED_PID_FILTERING)) {
+			info("will use the device's hardware PID filter (table count: %d).", props-&gt;pid_filter_count);
+			adap-&gt;fe_adap[o].pid_filtering  = 1;
+			adap-&gt;fe_adap[o].max_feed_count = props-&gt;pid_filter_count;
 		} else {
 			info("will pass the complete MPEG2 transport stream to the software demuxer.");
-			adap-&gt;pid_filtering  = 0;
-			adap-&gt;max_feed_count = 255;
+			adap-&gt;fe_adap[o].pid_filtering  = 0;
+			adap-&gt;fe_adap[o].max_feed_count = 255;
 		}
 
-		if (!adap-&gt;pid_filtering &amp;&amp;
+		if (!adap-&gt;fe_adap[o].pid_filtering &amp;&amp;
 			dvb_usb_force_pid_filter_usage &amp;&amp;
-			adap-&gt;props.caps &amp; DVB_USB_ADAP_HAS_PID_FILTER) {
+			props-&gt;caps &amp; DVB_USB_ADAP_HAS_PID_FILTER) {
 			info("pid filter enabled by module option.");
-			adap-&gt;pid_filtering  = 1;
-			adap-&gt;max_feed_count = adap-&gt;props.pid_filter_count;
+			adap-&gt;fe_adap[o].pid_filtering  = 1;
+			adap-&gt;fe_adap[o].max_feed_count = props-&gt;pid_filter_count;
 		}
 
+		if (props-&gt;size_of_priv &gt; 0) {
+			adap-&gt;fe_adap[o].priv = kzalloc(props-&gt;size_of_priv, GFP_KERNEL);
+			if (adap-&gt;fe_adap[o].priv == NULL) {
+				err("no memory for priv for adapter %d fe %d.", n, o);
+				return -ENOMEM;
+			}
+		}
+	}
+
 		if (adap-&gt;props.size_of_priv &gt; 0) {
 			adap-&gt;priv = kzalloc(adap-&gt;props.size_of_priv, GFP_KERNEL);
 			if (adap-&gt;priv == NULL) {
@@ -77,6 +88,10 @@ static int dvb_usb_adapter_init(struct dvb_usb_device *d, short *adapter_nrs)
 			return ret;
 		}
 
+		/* use exclusive FE lock if there is multiple shared FEs */
+		if (adap-&gt;fe_adap[1].fe)
+			adap-&gt;dvb_adap.mfe_shared = 1;
+
 		d-&gt;num_adapters_initialized++;
 		d-&gt;state |= DVB_USB_STATE_DVB;
 	}
@@ -283,7 +298,7 @@ void dvb_usb_device_exit(struct usb_interface *intf)
 }
 EXPORT_SYMBOL(dvb_usb_device_exit);
 
-MODULE_VERSION("1.0");
+MODULE_VERSION("1.1");
 MODULE_AUTHOR("Patrick Boettcher ");
 MODULE_DESCRIPTION("A library module containing commonly used USB and DVB function USB DVB devices");
 MODULE_LICENSE("GPL");&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>84453d6fc35dc9e22dd630a6081ab2329773bc4b</guid><pubDate>Fri, 20 Jan 2012 14:20:11 GMT</pubDate></item><item><title>[af90xx-dkms.git] Delete af9013 files</title><link>http://tcosproject.org/cgit/af90xx-dkms.git/commit/?id=73cf835e97fcb904e6fdef35e0d935f93921dfe1</link><description>Delete af9013 files&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 73cf835e97fcb904e6fdef35e0d935f93921dfe1&lt;br /&gt;Date: Fri, 20 Jan 2012 14:19:34 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/af90xx-dkms.git/diff/?id=73cf835e97fcb904e6fdef35e0d935f93921dfe1"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/dvb/af9013.c
+++ /dev/null
@@ -1,1697 +0,0 @@
-/*
- * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
- *
- * Copyright (C) 2007 Antti Palosaari 
- *
- * Thanks to Afatech who kindly provided information.
- *
- *    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
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#include kernel.h&gt;
-#include module.h&gt;
-#include moduleparam.h&gt;
-#include init.h&gt;
-#include delay.h&gt;
-#include string.h&gt;
-#include slab.h&gt;
-#include firmware.h&gt;
-
-#include "dvb_frontend.h"
-#include "af9013_priv.h"
-#include "af9013.h"
-#include "compat.h"
-
-int af9013_debug;
-
-struct af9013_state {
-	struct i2c_adapter *i2c;
-	struct dvb_frontend frontend;
-
-	struct af9013_config config;
-
-	u16 signal_strength;
-	u32 ber;
-	u32 ucblocks;
-	u16 snr;
-	u32 frequency;
-	unsigned long next_statistics_check;
-};
-
-static u8 regmask[8] = { 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff };
-
-static int af9013_write_regs(struct af9013_state *state, u8 mbox, u16 reg,
-	u8 *val, u8 len)
-{
-	u8 buf[3+len];
-	struct i2c_msg msg = {
-		.addr = state-&gt;config.demod_address,
-		.flags = 0,
-		.len = sizeof(buf),
-		.buf = buf };
-
-	buf[0] = reg &gt;&gt; 8;
-	buf[1] = reg &amp; 0xff;
-	buf[2] = mbox;
-	memcpy(&amp;buf;[3], val, len);
-
-	if (i2c_transfer(state-&gt;i2c, &amp;msg;, 1) != 1) {
-		warn("I2C write failed reg:%04x len:%d", reg, len);
-		return -EREMOTEIO;
-	}
-	return 0;
-}
-
-static int af9013_write_ofdm_regs(struct af9013_state *state, u16 reg, u8 *val,
-	u8 len)
-{
-	u8 mbox = (1 &lt;&lt; 0)|(1 &lt;&lt; 1)|((len - 1) &lt;&lt; 2)|(0 &lt;&lt; 6)|(0 &lt;&lt; 7);
-	return af9013_write_regs(state, mbox, reg, val, len);
-}
-
-static int af9013_write_ofsm_regs(struct af9013_state *state, u16 reg, u8 *val,
-	u8 len)
-{
-	u8 mbox = (1 &lt;&lt; 0)|(1 &lt;&lt; 1)|((len - 1) &lt;&lt; 2)|(1 &lt;&lt; 6)|(1 &lt;&lt; 7);
-	return af9013_write_regs(state, mbox, reg, val, len);
-}
-
-/* write single register */
-static int af9013_write_reg(struct af9013_state *state, u16 reg, u8 val)
-{
-	return af9013_write_ofdm_regs(state, reg, &amp;val;, 1);
-}
-
-/* read single register */
-static int af9013_read_reg(struct af9013_state *state, u16 reg, u8 *val)
-{
-	u8 obuf[3] = { reg &gt;&gt; 8, reg &amp; 0xff, 0 };
-	u8 ibuf[1];
-	struct i2c_msg msg[2] = {
-		{
-			.addr = state-&gt;config.demod_address,
-			.flags = 0,
-			.len = sizeof(obuf),
-			.buf = obuf
-		}, {
-			.addr = state-&gt;config.demod_address,
-			.flags = I2C_M_RD,
-			.len = sizeof(ibuf),
-			.buf = ibuf
-		}
-	};
-
-	if (i2c_transfer(state-&gt;i2c, msg, 2) != 2) {
-		warn("I2C read failed reg:%04x", reg);
-		return -EREMOTEIO;
-	}
-	*val = ibuf[0];
-	return 0;
-}
-
-static int af9013_write_reg_bits(struct af9013_state *state, u16 reg, u8 pos,
-	u8 len, u8 val)
-{
-	int ret;
-	u8 tmp, mask;
-
-	ret = af9013_read_reg(state, reg, &amp;tmp;);
-	if (ret)
-		return ret;
-
-	mask = regmask[len - 1] &lt;&lt; pos;
-	tmp = (tmp &amp; ~mask) | ((val &lt;&lt; pos) &amp; mask);
-
-	return af9013_write_reg(state, reg, tmp);
-}
-
-static int af9013_read_reg_bits(struct af9013_state *state, u16 reg, u8 pos,
-	u8 len, u8 *val)
-{
-	int ret;
-	u8 tmp;
-
-	ret = af9013_read_reg(state, reg, &amp;tmp;);
-	if (ret)
-		return ret;
-	*val = (tmp &gt;&gt; pos) &amp; regmask[len - 1];
-	return 0;
-}
-
-static int af9013_set_gpio(struct af9013_state *state, u8 gpio, u8 gpioval)
-{
-	int ret;
-	u8 pos;
-	u16 addr;
-	deb_info("%s: gpio:%d gpioval:%02x\n", __func__, gpio, gpioval);
-
-/* GPIO0 &amp; GPIO1 0xd735
-   GPIO2 &amp; GPIO3 0xd736 */
-
-	switch (gpio) {
-	case 0:
-	case 1:
-		addr = 0xd735;
-		break;
-	case 2:
-	case 3:
-		addr = 0xd736;
-		break;
-
-	default:
-		err("invalid gpio:%d\n", gpio);
-		ret = -EINVAL;
-		goto error;
-	};
-
-	switch (gpio) {
-	case 0:
-	case 2:
-		pos = 0;
-		break;
-	case 1:
-	case 3:
-	default:
-		pos = 4;
-		break;
-	};
-
-	ret = af9013_write_reg_bits(state, addr, pos, 4, gpioval);
-
-error:
-	return ret;
-}
-
-static u32 af913_div(u32 a, u32 b, u32 x)
-{
-	u32 r = 0, c = 0, i;
-	deb_info("%s: a:%d b:%d x:%d\n", __func__, a, b, x);
-
-	if (a &gt; b) {
-		c = a / b;
-		a = a - c * b;
-	}
-
-	for (i = 0; i &lt; x; i++) {
-		if (a &gt;= b) {
-			r += 1;
-			a -= b;
-		}
-		a &lt;&lt;= 1;
-		r &lt;&lt;= 1;
-	}
-	r = (c &lt;&lt; (u32)x) + r;
-
-	deb_info("%s: a:%d b:%d x:%d r:%d r:%x\n", __func__, a, b, x, r, r);
-	return r;
-}
-
-static int af9013_set_coeff(struct af9013_state *state, fe_bandwidth_t bw)
-{
-	int ret = 0;
-	u8 i = 0;
-	u8 buf[24];
-	u32 uninitialized_var(ns_coeff1_2048nu);
-	u32 uninitialized_var(ns_coeff1_8191nu);
-	u32 uninitialized_var(ns_coeff1_8192nu);
-	u32 uninitialized_var(ns_coeff1_8193nu);
-	u32 uninitialized_var(ns_coeff2_2k);
-	u32 uninitialized_var(ns_coeff2_8k);
-
-	deb_info("%s: adc_clock:%d bw:%d\n", __func__,
-		state-&gt;config.adc_clock, bw);
-
-	switch (state-&gt;config.adc_clock) {
-	case 28800: /* 28.800 MHz */
-		switch (bw) {
-		case BANDWIDTH_6_MHZ:
-			ns_coeff1_2048nu = 0x01e79e7a;
-			ns_coeff1_8191nu = 0x0079eb6e;
-			ns_coeff1_8192nu = 0x0079e79e;
-			ns_coeff1_8193nu = 0x0079e3cf;
-			ns_coeff2_2k     = 0x00f3cf3d;
-			ns_coeff2_8k     = 0x003cf3cf;
-			break;
-		case BANDWIDTH_7_MHZ:
-			ns_coeff1_2048nu = 0x0238e38e;
-			ns_coeff1_8191nu = 0x008e3d55;
-			ns_coeff1_8192nu = 0x008e38e4;
-			ns_coeff1_8193nu = 0x008e3472;
-			ns_coeff2_2k     = 0x011c71c7;
-			ns_coeff2_8k     = 0x00471c72;
-			break;
-		case BANDWIDTH_8_MHZ:
-			ns_coeff1_2048nu = 0x028a28a3;
-			ns_coeff1_8191nu = 0x00a28f3d;
-			ns_coeff1_8192nu = 0x00a28a29;
-			ns_coeff1_8193nu = 0x00a28514;
-			ns_coeff2_2k     = 0x01451451;
-			ns_coeff2_8k     = 0x00514514;
-			break;
-		default:
-			ret = -EINVAL;
-		}
-		break;
-	case 20480: /* 20.480 MHz */
-		switch (bw) {
-		case BANDWIDTH_6_MHZ:
-			ns_coeff1_2048nu = 0x02adb6dc;
-			ns_coeff1_8191nu = 0x00ab7313;
-			ns_coeff1_8192nu = 0x00ab6db7;
-			ns_coeff1_8193nu = 0x00ab685c;
-			ns_coeff2_2k     = 0x0156db6e;
-			ns_coeff2_8k     = 0x0055b6dc;
-			break;
-		case BANDWIDTH_7_MHZ:
-			ns_coeff1_2048nu = 0x03200001;
-			ns_coeff1_8191nu = 0x00c80640;
-			ns_coeff1_8192nu = 0x00c80000;
-			ns_coeff1_8193nu = 0x00c7f9c0;
-			ns_coeff2_2k     = 0x01900000;
-			ns_coeff2_8k     = 0x00640000;
-			break;
-		case BANDWIDTH_8_MHZ:
-			ns_coeff1_2048nu = 0x03924926;
-			ns_coeff1_8191nu = 0x00e4996e;
-			ns_coeff1_8192nu = 0x00e49249;
-			ns_coeff1_8193nu = 0x00e48b25;
-			ns_coeff2_2k     = 0x01c92493;
-			ns_coeff2_8k     = 0x00724925;
-			break;
-		default:
-			ret = -EINVAL;
-		}
-		break;
-	case 28000: /* 28.000 MHz */
-		switch (bw) {
-		case BANDWIDTH_6_MHZ:
-			ns_coeff1_2048nu = 0x01f58d10;
-			ns_coeff1_8191nu = 0x007d672f;
-			ns_coeff1_8192nu = 0x007d6344;
-			ns_coeff1_8193nu = 0x007d5f59;
-			ns_coeff2_2k     = 0x00fac688;
-			ns_coeff2_8k     = 0x003eb1a2;
-			break;
-		case BANDWIDTH_7_MHZ:
-			ns_coeff1_2048nu = 0x02492492;
-			ns_coeff1_8191nu = 0x00924db7;
-			ns_coeff1_8192nu = 0x00924925;
-			ns_coeff1_8193nu = 0x00924492;
-			ns_coeff2_2k     = 0x01249249;
-			ns_coeff2_8k     = 0x00492492;
-			break;
-		case BANDWIDTH_8_MHZ:
-			ns_coeff1_2048nu = 0x029cbc15;
-			ns_coeff1_8191nu = 0x00a7343f;
-			ns_coeff1_8192nu = 0x00a72f05;
-			ns_coeff1_8193nu = 0x00a729cc;
-			ns_coeff2_2k     = 0x014e5e0a;
-			ns_coeff2_8k     = 0x00539783;
-			break;
-		default:
-			ret = -EINVAL;
-		}
-		break;
-	case 25000: /* 25.000 MHz */
-		switch (bw) {
-		case BANDWIDTH_6_MHZ:
-			ns_coeff1_2048nu = 0x0231bcb5;
-			ns_coeff1_8191nu = 0x008c7391;
-			ns_coeff1_8192nu = 0x008c6f2d;
-			ns_coeff1_8193nu = 0x008c6aca;
-			ns_coeff2_2k     = 0x0118de5b;
-			ns_coeff2_8k     = 0x00463797;
-			break;
-		case BANDWIDTH_7_MHZ:
-			ns_coeff1_2048nu = 0x028f5c29;
-			ns_coeff1_8191nu = 0x00a3dc29;
-			ns_coeff1_8192nu = 0x00a3d70a;
-			ns_coeff1_8193nu = 0x00a3d1ec;
-			ns_coeff2_2k     = 0x0147ae14;
-			ns_coeff2_8k     = 0x0051eb85;
-			break;
-		case BANDWIDTH_8_MHZ:
-			ns_coeff1_2048nu = 0x02ecfb9d;
-			ns_coeff1_8191nu = 0x00bb44c1;
-			ns_coeff1_8192nu = 0x00bb3ee7;
-			ns_coeff1_8193nu = 0x00bb390d;
-			ns_coeff2_2k     = 0x01767dce;
-			ns_coeff2_8k     = 0x005d9f74;
-			break;
-		default:
-			ret = -EINVAL;
-		}
-		break;
-	default:
-		err("invalid xtal");
-		return -EINVAL;
-	}
-	if (ret) {
-		err("invalid bandwidth");
-		return ret;
-	}
-
-	buf[i++] = (u8) ((ns_coeff1_2048nu &amp; 0x03000000) &gt;&gt; 24);
-	buf[i++] = (u8) ((ns_coeff1_2048nu &amp; 0x00ff0000) &gt;&gt; 16);
-	buf[i++] = (u8) ((ns_coeff1_2048nu &amp; 0x0000ff00) &gt;&gt; 8);
-	buf[i++] = (u8) ((ns_coeff1_2048nu &amp; 0x000000ff));
-	buf[i++] = (u8) ((ns_coeff2_2k     &amp; 0x01c00000) &gt;&gt; 22);
-	buf[i++] = (u8) ((ns_coeff2_2k     &amp; 0x003fc000) &gt;&gt; 14);
-	buf[i++] = (u8) ((ns_coeff2_2k     &amp; 0x00003fc0) &gt;&gt; 6);
-	buf[i++] = (u8) ((ns_coeff2_2k     &amp; 0x0000003f));
-	buf[i++] = (u8) ((ns_coeff1_8191nu &amp; 0x03000000) &gt;&gt; 24);
-	buf[i++] = (u8) ((ns_coeff1_8191nu &amp; 0x00ffc000) &gt;&gt; 16);
-	buf[i++] = (u8) ((ns_coeff1_8191nu &amp; 0x0000ff00) &gt;&gt; 8);
-	buf[i++] = (u8) ((ns_coeff1_8191nu &amp; 0x000000ff));
-	buf[i++] = (u8) ((ns_coeff1_8192nu &amp; 0x03000000) &gt;&gt; 24);
-	buf[i++] = (u8) ((ns_coeff1_8192nu &amp; 0x00ffc000) &gt;&gt; 16);
-	buf[i++] = (u8) ((ns_coeff1_8192nu &amp; 0x0000ff00) &gt;&gt; 8);
-	buf[i++] = (u8) ((ns_coeff1_8192nu &amp; 0x000000ff));
-	buf[i++] = (u8) ((ns_coeff1_8193nu &amp; 0x03000000) &gt;&gt; 24);
-	buf[i++] = (u8) ((ns_coeff1_8193nu &amp; 0x00ffc000) &gt;&gt; 16);
-	buf[i++] = (u8) ((ns_coeff1_8193nu &amp; 0x0000ff00) &gt;&gt; 8);
-	buf[i++] = (u8) ((ns_coeff1_8193nu &amp; 0x000000ff));
-	buf[i++] = (u8) ((ns_coeff2_8k     &amp; 0x01c00000) &gt;&gt; 22);
-	buf[i++] = (u8) ((ns_coeff2_8k     &amp; 0x003fc000) &gt;&gt; 14);
-	buf[i++] = (u8) ((ns_coeff2_8k     &amp; 0x00003fc0) &gt;&gt; 6);
-	buf[i++] = (u8) ((ns_coeff2_8k     &amp; 0x0000003f));
-
-	deb_info("%s: coeff:", __func__);
-	debug_dump(buf, sizeof(buf), deb_info);
-
-	/* program */
-	for (i = 0; i &lt; sizeof(buf); i++) {
-		ret = af9013_write_reg(state, 0xae00 + i, buf[i]);
-		if (ret)
-			break;
-	}
-
-	return ret;
-}
-
-static int af9013_set_adc_ctrl(struct af9013_state *state)
-{
-	int ret;
-	u8 buf[3], tmp, i;
-	u32 adc_cw;
-
-	deb_info("%s: adc_clock:%d\n", __func__, state-&gt;config.adc_clock);
-
-	/* adc frequency type */
-	switch (state-&gt;config.adc_clock) {
-	case 28800: /* 28.800 MHz */
-		tmp = 0;
-		break;
-	case 20480: /* 20.480 MHz */
-		tmp = 1;
-		break;
-	case 28000: /* 28.000 MHz */
-		tmp = 2;
-		break;
-	case 25000: /* 25.000 MHz */
-		tmp = 3;
-		break;
-	default:
-		err("invalid xtal");
-		return -EINVAL;
-	}
-
-	adc_cw = af913_div(state-&gt;config.adc_clock*1000, 1000000ul, 19ul);
-
-	buf[0] = (u8) ((adc_cw &amp; 0x000000ff));
-	buf[1] = (u8) ((adc_cw &amp; 0x0000ff00) &gt;&gt; 8);
-	buf[2] = (u8) ((adc_cw &amp; 0x00ff0000) &gt;&gt; 16);
-
-	deb_info("%s: adc_cw:", __func__);
-	debug_dump(buf, sizeof(buf), deb_info);
-
-	/* program */
-	for (i = 0; i &lt; sizeof(buf); i++) {
-		ret = af9013_write_reg(state, 0xd180 + i, buf[i]);
-		if (ret)
-			goto error;
-	}
-	ret = af9013_write_reg_bits(state, 0x9bd2, 0, 4, tmp);
-error:
-	return ret;
-}
-
-static int af9013_set_freq_ctrl(struct af9013_state *state, fe_bandwidth_t bw)
-{
-	int ret;
-	u16 addr;
-	u8 buf[3], i, j;
-	u32 adc_freq, freq_cw;
-	s8 bfs_spec_inv;
-	int if_sample_freq;
-
-	for (j = 0; j &lt; 3; j++) {
-		if (j == 0) {
-			addr = 0xd140; /* fcw normal */
-			bfs_spec_inv = state-&gt;config.rf_spec_inv ? -1 : 1;
-		} else if (j == 1) {
-			addr = 0x9be7; /* fcw dummy ram */
-			bfs_spec_inv = state-&gt;config.rf_spec_inv ? -1 : 1;
-		} else {
-			addr = 0x9bea; /* fcw inverted */
-			bfs_spec_inv = state-&gt;config.rf_spec_inv ? 1 : -1;
-		}
-
-		adc_freq       = state-&gt;config.adc_clock * 1000;
-		if_sample_freq = state-&gt;config.tuner_if * 1000;
-
-		/* TDA18271 uses different sampling freq for every bw */
-		if (state-&gt;config.tuner == AF9013_TUNER_TDA18271) {
-			switch (bw) {
-			case BANDWIDTH_6_MHZ:
-				if_sample_freq = 3300000; /* 3.3 MHz */
-				break;
-			case BANDWIDTH_7_MHZ:
-				if_sample_freq = 3800000; /* 3.8 MHz */
-				break;
-			case BANDWIDTH_8_MHZ:
-			default:
-				if_sample_freq = 4300000; /* 4.3 MHz */
-				break;
-			}
-		}
-
-		while (if_sample_freq &gt; (adc_freq / 2))
-			if_sample_freq = if_sample_freq - adc_freq;
-
-		if (if_sample_freq &gt;= 0)
-			bfs_spec_inv = bfs_spec_inv * (-1);
-		else
-			if_sample_freq = if_sample_freq * (-1);
-
-		freq_cw = af913_div(if_sample_freq, adc_freq, 23ul);
-
-		if (bfs_spec_inv == -1)
-			freq_cw = 0x00800000 - freq_cw;
-
-		buf[0] = (u8) ((freq_cw &amp; 0x000000ff));
-		buf[1] = (u8) ((freq_cw &amp; 0x0000ff00) &gt;&gt; 8);
-		buf[2] = (u8) ((freq_cw &amp; 0x007f0000) &gt;&gt; 16);
-
-
-		deb_info("%s: freq_cw:", __func__);
-		debug_dump(buf, sizeof(buf), deb_info);
-
-		/* program */
-		for (i = 0; i &lt; sizeof(buf); i++) {
-			ret = af9013_write_reg(state, addr++, buf[i]);
-			if (ret)
-				goto error;
-		}
-	}
-error:
-	return ret;
-}
-
-static int af9013_set_ofdm_params(struct af9013_state *state,
-	struct dvb_ofdm_parameters *params, u8 *auto_mode)
-{
-	int ret;
-	u8 i, buf[3] = {0, 0, 0};
-	*auto_mode = 0; /* set if parameters are requested to auto set */
-
-	/* Try auto-detect transmission parameters in case of AUTO requested or
-	   garbage parameters given by application for compatibility.
-	   MPlayer seems to provide garbage parameters currently. */
-
-	switch (params-&gt;transmission_mode) {
-	case TRANSMISSION_MODE_AUTO:
-		*auto_mode = 1;
-	case TRANSMISSION_MODE_2K:
-		break;
-	case TRANSMISSION_MODE_8K:
-		buf[0] |= (1 &lt;&lt; 0);
-		break;
-	default:
-		deb_info("%s: invalid transmission_mode\n", __func__);
-		*auto_mode = 1;
-	}
-
-	switch (params-&gt;guard_interval) {
-	case GUARD_INTERVAL_AUTO:
-		*auto_mode = 1;
-	case GUARD_INTERVAL_1_32:
-		break;
-	case GUARD_INTERVAL_1_16:
-		buf[0] |= (1 &lt;&lt; 2);
-		break;
-	case GUARD_INTERVAL_1_8:
-		buf[0] |= (2 &lt;&lt; 2);
-		break;
-	case GUARD_INTERVAL_1_4:
-		buf[0] |= (3 &lt;&lt; 2);
-		break;
-	default:
-		deb_info("%s: invalid guard_interval\n", __func__);
-		*auto_mode = 1;
-	}
-
-	switch (params-&gt;hierarchy_information) {
-	case HIERARCHY_AUTO:
-		*auto_mode = 1;
-	case HIERARCHY_NONE:
-		break;
-	case HIERARCHY_1:
-		buf[0] |= (1 &lt;&lt; 4);
-		break;
-	case HIERARCHY_2:
-		buf[0] |= (2 &lt;&lt; 4);
-		break;
-	case HIERARCHY_4:
-		buf[0] |= (3 &lt;&lt; 4);
-		break;
-	default:
-		deb_info("%s: invalid hierarchy_information\n", __func__);
-		*auto_mode = 1;
-	};
-
-	switch (params-&gt;constellation) {
-	case QAM_AUTO:
-		*auto_mode = 1;
-	case QPSK:
-		break;
-	case QAM_16:
-		buf[1] |= (1 &lt;&lt; 6);
-		break;
-	case QAM_64:
-		buf[1] |= (2 &lt;&lt; 6);
-		break;
-	default:
-		deb_info("%s: invalid constellation\n", __func__);
-		*auto_mode = 1;
-	}
-
-	/* Use HP. How and which case we can switch to LP? */
-	buf[1] |= (1 &lt;&lt; 4);
-
-	switch (params-&gt;code_rate_HP) {
-	case FEC_AUTO:
-		*auto_mode = 1;
-	case FEC_1_2:
-		break;
-	case FEC_2_3:
-		buf[2] |= (1 &lt;&lt; 0);
-		break;
-	case FEC_3_4:
-		buf[2] |= (2 &lt;&lt; 0);
-		break;
-	case FEC_5_6:
-		buf[2] |= (3 &lt;&lt; 0);
-		break;
-	case FEC_7_8:
-		buf[2] |= (4 &lt;&lt; 0);
-		break;
-	default:
-		deb_info("%s: invalid code_rate_HP\n", __func__);
-		*auto_mode = 1;
-	}
-
-	switch (params-&gt;code_rate_LP) {
-	case FEC_AUTO:
-	/* if HIERARCHY_NONE and FEC_NONE then LP FEC is set to FEC_AUTO
-	   by dvb_frontend.c for compatibility */
-		if (params-&gt;hierarchy_information != HIERARCHY_NONE)
-			*auto_mode = 1;
-	case FEC_1_2:
-		break;
-	case FEC_2_3:
-		buf[2] |= (1 &lt;&lt; 3);
-		break;
-	case FEC_3_4:
-		buf[2] |= (2 &lt;&lt; 3);
-		break;
-	case FEC_5_6:
-		buf[2] |= (3 &lt;&lt; 3);
-		break;
-	case FEC_7_8:
-		buf[2] |= (4 &lt;&lt; 3);
-		break;
-	case FEC_NONE:
-		if (params-&gt;hierarchy_information == HIERARCHY_AUTO)
-			break;
-	default:
-		deb_info("%s: invalid code_rate_LP\n", __func__);
-		*auto_mode = 1;
-	}
-
-	switch (params-&gt;bandwidth) {
-	case BANDWIDTH_6_MHZ:
-		break;
-	case BANDWIDTH_7_MHZ:
-		buf[1] |= (1 &lt;&lt; 2);
-		break;
-	case BANDWIDTH_8_MHZ:
-		buf[1] |= (2 &lt;&lt; 2);
-		break;
-	default:
-		deb_info("%s: invalid bandwidth\n", __func__);
-		buf[1] |= (2 &lt;&lt; 2); /* cannot auto-detect BW, try 8 MHz */
-	}
-
-	/* program */
-	for (i = 0; i &lt; sizeof(buf); i++) {
-		ret = af9013_write_reg(state, 0xd3c0 + i, buf[i]);
-		if (ret)
-			break;
-	}
-
-	return ret;
-}
-
-static int af9013_reset(struct af9013_state *state, u8 sleep)
-{
-	int ret;
-	u8 tmp, i;
-	deb_info("%s\n", __func__);
-
-	/* enable OFDM reset */
-	ret = af9013_write_reg_bits(state, 0xd417, 4, 1, 1);
-	if (ret)
-		goto error;
-
-	/* start reset mechanism */
-	ret = af9013_write_reg(state, 0xaeff, 1);
-	if (ret)
-		goto error;
-
-	/* reset is done when bit 1 is set */
-	for (i = 0; i &lt; 150; i++) {
-		ret = af9013_read_reg_bits(state, 0xd417, 1, 1, &amp;tmp;);
-		if (ret)
-			goto error;
-		if (tmp)
-			break; /* reset done */
-		msleep(10);
-	}
-	if (!tmp)
-		return -ETIMEDOUT;
-
-	/* don't clear reset when going to sleep */
-	if (!sleep) {
-		/* clear OFDM reset */
-		ret = af9013_write_reg_bits(state, 0xd417, 1, 1, 0);
-		if (ret)
-			goto error;
-
-		/* disable OFDM reset */
-		ret = af9013_write_reg_bits(state, 0xd417, 4, 1, 0);
-	}
-error:
-	return ret;
-}
-
-static int af9013_power_ctrl(struct af9013_state *state, u8 onoff)
-{
-	int ret;
-	deb_info("%s: onoff:%d\n", __func__, onoff);
-
-	if (onoff) {
-		/* power on */
-		ret = af9013_write_reg_bits(state, 0xd73a, 3, 1, 0);
-		if (ret)
-			goto error;
-		ret = af9013_write_reg_bits(state, 0xd417, 1, 1, 0);
-		if (ret)
-			goto error;
-		ret = af9013_write_reg_bits(state, 0xd417, 4, 1, 0);
-	} else {
-		/* power off */
-		ret = af9013_reset(state, 1);
-		if (ret)
-			goto error;
-		ret = af9013_write_reg_bits(state, 0xd73a, 3, 1, 1);
-	}
-error:
-	return ret;
-}
-
-static int af9013_lock_led(struct af9013_state *state, u8 onoff)
-{
-	deb_info("%s: onoff:%d\n", __func__, onoff);
-
-	return af9013_write_reg_bits(state, 0xd730, 0, 1, onoff);
-}
-
-static int af9013_set_frontend(struct dvb_frontend *fe,
-	struct dvb_frontend_parameters *params)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	u8 auto_mode; /* auto set TPS */
-
-	deb_info("%s: freq:%d bw:%d\n", __func__, params-&gt;frequency,
-		params-&gt;u.ofdm.bandwidth);
-
-	state-&gt;frequency = params-&gt;frequency;
-
-	/* program CFOE coefficients */
-	ret = af9013_set_coeff(state, params-&gt;u.ofdm.bandwidth);
-	if (ret)
-		goto error;
-
-	/* program frequency control */
-	ret = af9013_set_freq_ctrl(state, params-&gt;u.ofdm.bandwidth);
-	if (ret)
-		goto error;
-
-	/* clear TPS lock flag (inverted flag) */
-	ret = af9013_write_reg_bits(state, 0xd330, 3, 1, 1);
-	if (ret)
-		goto error;
-
-	/* clear MPEG2 lock flag */
-	ret = af9013_write_reg_bits(state, 0xd507, 6, 1, 0);
-	if (ret)
-		goto error;
-
-	/* empty channel function */
-	ret = af9013_write_reg_bits(state, 0x9bfe, 0, 1, 0);
-	if (ret)
-		goto error;
-
-	/* empty DVB-T channel function */
-	ret = af9013_write_reg_bits(state, 0x9bc2, 0, 1, 0);
-	if (ret)
-		goto error;
-
-	/* program tuner */
-	if (fe-&gt;ops.tuner_ops.set_params)
-		fe-&gt;ops.tuner_ops.set_params(fe, params);
-
-	/* program TPS and bandwidth, check if auto mode needed */
-	ret = af9013_set_ofdm_params(state, &amp;params-;&gt;u.ofdm, &amp;auto;_mode);
-	if (ret)
-		goto error;
-
-	if (auto_mode) {
-		/* clear easy mode flag */
-		ret = af9013_write_reg(state, 0xaefd, 0);
-		deb_info("%s: auto TPS\n", __func__);
-	} else {
-		/* set easy mode flag */
-		ret = af9013_write_reg(state, 0xaefd, 1);
-		if (ret)
-			goto error;
-		ret = af9013_write_reg(state, 0xaefe, 0);
-		deb_info("%s: manual TPS\n", __func__);
-	}
-	if (ret)
-		goto error;
-
-	/* everything is set, lets try to receive channel - OFSM GO! */
-	ret = af9013_write_reg(state, 0xffff, 0);
-	if (ret)
-		goto error;
-
-error:
-	return ret;
-}
-
-static int af9013_get_frontend(struct dvb_frontend *fe,
-	struct dvb_frontend_parameters *p)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	u8 i, buf[3];
-	deb_info("%s\n", __func__);
-
-	/* read TPS registers */
-	for (i = 0; i &lt; 3; i++) {
-		ret = af9013_read_reg(state, 0xd3c0 + i, &amp;buf;[i]);
-		if (ret)
-			goto error;
-	}
-
-	switch ((buf[1] &gt;&gt; 6) &amp; 3) {
-	case 0:
-		p-&gt;u.ofdm.constellation = QPSK;
-		break;
-	case 1:
-		p-&gt;u.ofdm.constellation = QAM_16;
-		break;
-	case 2:
-		p-&gt;u.ofdm.constellation = QAM_64;
-		break;
-	}
-
-	switch ((buf[0] &gt;&gt; 0) &amp; 3) {
-	case 0:
-		p-&gt;u.ofdm.transmission_mode = TRANSMISSION_MODE_2K;
-		break;
-	case 1:
-		p-&gt;u.ofdm.transmission_mode = TRANSMISSION_MODE_8K;
-	}
-
-	switch ((buf[0] &gt;&gt; 2) &amp; 3) {
-	case 0:
-		p-&gt;u.ofdm.guard_interval = GUARD_INTERVAL_1_32;
-		break;
-	case 1:
-		p-&gt;u.ofdm.guard_interval = GUARD_INTERVAL_1_16;
-		break;
-	case 2:
-		p-&gt;u.ofdm.guard_interval = GUARD_INTERVAL_1_8;
-		break;
-	case 3:
-		p-&gt;u.ofdm.guard_interval = GUARD_INTERVAL_1_4;
-		break;
-	}
-
-	switch ((buf[0] &gt;&gt; 4) &amp; 7) {
-	case 0:
-		p-&gt;u.ofdm.hierarchy_information = HIERARCHY_NONE;
-		break;
-	case 1:
-		p-&gt;u.ofdm.hierarchy_information = HIERARCHY_1;
-		break;
-	case 2:
-		p-&gt;u.ofdm.hierarchy_information = HIERARCHY_2;
-		break;
-	case 3:
-		p-&gt;u.ofdm.hierarchy_information = HIERARCHY_4;
-		break;
-	}
-
-	switch ((buf[2] &gt;&gt; 0) &amp; 7) {
-	case 0:
-		p-&gt;u.ofdm.code_rate_HP = FEC_1_2;
-		break;
-	case 1:
-		p-&gt;u.ofdm.code_rate_HP = FEC_2_3;
-		break;
-	case 2:
-		p-&gt;u.ofdm.code_rate_HP = FEC_3_4;
-		break;
-	case 3:
-		p-&gt;u.ofdm.code_rate_HP = FEC_5_6;
-		break;
-	case 4:
-		p-&gt;u.ofdm.code_rate_HP = FEC_7_8;
-		break;
-	}
-
-	switch ((buf[2] &gt;&gt; 3) &amp; 7) {
-	case 0:
-		p-&gt;u.ofdm.code_rate_LP = FEC_1_2;
-		break;
-	case 1:
-		p-&gt;u.ofdm.code_rate_LP = FEC_2_3;
-		break;
-	case 2:
-		p-&gt;u.ofdm.code_rate_LP = FEC_3_4;
-		break;
-	case 3:
-		p-&gt;u.ofdm.code_rate_LP = FEC_5_6;
-		break;
-	case 4:
-		p-&gt;u.ofdm.code_rate_LP = FEC_7_8;
-		break;
-	}
-
-	switch ((buf[1] &gt;&gt; 2) &amp; 3) {
-	case 0:
-		p-&gt;u.ofdm.bandwidth = BANDWIDTH_6_MHZ;
-		break;
-	case 1:
-		p-&gt;u.ofdm.bandwidth = BANDWIDTH_7_MHZ;
-		break;
-	case 2:
-		p-&gt;u.ofdm.bandwidth = BANDWIDTH_8_MHZ;
-		break;
-	}
-
-	p-&gt;inversion = INVERSION_AUTO;
-	p-&gt;frequency = state-&gt;frequency;
-
-error:
-	return ret;
-}
-
-static int af9013_update_ber_unc(struct dvb_frontend *fe)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	u8 buf[3], i;
-	u32 error_bit_count = 0;
-	u32 total_bit_count = 0;
-	u32 abort_packet_count = 0;
-
-	state-&gt;ber = 0;
-
-	/* check if error bit count is ready */
-	ret = af9013_read_reg_bits(state, 0xd391, 4, 1, &amp;buf;[0]);
-	if (ret)
-		goto error;
-	if (!buf[0])
-		goto exit;
-
-	/* get RSD packet abort count */
-	for (i = 0; i &lt; 2; i++) {
-		ret = af9013_read_reg(state, 0xd38a + i, &amp;buf;[i]);
-		if (ret)
-			goto error;
-	}
-	abort_packet_count = (buf[1] &lt;&lt; 8) + buf[0];
-
-	/* get error bit count */
-	for (i = 0; i &lt; 3; i++) {
-		ret = af9013_read_reg(state, 0xd387 + i, &amp;buf;[i]);
-		if (ret)
-			goto error;
-	}
-	error_bit_count = (buf[2] &lt;&lt; 16) + (buf[1] &lt;&lt; 8) + buf[0];
-	error_bit_count = error_bit_count - abort_packet_count * 8 * 8;
-
-	/* get used RSD counting period (10000 RSD packets used) */
-	for (i = 0; i &lt; 2; i++) {
-		ret = af9013_read_reg(state, 0xd385 + i, &amp;buf;[i]);
-		if (ret)
-			goto error;
-	}
-	total_bit_count = (buf[1] &lt;&lt; 8) + buf[0];
-	total_bit_count = total_bit_count - abort_packet_count;
-	total_bit_count = total_bit_count * 204 * 8;
-
-	if (total_bit_count)
-		state-&gt;ber = error_bit_count * 1000000000 / total_bit_count;
-
-	state-&gt;ucblocks += abort_packet_count;
-
-	deb_info("%s: err bits:%d total bits:%d abort count:%d\n", __func__,
-		error_bit_count, total_bit_count, abort_packet_count);
-
-	/* set BER counting range */
-	ret = af9013_write_reg(state, 0xd385, 10000 &amp; 0xff);
-	if (ret)
-		goto error;
-	ret = af9013_write_reg(state, 0xd386, 10000 &gt;&gt; 8);
-	if (ret)
-		goto error;
-	/* reset and start BER counter */
-	ret = af9013_write_reg_bits(state, 0xd391, 4, 1, 1);
-	if (ret)
-		goto error;
-
-exit:
-error:
-	return ret;
-}
-
-static int af9013_update_snr(struct dvb_frontend *fe)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	u8 buf[3], i, len;
-	u32 quant = 0;
-	struct snr_table *uninitialized_var(snr_table);
-
-	/* check if quantizer ready (for snr) */
-	ret = af9013_read_reg_bits(state, 0xd2e1, 3, 1, &amp;buf;[0]);
-	if (ret)
-		goto error;
-	if (buf[0]) {
-		/* quantizer ready - read it */
-		for (i = 0; i &lt; 3; i++) {
-			ret = af9013_read_reg(state, 0xd2e3 + i, &amp;buf;[i]);
-			if (ret)
-				goto error;
-		}
-		quant = (buf[2] &lt;&lt; 16) + (buf[1] &lt;&lt; 8) + buf[0];
-
-		/* read current constellation */
-		ret = af9013_read_reg(state, 0xd3c1, &amp;buf;[0]);
-		if (ret)
-			goto error;
-
-		switch ((buf[0] &gt;&gt; 6) &amp; 3) {
-		case 0:
-			len = ARRAY_SIZE(qpsk_snr_table);
-			snr_table = qpsk_snr_table;
-			break;
-		case 1:
-			len = ARRAY_SIZE(qam16_snr_table);
-			snr_table = qam16_snr_table;
-			break;
-		case 2:
-			len = ARRAY_SIZE(qam64_snr_table);
-			snr_table = qam64_snr_table;
-			break;
-		default:
-			len = 0;
-			break;
-		}
-
-		if (len) {
-			for (i = 0; i &lt; len; i++) {
-				if (quant &lt; snr_table[i].val) {
-					state-&gt;snr = snr_table[i].snr * 10;
-					break;
-				}
-			}
-		}
-
-		/* set quantizer super frame count */
-		ret = af9013_write_reg(state, 0xd2e2, 1);
-		if (ret)
-			goto error;
-
-		/* check quantizer availability */
-		for (i = 0; i &lt; 10; i++) {
-			msleep(10);
-			ret = af9013_read_reg_bits(state, 0xd2e6, 0, 1,
-				&amp;buf;[0]);
-			if (ret)
-				goto error;
-			if (!buf[0])
-				break;
-		}
-
-		/* reset quantizer */
-		ret = af9013_write_reg_bits(state, 0xd2e1, 3, 1, 1);
-		if (ret)
-			goto error;
-	}
-
-error:
-	return ret;
-}
-
-static int af9013_update_signal_strength(struct dvb_frontend *fe)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	u8 tmp0;
-	u8 rf_gain, rf_50, rf_80, if_gain, if_50, if_80;
-	int signal_strength;
-
-	deb_info("%s\n", __func__);
-
-	state-&gt;signal_strength = 0;
-
-	ret = af9013_read_reg_bits(state, 0x9bee, 0, 1, &amp;tmp0;);
-	if (ret)
-		goto error;
-	if (tmp0) {
-		ret = af9013_read_reg(state, 0x9bbd, &amp;rf;_50);
-		if (ret)
-			goto error;
-		ret = af9013_read_reg(state, 0x9bd0, &amp;rf;_80);
-		if (ret)
-			goto error;
-		ret = af9013_read_reg(state, 0x9be2, &amp;if;_50);
-		if (ret)
-			goto error;
-		ret = af9013_read_reg(state, 0x9be4, &amp;if;_80);
-		if (ret)
-			goto error;
-		ret = af9013_read_reg(state, 0xd07c, &amp;rf;_gain);
-		if (ret)
-			goto error;
-		ret = af9013_read_reg(state, 0xd07d, &amp;if;_gain);
-		if (ret)
-			goto error;
-		signal_strength = (0xffff / (9 * (rf_50 + if_50) - \
-			11 * (rf_80 + if_80))) * (10 * (rf_gain + if_gain) - \
-			11 * (rf_80 + if_80));
-		if (signal_strength &lt; 0)
-			signal_strength = 0;
-		else if (signal_strength &gt; 0xffff)
-			signal_strength = 0xffff;
-
-		state-&gt;signal_strength = signal_strength;
-	}
-
-error:
-	return ret;
-}
-
-static int af9013_update_statistics(struct dvb_frontend *fe)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-
-	if (time_before(jiffies, state-&gt;next_statistics_check))
-		return 0;
-
-	/* set minimum statistic update interval */
-	state-&gt;next_statistics_check = jiffies + msecs_to_jiffies(1200);
-
-	ret = af9013_update_signal_strength(fe);
-	if (ret)
-		goto error;
-	ret = af9013_update_snr(fe);
-	if (ret)
-		goto error;
-	ret = af9013_update_ber_unc(fe);
-	if (ret)
-		goto error;
-
-error:
-	return ret;
-}
-
-static int af9013_get_tune_settings(struct dvb_frontend *fe,
-	struct dvb_frontend_tune_settings *fesettings)
-{
-	fesettings-&gt;min_delay_ms = 800;
-	fesettings-&gt;step_size = 0;
-	fesettings-&gt;max_drift = 0;
-
-	return 0;
-}
-
-static int af9013_read_status(struct dvb_frontend *fe, fe_status_t *status)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret = 0;
-	u8 tmp;
-	*status = 0;
-
-	/* TPS lock */
-	ret = af9013_read_reg_bits(state, 0xd330, 3, 1, &amp;tmp;);
-	if (ret)
-		goto error;
-	if (tmp)
-		*status |= FE_HAS_VITERBI | FE_HAS_CARRIER | FE_HAS_SIGNAL;
-
-	/* MPEG2 lock */
-	ret = af9013_read_reg_bits(state, 0xd507, 6, 1, &amp;tmp;);
-	if (ret)
-		goto error;
-	if (tmp)
-		*status |= FE_HAS_SYNC | FE_HAS_LOCK;
-
-	if (!(*status &amp; FE_HAS_SIGNAL)) {
-		/* AGC lock */
-		ret = af9013_read_reg_bits(state, 0xd1a0, 6, 1, &amp;tmp;);
-		if (ret)
-			goto error;
-		if (tmp)
-			*status |= FE_HAS_SIGNAL;
-	}
-
-	if (!(*status &amp; FE_HAS_CARRIER)) {
-		/* CFO lock */
-		ret = af9013_read_reg_bits(state, 0xd333, 7, 1, &amp;tmp;);
-		if (ret)
-			goto error;
-		if (tmp)
-			*status |= FE_HAS_CARRIER;
-	}
-
-	if (!(*status &amp; FE_HAS_CARRIER)) {
-		/* SFOE lock */
-		ret = af9013_read_reg_bits(state, 0xd334, 6, 1, &amp;tmp;);
-		if (ret)
-			goto error;
-		if (tmp)
-			*status |= FE_HAS_CARRIER;
-	}
-
-	ret = af9013_update_statistics(fe);
-
-error:
-	return ret;
-}
-
-
-static int af9013_read_ber(struct dvb_frontend *fe, u32 *ber)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	ret = af9013_update_statistics(fe);
-	*ber = state-&gt;ber;
-	return ret;
-}
-
-static int af9013_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	ret = af9013_update_statistics(fe);
-	*strength = state-&gt;signal_strength;
-	return ret;
-}
-
-static int af9013_read_snr(struct dvb_frontend *fe, u16 *snr)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	ret = af9013_update_statistics(fe);
-	*snr = state-&gt;snr;
-	return ret;
-}
-
-static int af9013_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	ret = af9013_update_statistics(fe);
-	*ucblocks = state-&gt;ucblocks;
-	return ret;
-}
-
-static int af9013_sleep(struct dvb_frontend *fe)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret;
-	deb_info("%s\n", __func__);
-
-	ret = af9013_lock_led(state, 0);
-	if (ret)
-		goto error;
-
-	ret = af9013_power_ctrl(state, 0);
-error:
-	return ret;
-}
-
-static int af9013_init(struct dvb_frontend *fe)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	int ret, i, len;
-	u8 tmp0, tmp1;
-	struct regdesc *init;
-	deb_info("%s\n", __func__);
-
-	/* reset OFDM */
-	ret = af9013_reset(state, 0);
-	if (ret)
-		goto error;
-
-	/* power on */
-	ret = af9013_power_ctrl(state, 1);
-	if (ret)
-		goto error;
-
-	/* enable ADC */
-	ret = af9013_write_reg(state, 0xd73a, 0xa4);
-	if (ret)
-		goto error;
-
-	/* write API version to firmware */
-	for (i = 0; i &lt; sizeof(state-&gt;config.api_version); i++) {
-		ret = af9013_write_reg(state, 0x9bf2 + i,
-			state-&gt;config.api_version[i]);
-		if (ret)
-			goto error;
-	}
-
-	/* program ADC control */
-	ret = af9013_set_adc_ctrl(state);
-	if (ret)
-		goto error;
-
-	/* set I2C master clock */
-	ret = af9013_write_reg(state, 0xd416, 0x14);
-	if (ret)
-		goto error;
-
-	/* set 16 embx */
-	ret = af9013_write_reg_bits(state, 0xd700, 1, 1, 1);
-	if (ret)
-		goto error;
-
-	/* set no trigger */
-	ret = af9013_write_reg_bits(state, 0xd700, 2, 1, 0);
-	if (ret)
-		goto error;
-
-	/* set read-update bit for constellation */
-	ret = af9013_write_reg_bits(state, 0xd371, 1, 1, 1);
-	if (ret)
-		goto error;
-
-	/* enable FEC monitor */
-	ret = af9013_write_reg_bits(state, 0xd392, 1, 1, 1);
-	if (ret)
-		goto error;
-
-	/* load OFSM settings */
-	deb_info("%s: load ofsm settings\n", __func__);
-	len = ARRAY_SIZE(ofsm_init);
-	init = ofsm_init;
-	for (i = 0; i &lt; len; i++) {
-		ret = af9013_write_reg_bits(state, init[i].addr, init[i].pos,
-			init[i].len, init[i].val);
-		if (ret)
-			goto error;
-	}
-
-	/* load tuner specific settings */
-	deb_info("%s: load tuner specific settings\n", __func__);
-	switch (state-&gt;config.tuner) {
-	case AF9013_TUNER_MXL5003D:
-		len = ARRAY_SIZE(tuner_init_mxl5003d);
-		init = tuner_init_mxl5003d;
-		break;
-	case AF9013_TUNER_MXL5005D:
-	case AF9013_TUNER_MXL5005R:
-		len = ARRAY_SIZE(tuner_init_mxl5005);
-		init = tuner_init_mxl5005;
-		break;
-	case AF9013_TUNER_ENV77H11D5:
-		len = ARRAY_SIZE(tuner_init_env77h11d5);
-		init = tuner_init_env77h11d5;
-		break;
-	case AF9013_TUNER_MT2060:
-		len = ARRAY_SIZE(tuner_init_mt2060);
-		init = tuner_init_mt2060;
-		break;
-	case AF9013_TUNER_MC44S803:
-		len = ARRAY_SIZE(tuner_init_mc44s803);
-		init = tuner_init_mc44s803;
-		break;
-	case AF9013_TUNER_QT1010:
-	case AF9013_TUNER_QT1010A:
-		len = ARRAY_SIZE(tuner_init_qt1010);
-		init = tuner_init_qt1010;
-		break;
-	case AF9013_TUNER_MT2060_2:
-		len = ARRAY_SIZE(tuner_init_mt2060_2);
-		init = tuner_init_mt2060_2;
-		break;
-	case AF9013_TUNER_TDA18271:
-		len = ARRAY_SIZE(tuner_init_tda18271);
-		init = tuner_init_tda18271;
-		break;
-	case AF9013_TUNER_UNKNOWN:
-	default:
-		len = ARRAY_SIZE(tuner_init_unknown);
-		init = tuner_init_unknown;
-		break;
-	}
-
-	for (i = 0; i &lt; len; i++) {
-		ret = af9013_write_reg_bits(state, init[i].addr, init[i].pos,
-			init[i].len, init[i].val);
-		if (ret)
-			goto error;
-	}
-
-	/* set TS mode */
-	deb_info("%s: setting ts mode\n", __func__);
-	tmp0 = 0; /* parallel mode */
-	tmp1 = 0; /* serial mode */
-	switch (state-&gt;config.output_mode) {
-	case AF9013_OUTPUT_MODE_PARALLEL:
-		tmp0 = 1;
-		break;
-	case AF9013_OUTPUT_MODE_SERIAL:
-		tmp1 = 1;
-		break;
-	case AF9013_OUTPUT_MODE_USB:
-		/* usb mode for AF9015 */
-	default:
-		break;
-	}
-	ret = af9013_write_reg_bits(state, 0xd500, 1, 1, tmp0); /* parallel */
-	if (ret)
-		goto error;
-	ret = af9013_write_reg_bits(state, 0xd500, 2, 1, tmp1); /* serial */
-	if (ret)
-		goto error;
-
-	/* enable lock led */
-	ret = af9013_lock_led(state, 1);
-	if (ret)
-		goto error;
-
-error:
-	return ret;
-}
-
-static struct dvb_frontend_ops af9013_ops;
-
-static int af9013_download_firmware(struct af9013_state *state)
-{
-	int i, len, packets, remainder, ret;
-	const struct firmware *fw;
-	u16 addr = 0x5100; /* firmware start address */
-	u16 checksum = 0;
-	u8 val;
-	u8 fw_params[4];
-	u8 *data;
-	u8 *fw_file = AF9013_DEFAULT_FIRMWARE;
-
-	msleep(100);
-	/* check whether firmware is already running */
-	ret = af9013_read_reg(state, 0x98be, &amp;val;);
-	if (ret)
-		goto error;
-	else
-		deb_info("%s: firmware status:%02x\n", __func__, val);
-
-	if (val == 0x0c) /* fw is running, no need for download */
-		goto exit;
-
-	info("found a '%s' in cold state, will try to load a firmware",
-		af9013_ops.info.name);
-
-	/* request the firmware, this will block and timeout */
-	ret = request_firmware(&amp;fw;, fw_file, state-&gt;i2c-&gt;dev.parent);
-	if (ret) {
-		err("did not find the firmware file. (%s) "
-			"Please see linux/Documentation/dvb/ for more details" \
-			" on firmware-problems. (%d)",
-			fw_file, ret);
-		goto error;
-	}
-
-	info("downloading firmware from file '%s'", fw_file);
-
-	/* calc checksum */
-	for (i = 0; i &lt; fw-&gt;size; i++)
-		checksum += fw-&gt;data[i];
-
-	fw_params[0] = checksum &gt;&gt; 8;
-	fw_params[1] = checksum &amp; 0xff;
-	fw_params[2] = fw-&gt;size &gt;&gt; 8;
-	fw_params[3] = fw-&gt;size &amp; 0xff;
-
-	/* write fw checksum &amp; size */
-	ret = af9013_write_ofsm_regs(state, 0x50fc,
-		fw_params, sizeof(fw_params));
-	if (ret)
-		goto error_release;
-
-	#define FW_PACKET_MAX_DATA  16
-
-	packets = fw-&gt;size / FW_PACKET_MAX_DATA;
-	remainder = fw-&gt;size % FW_PACKET_MAX_DATA;
-	len = FW_PACKET_MAX_DATA;
-	for (i = 0; i &lt;= packets; i++) {
-		if (i == packets)  /* set size of the last packet */
-			len = remainder;
-
-		data = (u8 *)(fw-&gt;data + i * FW_PACKET_MAX_DATA);
-		ret = af9013_write_ofsm_regs(state, addr, data, len);
-		addr += FW_PACKET_MAX_DATA;
-
-		if (ret) {
-			err("firmware download failed at %d with %d", i, ret);
-			goto error_release;
-		}
-	}
-
-	/* request boot firmware */
-	ret = af9013_write_reg(state, 0xe205, 1);
-	if (ret)
-		goto error_release;
-
-	for (i = 0; i &lt; 15; i++) {
-		msleep(100);
-
-		/* check firmware status */
-		ret = af9013_read_reg(state, 0x98be, &amp;val;);
-		if (ret)
-			goto error_release;
-
-		deb_info("%s: firmware status:%02x\n", __func__, val);
-
-		if (val == 0x0c || val == 0x04) /* success or fail */
-			break;
-	}
-
-	if (val == 0x04) {
-		err("firmware did not run");
-		ret = -1;
-	} else if (val != 0x0c) {
-		err("firmware boot timeout");
-		ret = -1;
-	}
-
-error_release:
-	release_firmware(fw);
-error:
-exit:
-	if (!ret)
-		info("found a '%s' in warm state.", af9013_ops.info.name);
-	return ret;
-}
-
-static int af9013_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
-{
-	int ret;
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	deb_info("%s: enable:%d\n", __func__, enable);
-
-	if (state-&gt;config.output_mode == AF9013_OUTPUT_MODE_USB)
-		ret = af9013_write_reg_bits(state, 0xd417, 3, 1, enable);
-	else
-		ret = af9013_write_reg_bits(state, 0xd607, 2, 1, enable);
-
-	return ret;
-}
-
-static void af9013_release(struct dvb_frontend *fe)
-{
-	struct af9013_state *state = fe-&gt;demodulator_priv;
-	kfree(state);
-}
-
-static struct dvb_frontend_ops af9013_ops;
-
-struct dvb_frontend *af9013_attach(const struct af9013_config *config,
-	struct i2c_adapter *i2c)
-{
-	int ret;
-	struct af9013_state *state = NULL;
-	u8 buf[3], i;
-
-	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct af9013_state), GFP_KERNEL);
-	if (state == NULL)
-		goto error;
-
-	/* setup the state */
-	state-&gt;i2c = i2c;
-	memcpy(&amp;state-;&gt;config, config, sizeof(struct af9013_config));
-
-	/* chip version */
-	ret = af9013_read_reg_bits(state, 0xd733, 4, 4, &amp;buf;[2]);
-	if (ret)
-		goto error;
-
-	/* ROM version */
-	for (i = 0; i &lt; 2; i++) {
-		ret = af9013_read_reg(state, 0x116b + i, &amp;buf;[i]);
-		if (ret)
-			goto error;
-	}
-	deb_info("%s: chip version:%d ROM version:%d.%d\n", __func__,
-		buf[2], buf[0], buf[1]);
-
-	/* download firmware */
-	if (state-&gt;config.output_mode != AF9013_OUTPUT_MODE_USB) {
-		ret = af9013_download_firmware(state);
-		if (ret)
-			goto error;
-	}
-
-	/* firmware version */
-	for (i = 0; i &lt; 3; i++) {
-		ret = af9013_read_reg(state, 0x5103 + i, &amp;buf;[i]);
-		if (ret)
-			goto error;
-	}
-	info("firmware version:%d.%d.%d", buf[0], buf[1], buf[2]);
-
-	/* settings for mp2if */
-	if (state-&gt;config.output_mode == AF9013_OUTPUT_MODE_USB) {
-		/* AF9015 split PSB to 1.5k + 0.5k */
-		ret = af9013_write_reg_bits(state, 0xd50b, 2, 1, 1);
-	} else {
-		/* AF9013 change the output bit to data7 */
-		ret = af9013_write_reg_bits(state, 0xd500, 3, 1, 1);
-		if (ret)
-			goto error;
-		/* AF9013 set mpeg to full speed */
-		ret = af9013_write_reg_bits(state, 0xd502, 4, 1, 1);
-	}
-	if (ret)
-		goto error;
-	ret = af9013_write_reg_bits(state, 0xd520, 4, 1, 1);
-	if (ret)
-		goto error;
-
-	/* set GPIOs */
-	for (i = 0; i &lt; sizeof(state-&gt;config.gpio); i++) {
-		ret = af9013_set_gpio(state, i, state-&gt;config.gpio[i]);
-		if (ret)
-			goto error;
-	}
-
-	/* create dvb_frontend */
-	memcpy(&amp;state-;&gt;frontend.ops, &amp;af9013;_ops,
-		sizeof(struct dvb_frontend_ops));
-	state-&gt;frontend.demodulator_priv = state;
-
-	return &amp;state-;&gt;frontend;
-error:
-	kfree(state);
-	return NULL;
-}
-EXPORT_SYMBOL(af9013_attach);
-
-static struct dvb_frontend_ops af9013_ops = {
-	.info = {
-		.name = "Afatech AF9013 DVB-T",
-		.type = FE_OFDM,
-		.frequency_min = 174000000,
-		.frequency_max = 862000000,
-		.frequency_stepsize = 250000,
-		.frequency_tolerance = 0,
-		.caps =
-			FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
-			FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
-			FE_CAN_QPSK | FE_CAN_QAM_16 |
-			FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
-			FE_CAN_TRANSMISSION_MODE_AUTO |
-			FE_CAN_GUARD_INTERVAL_AUTO |
-			FE_CAN_HIERARCHY_AUTO |
-			FE_CAN_RECOVER |
-			FE_CAN_MUTE_TS
-	},
-
-	.release = af9013_release,
-	.init = af9013_init,
-	.sleep = af9013_sleep,
-	.i2c_gate_ctrl = af9013_i2c_gate_ctrl,
-
-	.set_frontend = af9013_set_frontend,
-	.get_frontend = af9013_get_frontend,
-
-	.get_tune_settings = af9013_get_tune_settings,
-
-	.read_status = af9013_read_status,
-	.read_ber = af9013_read_ber,
-	.read_signal_strength = af9013_read_signal_strength,
-	.read_snr = af9013_read_snr,
-	.read_ucblocks = af9013_read_ucblocks,
-};
-
-module_param_named(debug, af9013_debug, int, 0644);
-MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
-
-MODULE_AUTHOR("Antti Palosaari ");
-MODULE_DESCRIPTION("Afatech AF9013 DVB-T demodulator driver");
-MODULE_LICENSE("GPL");&lt;br /&gt;&lt;br /&gt;--- a/dvb/af9013.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
- *
- * Copyright (C) 2007 Antti Palosaari 
- *
- * Thanks to Afatech who kindly provided information.
- *
- *    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
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#ifndef _AF9013_H_
-#define _AF9013_H_
-
-#include dvbfrontend.h&gt;
-
-enum af9013_ts_mode {
-	AF9013_OUTPUT_MODE_PARALLEL,
-	AF9013_OUTPUT_MODE_SERIAL,
-	AF9013_OUTPUT_MODE_USB, /* only for AF9015 */
-};
-
-enum af9013_tuner {
-	AF9013_TUNER_MXL5003D   =   3, /* MaxLinear */
-	AF9013_TUNER_MXL5005D   =  13, /* MaxLinear */
-	AF9013_TUNER_MXL5005R   =  30, /* MaxLinear */
-	AF9013_TUNER_ENV77H11D5 = 129, /* Panasonic */
-	AF9013_TUNER_MT2060     = 130, /* Microtune */
-	AF9013_TUNER_MC44S803   = 133, /* Freescale */
-	AF9013_TUNER_QT1010     = 134, /* Quantek */
-	AF9013_TUNER_UNKNOWN    = 140, /* for can tuners ? */
-	AF9013_TUNER_MT2060_2   = 147, /* Microtune */
-	AF9013_TUNER_TDA18271   = 156, /* NXP */
-	AF9013_TUNER_QT1010A    = 162, /* Quantek */
-	AF9013_TUNER_TDA18218   = 179, /* NXP */
-};
-
-/* AF9013/5 GPIOs (mostly guessed)
-   demod#1-gpio#0 - set demod#2 i2c-addr for dual devices
-   demod#1-gpio#1 - xtal setting (?)
-   demod#1-gpio#3 - tuner#1
-   demod#2-gpio#0 - tuner#2
-   demod#2-gpio#1 - xtal setting (?)
-*/
-#define AF9013_GPIO_ON (1 &lt;&lt; 0)
-#define AF9013_GPIO_EN (1 &lt;&lt; 1)
-#define AF9013_GPIO_O  (1 &lt;&lt; 2)
-#define AF9013_GPIO_I  (1 &lt;&lt; 3)
-
-#define AF9013_GPIO_LO (AF9013_GPIO_ON|AF9013_GPIO_EN)
-#define AF9013_GPIO_HI (AF9013_GPIO_ON|AF9013_GPIO_EN|AF9013_GPIO_O)
-
-#define AF9013_GPIO_TUNER_ON  (AF9013_GPIO_ON|AF9013_GPIO_EN)
-#define AF9013_GPIO_TUNER_OFF (AF9013_GPIO_ON|AF9013_GPIO_EN|AF9013_GPIO_O)
-
-struct af9013_config {
-	/* demodulator's I2C address */
-	u8 demod_address;
-
-	/* frequencies in kHz */
-	u32 adc_clock;
-
-	/* tuner ID */
-	u8 tuner;
-
-	/* tuner IF */
-	u16 tuner_if;
-
-	/* TS data output mode */
-	u8 output_mode:2;
-
-	/* RF spectrum inversion */
-	u8 rf_spec_inv:1;
-
-	/* API version */
-	u8 api_version[4];
-
-	/* GPIOs */
-	u8 gpio[4];
-};
-
-
-#if defined(CONFIG_DVB_AF9013) || \
-	(defined(CONFIG_DVB_AF9013_MODULE) &amp;&amp; defined(MODULE))
-extern struct dvb_frontend *af9013_attach(const struct af9013_config *config,
-	struct i2c_adapter *i2c);
-#else
-static inline struct dvb_frontend *af9013_attach(
-const struct af9013_config *config, struct i2c_adapter *i2c)
-{
-	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
-	return NULL;
-}
-#endif /* CONFIG_DVB_AF9013 */
-
-#endif /* _AF9013_H_ */&lt;br /&gt;&lt;br /&gt;--- a/dvb/af9013_priv.h
+++ /dev/null
@@ -1,869 +0,0 @@
-/*
- * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
- *
- * Copyright (C) 2007 Antti Palosaari 
- *
- * Thanks to Afatech who kindly provided information.
- *
- *    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
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#ifndef _AF9013_PRIV_
-#define _AF9013_PRIV_
-
-#define LOG_PREFIX "af9013"
-extern int af9013_debug;
-
-#define dprintk(var, level, args...) \
-	    do { if ((var &amp; level)) printk(args); } while (0)
-
-#define debug_dump(b, l, func) {\
-	int loop_; \
-	for (loop_ = 0; loop_ &lt; l; loop_++) \
-		func("%02x ", b[loop_]); \
-	func("\n");\
-}
-
-#define deb_info(args...) dprintk(af9013_debug, 0x01, args)
-
-#undef err
-#define err(f, arg...)  printk(KERN_ERR     LOG_PREFIX": " f "\n" , ## arg)
-#undef info
-#define info(f, arg...) printk(KERN_INFO    LOG_PREFIX": " f "\n" , ## arg)
-#undef warn
-#define warn(f, arg...) printk(KERN_WARNING LOG_PREFIX": " f "\n" , ## arg)
-
-#define AF9013_DEFAULT_FIRMWARE     "dvb-fe-af9013.fw"
-
-struct regdesc {
-	u16 addr;
-	u8  pos:4;
-	u8  len:4;
-	u8  val;
-};
-
-struct snr_table {
-	u32 val;
-	u8 snr;
-};
-
-/* QPSK SNR lookup table */
-static struct snr_table qpsk_snr_table[] = {
-	{ 0x0b4771,  0 },
-	{ 0x0c1aed,  1 },
-	{ 0x0d0d27,  2 },
-	{ 0x0e4d19,  3 },
-	{ 0x0e5da8,  4 },
-	{ 0x107097,  5 },
-	{ 0x116975,  6 },
-	{ 0x1252d9,  7 },
-	{ 0x131fa4,  8 },
-	{ 0x13d5e1,  9 },
-	{ 0x148e53, 10 },
-	{ 0x15358b, 11 },
-	{ 0x15dd29, 12 },
-	{ 0x168112, 13 },
-	{ 0x170b61, 14 },
-	{ 0xffffff, 15 },
-};
-
-/* QAM16 SNR lookup table */
-static struct snr_table qam16_snr_table[] = {
-	{ 0x05eb62,  5 },
-	{ 0x05fecf,  6 },
-	{ 0x060b80,  7 },
-	{ 0x062501,  8 },
-	{ 0x064865,  9 },
-	{ 0x069604, 10 },
-	{ 0x06f356, 11 },
-	{ 0x07706a, 12 },
-	{ 0x0804d3, 13 },
-	{ 0x089d1a, 14 },
-	{ 0x093e3d, 15 },
-	{ 0x09e35d, 16 },
-	{ 0x0a7c3c, 17 },
-	{ 0x0afaf8, 18 },
-	{ 0x0b719d, 19 },
-	{ 0xffffff, 20 },
-};
-
-/* QAM64 SNR lookup table */
-static struct snr_table qam64_snr_table[] = {
-	{ 0x03109b, 12 },
-	{ 0x0310d4, 13 },
-	{ 0x031920, 14 },
-	{ 0x0322d0, 15 },
-	{ 0x0339fc, 16 },
-	{ 0x0364a1, 17 },
-	{ 0x038bcc, 18 },
-	{ 0x03c7d3, 19 },
-	{ 0x0408cc, 20 },
-	{ 0x043bed, 21 },
-	{ 0x048061, 22 },
-	{ 0x04be95, 23 },
-	{ 0x04fa7d, 24 },
-	{ 0x052405, 25 },
-	{ 0x05570d, 26 },
-	{ 0xffffff, 27 },
-};
-
-static struct regdesc ofsm_init[] = {
-	{ 0xd73a, 0, 8, 0xa1 },
-	{ 0xd73b, 0, 8, 0x1f },
-	{ 0xd73c, 4, 4, 0x0a },
-	{ 0xd732, 3, 1, 0x00 },
-	{ 0xd731, 4, 2, 0x03 },
-	{ 0xd73d, 7, 1, 0x01 },
-	{ 0xd740, 0, 1, 0x00 },
-	{ 0xd740, 1, 1, 0x00 },
-	{ 0xd740, 2, 1, 0x00 },
-	{ 0xd740, 3, 1, 0x01 },
-	{ 0xd3c1, 4, 1, 0x01 },
-	{ 0xd3a2, 0, 8, 0x00 },
-	{ 0xd3a3, 0, 8, 0x04 },
-	{ 0xd305, 0, 8, 0x32 },
-	{ 0xd306, 0, 8, 0x10 },
-	{ 0xd304, 0, 8, 0x04 },
-	{ 0x9112, 0, 1, 0x01 },
-	{ 0x911d, 0, 1, 0x01 },
-	{ 0x911a, 0, 1, 0x01 },
-	{ 0x911b, 0, 1, 0x01 },
-	{ 0x9bce, 0, 4, 0x02 },
-	{ 0x9116, 0, 1, 0x01 },
-	{ 0x9bd1, 0, 1, 0x01 },
-	{ 0xd2e0, 0, 8, 0xd0 },
-	{ 0xd2e9, 0, 4, 0x0d },
-	{ 0xd38c, 0, 8, 0xfc },
-	{ 0xd38d, 0, 8, 0x00 },
-	{ 0xd38e, 0, 8, 0x7e },
-	{ 0xd38f, 0, 8, 0x00 },
-	{ 0xd390, 0, 8, 0x2f },
-	{ 0xd145, 4, 1, 0x01 },
-	{ 0xd1a9, 4, 1, 0x01 },
-	{ 0xd158, 5, 3, 0x01 },
-	{ 0xd159, 0, 6, 0x06 },
-	{ 0xd167, 0, 8, 0x00 },
-	{ 0xd168, 0, 4, 0x07 },
-	{ 0xd1c3, 5, 3, 0x00 },
-	{ 0xd1c4, 0, 6, 0x00 },
-	{ 0xd1c5, 0, 7, 0x10 },
-	{ 0xd1c6, 0, 3, 0x02 },
-	{ 0xd080, 2, 5, 0x03 },
-	{ 0xd081, 4, 4, 0x09 },
-	{ 0xd098, 4, 4, 0x0f },
-	{ 0xd098, 0, 4, 0x03 },
-	{ 0xdbc0, 3, 1, 0x01 },
-	{ 0xdbc0, 4, 1, 0x01 },
-	{ 0xdbc7, 0, 8, 0x08 },
-	{ 0xdbc8, 4, 4, 0x00 },
-	{ 0xdbc9, 0, 5, 0x01 },
-	{ 0xd280, 0, 8, 0xe0 },
-	{ 0xd281, 0, 8, 0xff },
-	{ 0xd282, 0, 8, 0xff },
-	{ 0xd283, 0, 8, 0xc3 },
-	{ 0xd284, 0, 8, 0xff },
-	{ 0xd285, 0, 4, 0x01 },
-	{ 0xd0f0, 0, 7, 0x1a },
-	{ 0xd0f1, 4, 1, 0x01 },
-	{ 0xd0f2, 0, 8, 0x0c },
-	{ 0xd103, 0, 4, 0x08 },
-	{ 0xd0f8, 0, 7, 0x20 },
-	{ 0xd111, 5, 1, 0x00 },
-	{ 0xd111, 6, 1, 0x00 },
-	{ 0x910b, 0, 8, 0x0a },
-	{ 0x9115, 0, 8, 0x02 },
-	{ 0x910c, 0, 8, 0x02 },
-	{ 0x910d, 0, 8, 0x08 },
-	{ 0x910e, 0, 8, 0x0a },
-	{ 0x9bf6, 0, 8, 0x06 },
-	{ 0x9bf8, 0, 8, 0x02 },
-	{ 0x9bf7, 0, 8, 0x05 },
-	{ 0x9bf9, 0, 8, 0x0f },
-	{ 0x9bfc, 0, 8, 0x13 },
-	{ 0x9bd3, 0, 8, 0xff },
-	{ 0x9bbe, 0, 1, 0x01 },
-	{ 0x9bcc, 0, 1, 0x01 },
-};
-
-/* Panasonic ENV77H11D5 tuner init
-   AF9013_TUNER_ENV77H11D5 = 129 */
-static struct regdesc tuner_init_env77h11d5[] = {
-	{ 0x9bd5, 0, 8, 0x01 },
-	{ 0x9bd6, 0, 8, 0x03 },
-	{ 0x9bbe, 0, 8, 0x01 },
-	{ 0xd1a0, 1, 1, 0x01 },
-	{ 0xd000, 0, 1, 0x01 },
-	{ 0xd000, 1, 1, 0x00 },
-	{ 0xd001, 1, 1, 0x01 },
-	{ 0xd001, 0, 1, 0x00 },
-	{ 0xd001, 5, 1, 0x00 },
-	{ 0xd002, 0, 5, 0x19 },
-	{ 0xd003, 0, 5, 0x1a },
-	{ 0xd004, 0, 5, 0x19 },
-	{ 0xd005, 0, 5, 0x1a },
-	{ 0xd00e, 0, 5, 0x10 },
-	{ 0xd00f, 0, 3, 0x04 },
-	{ 0xd00f, 3, 3, 0x05 },
-	{ 0xd010, 0, 3, 0x04 },
-	{ 0xd010, 3, 3, 0x05 },
-	{ 0xd016, 4, 4, 0x03 },
-	{ 0xd01f, 0, 6, 0x0a },
-	{ 0xd020, 0, 6, 0x0a },
-	{ 0x9bda, 0, 8, 0x00 },
-	{ 0x9be3, 0, 8, 0x00 },
-	{ 0xd015, 0, 8, 0x50 },
-	{ 0xd016, 0, 1, 0x00 },
-	{ 0xd044, 0, 8, 0x46 },
-	{ 0xd045, 0, 1, 0x00 },
-	{ 0xd008, 0, 8, 0xdf },
-	{ 0xd009, 0, 2, 0x02 },
-	{ 0xd006, 0, 8, 0x44 },
-	{ 0xd007, 0, 2, 0x01 },
-	{ 0xd00c, 0, 8, 0xeb },
-	{ 0xd00d, 0, 2, 0x02 },
-	{ 0xd00a, 0, 8, 0xf4 },
-	{ 0xd00b, 0, 2, 0x01 },
-	{ 0x9bba, 0, 8, 0xf9 },
-	{ 0x9bc3, 0, 8, 0xdf },
-	{ 0x9bc4, 0, 8, 0x02 },
-	{ 0x9bc5, 0, 8, 0xeb },
-	{ 0x9bc6, 0, 8, 0x02 },
-	{ 0x9bc9, 0, 8, 0x52 },
-	{ 0xd011, 0, 8, 0x3c },
-	{ 0xd012, 0, 2, 0x01 },
-	{ 0xd013, 0, 8, 0xf7 },
-	{ 0xd014, 0, 2, 0x02 },
-	{ 0xd040, 0, 8, 0x0b },
-	{ 0xd041, 0, 2, 0x02 },
-	{ 0xd042, 0, 8, 0x4d },
-	{ 0xd043, 0, 2, 0x00 },
-	{ 0xd045, 1, 1, 0x00 },
-	{ 0x9bcf, 0, 1, 0x01 },
-	{ 0xd045, 2, 1, 0x01 },
-	{ 0xd04f, 0, 8, 0x9a },
-	{ 0xd050, 0, 1, 0x01 },
-	{ 0xd051, 0, 8, 0x5a },
-	{ 0xd052, 0, 1, 0x01 },
-	{ 0xd053, 0, 8, 0x50 },
-	{ 0xd054, 0, 8, 0x46 },
-	{ 0x9bd7, 0, 8, 0x0a },
-	{ 0x9bd8, 0, 8, 0x14 },
-	{ 0x9bd9, 0, 8, 0x08 },
-};
-
-/* Microtune MT2060 tuner init
-   AF9013_TUNER_MT2060     = 130 */
-static struct regdesc tuner_init_mt2060[] = {
-	{ 0x9bd5, 0, 8, 0x01 },
-	{ 0x9bd6, 0, 8, 0x07 },
-	{ 0xd1a0, 1, 1, 0x01 },
-	{ 0xd000, 0, 1, 0x01 },
-	{ 0xd000, 1, 1, 0x00 },
-	{ 0xd001, 1, 1, 0x01 },
-	{ 0xd001, 0, 1, 0x00 },
-	{ 0xd001, 5, 1, 0x00 },
-	{ 0xd002, 0, 5, 0x19 },
-	{ 0xd003, 0, 5, 0x1a },
-	{ 0xd004, 0, 5, 0x19 },
-	{ 0xd005, 0, 5, 0x1a },
-	{ 0xd00e, 0, 5, 0x10 },
-	{ 0xd00f, 0, 3, 0x04 },
-	{ 0xd00f, 3, 3, 0x05 },
-	{ 0xd010, 0, 3, 0x04 },
-	{ 0xd010, 3, 3, 0x05 },
-	{ 0xd016, 4, 4, 0x03 },
-	{ 0xd01f, 0, 6, 0x0a },
-	{ 0xd020, 0, 6, 0x0a },
-	{ 0x9bda, 0, 8, 0x00 },
-	{ 0x9be3, 0, 8, 0x00 },
-	{ 0x9bbe, 0, 1, 0x00 },
-	{ 0x9bcc, 0, 1, 0x00 },
-	{ 0x9bb9, 0, 8, 0x75 },
-	{ 0x9bcd, 0, 8, 0x24 },
-	{ 0x9bff, 0, 8, 0x30 },
-	{ 0xd015, 0, 8, 0x46 },
-	{ 0xd016, 0, 1, 0x00 },
-	{ 0xd044, 0, 8, 0x46 },
-	{ 0xd045, 0, 1, 0x00 },
-	{ 0xd008, 0, 8, 0x0f },
-	{ 0xd009, 0, 2, 0x02 },
-	{ 0xd006, 0, 8, 0x32 },
-	{ 0xd007, 0, 2, 0x01 },
-	{ 0xd00c, 0, 8, 0x36 },
-	{ 0xd00d, 0, 2, 0x03 },
-	{ 0xd00a, 0, 8, 0x35 },
-	{ 0xd00b, 0, 2, 0x01 },
-	{ 0x9bc7, 0, 8, 0x07 },
-	{ 0x9bc8, 0, 8, 0x90 },
-	{ 0x9bc3, 0, 8, 0x0f },
-	{ 0x9bc4, 0, 8, 0x02 },
-	{ 0x9bc5, 0, 8, 0x36 },
-	{ 0x9bc6, 0, 8, 0x03 },
-	{ 0x9bba, 0, 8, 0xc9 },
-	{ 0x9bc9, 0, 8, 0x79 },
-	{ 0xd011, 0, 8, 0x10 },
-	{ 0xd012, 0, 2, 0x01 },
-	{ 0xd013, 0, 8, 0x45 },
-	{ 0xd014, 0, 2, 0x03 },
-	{ 0xd040, 0, 8, 0x98 },
-	{ 0xd041, 0, 2, 0x00 },
-	{ 0xd042, 0, 8, 0xcf },
-	{ 0xd043, 0, 2, 0x03 },
-	{ 0xd045, 1, 1, 0x00 },
-	{ 0x9bcf, 0, 1, 0x01 },
-	{ 0xd045, 2, 1, 0x01 },
-	{ 0xd04f, 0, 8, 0x9a },
-	{ 0xd050, 0, 1, 0x01 },
-	{ 0xd051, 0, 8, 0x5a },
-	{ 0xd052, 0, 1, 0x01 },
-	{ 0xd053, 0, 8, 0x50 },
-	{ 0xd054, 0, 8, 0x46 },
-	{ 0x9bd7, 0, 8, 0x0a },
-	{ 0x9bd8, 0, 8, 0x14 },
-	{ 0x9bd9, 0, 8, 0x08 },
-	{ 0x9bd0, 0, 8, 0xcc },
-	{ 0x9be4, 0, 8, 0xa0 },
-	{ 0x9bbd, 0, 8, 0x8e },
-	{ 0x9be2, 0, 8, 0x4d },
-	{ 0x9bee, 0, 1, 0x01 },
-};
-
-/* Microtune MT2060 tuner init
-   AF9013_TUNER_MT2060_2   = 147 */
-static struct regdesc tuner_init_mt2060_2[] = {
-	{ 0x9bd5, 0, 8, 0x01 },
-	{ 0x9bd6, 0, 8, 0x06 },
-	{ 0x9bbe, 0, 8, 0x01 },
-	{ 0xd1a0, 1, 1, 0x01 },
-	{ 0xd000, 0, 1, 0x01 },
-	{ 0xd000, 1, 1, 0x00 },
-	{ 0xd001, 1, 1, 0x01 },
-	{ 0xd001, 0, 1, 0x00 },
-	{ 0xd001, 5, 1, 0x00 },
-	{ 0xd002, 0, 5, 0x19 },
-	{ 0xd003, 0, 5, 0x1a },
-	{ 0xd004, 0, 5, 0x19 },
-	{ 0xd005, 0, 5, 0x1a },
-	{ 0xd00e, 0, 5, 0x10 },
-	{ 0xd00f, 0, 3, 0x04 },
-	{ 0xd00f, 3, 3, 0x05 },
-	{ 0xd010, 0, 3, 0x04 },
-	{ 0xd010, 3, 3, 0x05 },
-	{ 0xd016, 4, 4, 0x03 },
-	{ 0xd01f, 0, 6, 0x0a },
-	{ 0xd020, 0, 6, 0x0a },
-	{ 0xd015, 0, 8, 0x46 },
-	{ 0xd016, 0, 1, 0x00 },
-	{ 0xd044, 0, 8, 0x46 },
-	{ 0xd045, 0, 1, 0x00 },
-	{ 0xd008, 0, 8, 0x0f },
-	{ 0xd009, 0, 2, 0x02 },
-	{ 0xd006, 0, 8, 0x32 },
-	{ 0xd007, 0, 2, 0x01 },
-	{ 0xd00c, 0, 8, 0x36 },
-	{ 0xd00d, 0, 2, 0x03 },
-	{ 0xd00a, 0, 8, 0x35 },
-	{ 0xd00b, 0, 2, 0x01 },
-	{ 0x9bc7, 0, 8, 0x07 },
-	{ 0x9bc8, 0, 8, 0x90 },
-	{ 0x9bc3, 0, 8, 0x0f },
-	{ 0x9bc4, 0, 8, 0x02 },
-	{ 0x9bc5, 0, 8, 0x36 },
-	{ 0x9bc6, 0, 8, 0x03 },
-	{ 0x9bba, 0, 8, 0xc9 },
-	{ 0x9bc9, 0, 8, 0x79 },
-	{ 0xd011, 0, 8, 0x10 },
-	{ 0xd012, 0, 2, 0x01 },
-	{ 0xd013, 0, 8, 0x45 },
-	{ 0xd014, 0, 2, 0x03 },
-	{ 0xd040, 0, 8, 0x98 },
-	{ 0xd041, 0, 2, 0x00 },
-	{ 0xd042, 0, 8, 0xcf },
-	{ 0xd043, 0, 2, 0x03 },
-	{ 0xd045, 1, 1, 0x00 },
-	{ 0x9bcf, 0, 8, 0x01 },
-	{ 0xd045, 2, 1, 0x01 },
-	{ 0xd04f, 0, 8, 0x9a },
-	{ 0xd050, 0, 1, 0x01 },
-	{ 0xd051, 0, 8, 0x5a },
-	{ 0xd052, 0, 1, 0x01 },
-	{ 0xd053, 0, 8, 0x96 },
-	{ 0xd054, 0, 8, 0x46 },
-	{ 0xd045, 7, 1, 0x00 },
-	{ 0x9bd7, 0, 8, 0x0a },
-	{ 0x9bd8, 0, 8, 0x14 },
-	{ 0x9bd9, 0, 8, 0x08 },
-};
-
-/* MaxLinear MXL5003 tuner init
-   AF9013_TUNER_MXL5003D   =   3 */
-static struct regdesc tuner_init_mxl5003d[] = {
-	{ 0x9bd5, 0, 8, 0x01 },
-	{ 0x9bd6, 0, 8, 0x09 },
-	{ 0xd1a0, 1, 1, 0x01 },
-	{ 0xd000, 0, 1, 0x01 },
-	{ 0xd000, 1, 1, 0x00 },
-	{ 0xd001, 1, 1, 0x01 },
-	{ 0xd001, 0, 1, 0x00 },
-	{ 0xd001, 5, 1, 0x00 },
-	{ 0xd002, 0, 5, 0x19 },
-	{ 0xd003, 0, 5, 0x1a },
-	{ 0xd004, 0, 5, 0x19 },
-	{ 0xd005, 0, 5, 0x1a },
-	{ 0xd00e, 0, 5, 0x10 },
-	{ 0xd00f, 0, 3, 0x04 },
-	{ 0xd00f, 3, 3, 0x05 },
-	{ 0xd010, 0, 3, 0x04 },
-	{ 0xd010, 3, 3, 0x05 },
-	{ 0xd016, 4, 4, 0x03 },
-	{ 0xd01f, 0, 6, 0x0a },
-	{ 0xd020, 0, 6, 0x0a },
-	{ 0x9bda, 0, 8, 0x00 },
-	{ 0x9be3, 0, 8, 0x00 },
-	{ 0x9bfc, 0, 8, 0x0f },
-	{ 0x9bf6, 0, 8, 0x01 },
-	{ 0x9bbe, 0, 1, 0x01 },
-	{ 0xd015, 0, 8, 0x33 },
-	{ 0xd016, 0, 1, 0x00 },
-	{ 0xd044, 0, 8, 0x40 },
-	{ 0xd045, 0, 1, 0x00 },
-	{ 0xd008, 0, 8, 0x0f },
-	{ 0xd009, 0, 2, 0x02 },
-	{ 0xd006, 0, 8, 0x6c },
-	{ 0xd007, 0, 2, 0x00 },
-	{ 0xd00c, 0, 8, 0x3d },
-	{ 0xd00d, 0, 2, 0x00 },
-	{ 0xd00a, 0, 8, 0x45 },
-	{ 0xd00b, 0, 2, 0x01 },
-	{ 0x9bc7, 0, 8, 0x07 },
-	{ 0x9bc8, 0, 8, 0x52 },
-	{ 0x9bc3, 0, 8, 0x0f },
-	{ 0x9bc4, 0, 8, 0x02 },
-	{ 0x9bc5, 0, 8, 0x3d },
-	{ 0x9bc6, 0, 8, 0x00 },
-	{ 0x9bba, 0, 8, 0xa2 },
-	{ 0x9bc9, 0, 8, 0xa0 },
-	{ 0xd011, 0, 8, 0x56 },
-	{ 0xd012, 0, 2, 0x00 },
-	{ 0xd013, 0, 8, 0x50 },
-	{ 0xd014, 0, 2, 0x00 },
-	{ 0xd040, 0, 8, 0x56 },
-	{ 0xd041, 0, 2, 0x00 },
-	{ 0xd042, 0, 8, 0x50 },
-	{ 0xd043, 0, 2, 0x00 },
-	{ 0xd045, 1, 1, 0x00 },
-	{ 0x9bcf, 0, 8, 0x01 },
-	{ 0xd045, 2, 1, 0x01 },
-	{ 0xd04f, 0, 8, 0x9a },
-	{ 0xd050, 0, 1, 0x01 },
-	{ 0xd051, 0, 8, 0x5a },
-	{ 0xd052, 0, 1, 0x01 },
-	{ 0xd053, 0, 8, 0x50 },
-	{ 0xd054, 0, 8, 0x46 },
-	{ 0x9bd7, 0, 8, 0x0a },
-	{ 0x9bd8, 0, 8, 0x14 },
-	{ 0x9bd9, 0, 8, 0x08 },
-};
-
-/* MaxLinear MXL5005 tuner init
-   AF9013_TUNER_MXL5005D   =  13
-   AF9013_TUNER_MXL5005R   =  30 */
-static struct regdesc tuner_init_mxl5005[] = {
-	{ 0x9bd5, 0, 8, 0x01 },
-	{ 0x9bd6, 0, 8, 0x07 },
-	{ 0xd1a0, 1, 1, 0x01 },
-	{ 0xd000, 0, 1, 0x01 },
-	{ 0xd000, 1, 1, 0x00 },
-	{ 0xd001, 1, 1, 0x01 },
-	{ 0xd001, 0, 1, 0x00 },
-	{ 0xd001, 5, 1, 0x00 },
-	{ 0xd002, 0, 5, 0x19 },
-	{ 0xd003, 0, 5, 0x1a },
-	{ 0xd004, 0, 5, 0x19 },
-	{ 0xd005, 0, 5, 0x1a },
-	{ 0xd00e, 0, 5, 0x10 },
-	{ 0xd00f, 0, 3, 0x04 },
-	{ 0xd00f, 3, 3, 0x05 },
-	{ 0xd010, 0, 3, 0x04 },
-	{ 0xd010, 3, 3, 0x05 },
-	{ 0xd016, 4, 4, 0x03 },
-	{ 0xd01f, 0, 6, 0x0a },
-	{ 0xd020, 0, 6, 0x0a },
-	{ 0x9bda, 0, 8, 0x01 },
-	{ 0x9be3, 0, 8, 0x01 },
-	{ 0x9bbe, 0, 1, 0x01 },
-	{ 0x9bcc, 0, 1, 0x01 },
-	{ 0x9bb9, 0, 8, 0x00 },
-	{ 0x9bcd, 0, 8, 0x28 },
-	{ 0x9bff, 0, 8, 0x24 },
-	{ 0xd015, 0, 8, 0x40 },
-	{ 0xd016, 0, 1, 0x00 },
-	{ 0xd044, 0, 8, 0x40 },
-	{ 0xd045, 0, 1, 0x00 },
-	{ 0xd008, 0, 8, 0x0f },
-	{ 0xd009, 0, 2, 0x02 },
-	{ 0xd006, 0, 8, 0x73 },
-	{ 0xd007, 0, 2, 0x01 },
-	{ 0xd00c, 0, 8, 0xfa },
-	{ 0xd00d, 0, 2, 0x01 },
-	{ 0xd00a, 0, 8, 0xff },
-	{ 0xd00b, 0, 2, 0x01 },
-	{ 0x9bc7, 0, 8, 0x23 },
-	{ 0x9bc8, 0, 8, 0x55 },
-	{ 0x9bc3, 0, 8, 0x01 },
-	{ 0x9bc4, 0, 8, 0x02 },
-	{ 0x9bc5, 0, 8, 0xfa },
-	{ 0x9bc6, 0, 8, 0x01 },
-	{ 0x9bba, 0, 8, 0xff },
-	{ 0x9bc9, 0, 8, 0xff },
-	{ 0x9bd3, 0, 8, 0x95 },
-	{ 0xd011, 0, 8, 0x70 },
-	{ 0xd012, 0, 2, 0x01 },
-	{ 0xd013, 0, 8, 0xfb },
-	{ 0xd014, 0, 2, 0x01 },
-	{ 0xd040, 0, 8, 0x70 },
-	{ 0xd041, 0, 2, 0x01 },
-	{ 0xd042, 0, 8, 0xfb },
-	{ 0xd043, 0, 2, 0x01 },
-	{ 0xd045, 1, 1, 0x00 },
-	{ 0x9bcf, 0, 1, 0x01 },
-	{ 0xd045, 2, 1, 0x01 },
-	{ 0xd04f, 0, 8, 0x9a },
-	{ 0xd050, 0, 1, 0x01 },
-	{ 0xd051, 0, 8, 0x5a },
-	{ 0xd052, 0, 1, 0x01 },
-	{ 0xd053, 0, 8, 0x50 },
-	{ 0xd054, 0, 8, 0x46 },
-	{ 0x9bd7, 0, 8, 0x0a },
-	{ 0x9bd8, 0, 8, 0x14 },
-	{ 0x9bd9, 0, 8, 0x08 },
-	{ 0x9bd0, 0, 8, 0x93 },
-	{ 0x9be4, 0, 8, 0xfe },
-	{ 0x9bbd, 0, 8, 0x63 },
-	{ 0x9be2, 0, 8, 0xfe },
-	{ 0x9bee, 0, 1, 0x01 },
-};
-
-/* Quantek QT1010 tuner init
-   AF9013_TUNER_QT1010     = 134
-   AF9013_TUNER_QT1010A    = 162 */
-static struct regdesc tuner_init_qt1010[] = {
-	{ 0x9bd5, 0, 8, 0x01 },
-	{ 0x9bd6, 0, 8, 0x09 },
-	{ 0xd1a0, 1, 1, 0x01 },
-	{ 0xd000, 0, 1, 0x01 },
-	{ 0xd000, 1, 1, 0x00 },
-	{ 0xd001, 1, 1, 0x01 },
-	{ 0xd001, 0, 1, 0x00 },
-	{ 0xd001, 5, 1, 0x00 },
-	{ 0xd002, 0, 5, 0x19 },
-	{ 0xd003, 0, 5, 0x1a },
-	{ 0xd004, 0, 5, 0x19 },
-	{ 0xd005, 0, 5, 0x1a },
-	{ 0xd00e, 0, 5, 0x10 },
-	{ 0xd00f, 0, 3, 0x04 },
-	{ 0xd00f, 3, 3, 0x05 },
-	{ 0xd010, 0, 3, 0x04 },
-	{ 0xd010, 3, 3, 0x05 },
-	{ 0xd016, 4, 4, 0x03 },
-	{ 0xd01f, 0, 6, 0x0a },
-	{ 0xd020, 0, 6, 0x0a },
-	{ 0x9bda, 0, 8, 0x01 },
-	{ 0x9be3, 0, 8, 0x01 },
-	{ 0xd015, 0, 8, 0x46 },
-	{ 0xd016, 0, 1, 0x00 },
-	{ 0xd044, 0, 8, 0x46 },
-	{ 0xd045, 0, 1, 0x00 },
-	{ 0x9bbe, 0, 1, 0x01 },
-	{ 0x9bcc, 0, 1, 0x01 },
-	{ 0x9bb9, 0, 8, 0x00 },
-	{ 0x9bcd, 0, 8, 0x28 },
-	{ 0x9bff, 0, 8, 0x20 },
-	{ 0xd008, 0, 8, 0x0f },
-	{ 0xd009, 0, 2, 0x02 },
-	{ 0xd006, 0, 8, 0x99 },
-	{ 0xd007, 0, 2, 0x01 },
-	{ 0xd00c, 0, 8, 0x0f },
-	{ 0xd00d, 0, 2, 0x02 },
-	{ 0xd00a, 0, 8, 0x50 },
-	{ 0xd00b, 0, 2, 0x01 },
-	{ 0x9bc7, 0, 8, 0x00 },
-	{ 0x9bc8, 0, 8, 0x00 },
-	{ 0x9bc3, 0, 8, 0x0f },
-	{ 0x9bc4, 0, 8, 0x02 },
-	{ 0x9bc5, 0, 8, 0x0f },
-	{ 0x9bc6, 0, 8, 0x02 },
-	{ 0x9bba, 0, 8, 0xc5 },
-	{ 0x9bc9, 0, 8, 0xff },
-	{ 0xd011, 0, 8, 0x58 },
-	{ 0xd012, 0, 2, 0x02 },
-	{ 0xd013, 0, 8, 0x89 },
-	{ 0xd014, 0, 2, 0x01 },
-	{ 0xd040, 0, 8, 0x58 },
-	{ 0xd041, 0, 2, 0x02 },
-	{ 0xd042, 0, 8, 0x89 },
-	{ 0xd043, 0, 2, 0x01 },
-	{ 0xd045, 1, 1, 0x00 },
-	{ 0x9bcf, 0, 1, 0x01 },
-	{ 0xd045, 2, 1, 0x01 },
-	{ 0xd04f, 0, 8, 0x9a },
-	{ 0xd050, 0, 1, 0x01 },
-	{ 0xd051, 0, 8, 0x5a },
-	{ 0xd052, 0, 1, 0x01 },
-	{ 0xd053, 0, 8, 0x50 },
-	{ 0xd054, 0, 8, 0x46 },
-	{ 0x9bd7, 0, 8, 0x0a },
-	{ 0x9bd8, 0, 8, 0x14 },
-	{ 0x9bd9, 0, 8, 0x08 },
-	{ 0x9bd0, 0, 8, 0xcd },
-	{ 0x9be4, 0, 8, 0xbb },
-	{ 0x9bbd, 0, 8, 0x93 },
-	{ 0x9be2, 0, 8, 0x80 },
-	{ 0x9bee, 0, 1, 0x01 },
-};
-
-/* Freescale MC44S803 tuner init
-   AF9013_TUNER_MC44S803   = 133 */
-static struct regdesc tuner_init_mc44s803[] = {
-	{ 0x9bd5, 0, 8, 0x01 },
-	{ 0x9bd6, 0, 8, 0x06 },
-	{ 0xd1a0, 1, 1, 0x01 },
-	{ 0xd000, 0, 1, 0x01 },
-	{ 0xd000, 1, 1, 0x00 },
-	{ 0xd001, 1, 1, 0x01 },
-	{ 0xd001, 0, 1, 0x00 },
-	{ 0xd001, 5, 1, 0x00 },
-	{ 0xd002, 0, 5, 0x19 },
-	{ 0xd003, 0, 5, 0x1a },
-	{ 0xd004, 0, 5, 0x19 },
-	{ 0xd005, 0, 5, 0x1a },
-	{ 0xd00e, 0, 5, 0x10 },
-	{ 0xd00f, 0, 3, 0x04 },
-	{ 0xd00f, 3, 3, 0x05 },
-	{ 0xd010, 0, 3, 0x04 },
-	{ 0xd010, 3, 3, 0x05 },
-	{ 0xd016, 4, 4, 0x03 },
-	{ 0xd01f, 0, 6, 0x0a },
-	{ 0xd020, 0, 6, 0x0a },
-	{ 0x9bda, 0, 8, 0x00 },
-	{ 0x9be3, 0, 8, 0x00 },
-	{ 0x9bf6, 0, 8, 0x01 },
-	{ 0x9bf8, 0, 8, 0x02 },
-	{ 0x9bf9, 0, 8, 0x02 },
-	{ 0x9bfc, 0, 8, 0x1f },
-	{ 0x9bbe, 0, 1, 0x01 },
-	{ 0x9bcc, 0, 1, 0x01 },
-	{ 0x9bb9, 0, 8, 0x00 },
-	{ 0x9bcd, 0, 8, 0x24 },
-	{ 0x9bff, 0, 8, 0x24 },
-	{ 0xd015, 0, 8, 0x46 },
-	{ 0xd016, 0, 1, 0x00 },
-	{ 0xd044, 0, 8, 0x46 },
-	{ 0xd045, 0, 1, 0x00 },
-	{ 0xd008, 0, 8, 0x01 },
-	{ 0xd009, 0, 2, 0x02 },
-	{ 0xd006, 0, 8, 0x7b },
-	{ 0xd007, 0, 2, 0x00 },
-	{ 0xd00c, 0, 8, 0x7c },
-	{ 0xd00d, 0, 2, 0x02 },
-	{ 0xd00a, 0, 8, 0xfe },
-	{ 0xd00b, 0, 2, 0x01 },
-	{ 0x9bc7, 0, 8, 0x08 },
-	{ 0x9bc8, 0, 8, 0x9a },
-	{ 0x9bc3, 0, 8, 0x01 },
-	{ 0x9bc4, 0, 8, 0x02 },
-	{ 0x9bc5, 0, 8, 0x7c },
-	{ 0x9bc6, 0, 8, 0x02 },
-	{ 0x9bba, 0, 8, 0xfc },
-	{ 0x9bc9, 0, 8, 0xaa },
-	{ 0xd011, 0, 8, 0x6b },
-	{ 0xd012, 0, 2, 0x00 },
-	{ 0xd013, 0, 8, 0x88 },
-	{ 0xd014, 0, 2, 0x02 },
-	{ 0xd040, 0, 8, 0x6b },
-	{ 0xd041, 0, 2, 0x00 },
-	{ 0xd042, 0, 8, 0x7c },
-	{ 0xd043, 0, 2, 0x02 },
-	{ 0xd045, 1, 1, 0x00 },
-	{ 0x9bcf, 0, 1, 0x01 },
-	{ 0xd045, 2, 1, 0x01 },
-	{ 0xd04f, 0, 8, 0x9a },
-	{ 0xd050, 0, 1, 0x01 },
-	{ 0xd051, 0, 8, 0x5a },
-	{ 0xd052, 0, 1, 0x01 },
-	{ 0xd053, 0, 8, 0x50 },
-	{ 0xd054, 0, 8, 0x46 },
-	{ 0x9bd7, 0, 8, 0x0a },
-	{ 0x9bd8, 0, 8, 0x14 },
-	{ 0x9bd9, 0, 8, 0x08 },
-	{ 0x9bd0, 0, 8, 0x9e },
-	{ 0x9be4, 0, 8, 0xff },
-	{ 0x9bbd, 0, 8, 0x9e },
-	{ 0x9be2, 0, 8, 0x25 },
-	{ 0x9bee, 0, 1, 0x01 },
-	{ 0xd73b, 3, 1, 0x00 },
-};
-
-/* unknown, probably for tin can tuner, tuner init
-   AF9013_TUNER_UNKNOWN   = 140 */
-static struct regdesc tuner_init_unknown[] = {
-	{ 0x9bd5, 0, 8, 0x01 },
-	{ 0x9bd6, 0, 8, 0x02 },
-	{ 0xd1a0, 1, 1, 0x01 },
-	{ 0xd000, 0, 1, 0x01 },
-	{ 0xd000, 1, 1, 0x00 },
-	{ 0xd001, 1, 1, 0x01 },
-	{ 0xd001, 0, 1, 0x00 },
-	{ 0xd001, 5, 1, 0x00 },
-	{ 0xd002, 0, 5, 0x19 },
-	{ 0xd003, 0, 5, 0x1a },
-	{ 0xd004, 0, 5, 0x19 },
-	{ 0xd005, 0, 5, 0x1a },
-	{ 0xd00e, 0, 5, 0x10 },
-	{ 0xd00f, 0, 3, 0x04 },
-	{ 0xd00f, 3, 3, 0x05 },
-	{ 0xd010, 0, 3, 0x04 },
-	{ 0xd010, 3, 3, 0x05 },
-	{ 0xd016, 4, 4, 0x03 },
-	{ 0xd01f, 0, 6, 0x0a },
-	{ 0xd020, 0, 6, 0x0a },
-	{ 0x9bda, 0, 8, 0x01 },
-	{ 0x9be3, 0, 8, 0x01 },
-	{ 0xd1a0, 1, 1, 0x00 },
-	{ 0x9bbe, 0, 1, 0x01 },
-	{ 0x9bcc, 0, 1, 0x01 },
-	{ 0x9bb9, 0, 8, 0x00 },
-	{ 0x9bcd, 0, 8, 0x18 },
-	{ 0x9bff, 0, 8, 0x2c },
-	{ 0xd015, 0, 8, 0x46 },
-	{ 0xd016, 0, 1, 0x00 },
-	{ 0xd044, 0, 8, 0x46 },
-	{ 0xd045, 0, 1, 0x00 },
-	{ 0xd008, 0, 8, 0xdf },
-	{ 0xd009, 0, 2, 0x02 },
-	{ 0xd006, 0, 8, 0x44 },
-	{ 0xd007, 0, 2, 0x01 },
-	{ 0xd00c, 0, 8, 0x00 },
-	{ 0xd00d, 0, 2, 0x02 },
-	{ 0xd00a, 0, 8, 0xf6 },
-	{ 0xd00b, 0, 2, 0x01 },
-	{ 0x9bba, 0, 8, 0xf9 },
-	{ 0x9bc8, 0, 8, 0xaa },
-	{ 0x9bc3, 0, 8, 0xdf },
-	{ 0x9bc4, 0, 8, 0x02 },
-	{ 0x9bc5, 0, 8, 0x00 },
-	{ 0x9bc6, 0, 8, 0x02 },
-	{ 0x9bc9, 0, 8, 0xf0 },
-	{ 0xd011, 0, 8, 0x3c },
-	{ 0xd012, 0, 2, 0x01 },
-	{ 0xd013, 0, 8, 0xf7 },
-	{ 0xd014, 0, 2, 0x02 },
-	{ 0xd040, 0, 8, 0x0b },
-	{ 0xd041, 0, 2, 0x02 },
-	{ 0xd042, 0, 8, 0x4d },
-	{ 0xd043, 0, 2, 0x00 },
-	{ 0xd045, 1, 1, 0x00 },
-	{ 0x9bcf, 0, 1, 0x01 },
-	{ 0xd045, 2, 1, 0x01 },
-	{ 0xd04f, 0, 8, 0x9a },
-	{ 0xd050, 0, 1, 0x01 },
-	{ 0xd051, 0, 8, 0x5a },
-	{ 0xd052, 0, 1, 0x01 },
-	{ 0xd053, 0, 8, 0x50 },
-	{ 0xd054, 0, 8, 0x46 },
-	{ 0x9bd7, 0, 8, 0x0a },
-	{ 0x9bd8, 0, 8, 0x14 },
-	{ 0x9bd9, 0, 8, 0x08 },
-};
-
-/* NXP TDA18271 tuner init
-   AF9013_TUNER_TDA18271   = 156 */
-static struct regdesc tuner_init_tda18271[] = {
-	{ 0x9bd5, 0, 8, 0x01 },
-	{ 0x9bd6, 0, 8, 0x04 },
-	{ 0xd1a0, 1, 1, 0x01 },
-	{ 0xd000, 0, 1, 0x01 },
-	{ 0xd000, 1, 1, 0x00 },
-	{ 0xd001, 1, 1, 0x01 },
-	{ 0xd001, 0, 1, 0x00 },
-	{ 0xd001, 5, 1, 0x00 },
-	{ 0xd002, 0, 5, 0x19 },
-	{ 0xd003, 0, 5, 0x1a },
-	{ 0xd004, 0, 5, 0x19 },
-	{ 0xd005, 0, 5, 0x1a },
-	{ 0xd00e, 0, 5, 0x10 },
-	{ 0xd00f, 0, 3, 0x04 },
-	{ 0xd00f, 3, 3, 0x05 },
-	{ 0xd010, 0, 3, 0x04 },
-	{ 0xd010, 3, 3, 0x05 },
-	{ 0xd016, 4, 4, 0x03 },
-	{ 0xd01f, 0, 6, 0x0a },
-	{ 0xd020, 0, 6, 0x0a },
-	{ 0x9bda, 0, 8, 0x01 },
-	{ 0x9be3, 0, 8, 0x01 },
-	{ 0xd1a0, 1, 1, 0x00 },
-	{ 0x9bbe, 0, 1, 0x01 },
-	{ 0x9bcc, 0, 1, 0x01 },
-	{ 0x9bb9, 0, 8, 0x00 },
-	{ 0x9bcd, 0, 8, 0x18 },
-	{ 0x9bff, 0, 8, 0x2c },
-	{ 0xd015, 0, 8, 0x46 },
-	{ 0xd016, 0, 1, 0x00 },
-	{ 0xd044, 0, 8, 0x46 },
-	{ 0xd045, 0, 1, 0x00 },
-	{ 0xd008, 0, 8, 0xdf },
-	{ 0xd009, 0, 2, 0x02 },
-	{ 0xd006, 0, 8, 0x44 },
-	{ 0xd007, 0, 2, 0x01 },
-	{ 0xd00c, 0, 8, 0x00 },
-	{ 0xd00d, 0, 2, 0x02 },
-	{ 0xd00a, 0, 8, 0xf6 },
-	{ 0xd00b, 0, 2, 0x01 },
-	{ 0x9bba, 0, 8, 0xf9 },
-	{ 0x9bc8, 0, 8, 0xaa },
-	{ 0x9bc3, 0, 8, 0xdf },
-	{ 0x9bc4, 0, 8, 0x02 },
-	{ 0x9bc5, 0, 8, 0x00 },
-	{ 0x9bc6, 0, 8, 0x02 },
-	{ 0x9bc9, 0, 8, 0xf0 },
-	{ 0xd011, 0, 8, 0x3c },
-	{ 0xd012, 0, 2, 0x01 },
-	{ 0xd013, 0, 8, 0xf7 },
-	{ 0xd014, 0, 2, 0x02 },
-	{ 0xd040, 0, 8, 0x0b },
-	{ 0xd041, 0, 2, 0x02 },
-	{ 0xd042, 0, 8, 0x4d },
-	{ 0xd043, 0, 2, 0x00 },
-	{ 0xd045, 1, 1, 0x00 },
-	{ 0x9bcf, 0, 1, 0x01 },
-	{ 0xd045, 2, 1, 0x01 },
-	{ 0xd04f, 0, 8, 0x9a },
-	{ 0xd050, 0, 1, 0x01 },
-	{ 0xd051, 0, 8, 0x5a },
-	{ 0xd052, 0, 1, 0x01 },
-	{ 0xd053, 0, 8, 0x50 },
-	{ 0xd054, 0, 8, 0x46 },
-	{ 0x9bd7, 0, 8, 0x0a },
-	{ 0x9bd8, 0, 8, 0x14 },
-	{ 0x9bd9, 0, 8, 0x08 },
-	{ 0x9bd0, 0, 8, 0xa8 },
-	{ 0x9be4, 0, 8, 0x7f },
-	{ 0x9bbd, 0, 8, 0xa8 },
-	{ 0x9be2, 0, 8, 0x20 },
-	{ 0x9bee, 0, 1, 0x01 },
-};
-
-#endif /* _AF9013_PRIV_ */&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>73cf835e97fcb904e6fdef35e0d935f93921dfe1</guid><pubDate>Fri, 20 Jan 2012 14:19:34 GMT</pubDate></item><item><title>[tcosmonitor.git] tcos-devices-ng.py: fix remove_duplicates() inliner</title><link>http://tcosproject.org/cgit/tcosmonitor.git/commit/?id=64ed4fc28d052656684bd4da0dc2ee60d723fc07</link><description>tcos-devices-ng.py: fix remove_duplicates() inliner&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 64ed4fc28d052656684bd4da0dc2ee60d723fc07&lt;br /&gt;Date: Fri, 20 Jan 2012 13:45:08 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosmonitor.git/diff/?id=64ed4fc28d052656684bd4da0dc2ee60d723fc07"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/tcos-devices-ng.py
+++ b/tcos-devices-ng.py
@@ -1318,7 +1318,7 @@ class TcosDevicesNG:
     def remove_dupes(self, mylist):
         """
         check for duplicate events, 
-        kernel create 3-4 umount events before mounting a device
+        kernel sometimes create 3-4 umount events before mounting a device
         the events are created and diff at max 1 second
         """
         if len(mylist) != 1:
@@ -1326,7 +1326,10 @@ class TcosDevicesNG:
             have_mount=False
             umount_index=None
             nodupes=[]
-            nodupes=[ u for u in mylist if u not in locals()['_[1]'] ]
+            try:
+                nodupes=list(set(mylist))
+            except:
+                pass
             
             # if have ACTION=umount and ACTION=mount and 
             # DEVPATH is the same remove ACTION=umount&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>64ed4fc28d052656684bd4da0dc2ee60d723fc07</guid><pubDate>Fri, 20 Jan 2012 13:45:08 GMT</pubDate></item><item><title>[af90xx-dkms.git] Revert "minor fixes"</title><link>http://tcosproject.org/cgit/af90xx-dkms.git/commit/?id=e66d5f03497b02141282de5ebb8ddfbaf56cc988</link><description>Revert "minor fixes"&lt;br /&gt;This reverts commit 1b7a3026cfd558fbd9c4c631baa1def675a00478.&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: e66d5f03497b02141282de5ebb8ddfbaf56cc988&lt;br /&gt;Date: Fri, 20 Jan 2012 12:00:26 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/af90xx-dkms.git/diff/?id=e66d5f03497b02141282de5ebb8ddfbaf56cc988"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/compare.sh
+++ b/compare.sh
@@ -16,8 +16,6 @@ for f in *; do
       echo "SAME FILE $NEW dvb/$f"
     fi
 
-  else
-    echo "NEW FILE $f"
   fi
 
 done&lt;br /&gt;&lt;br /&gt;--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-af90xx-dkms (0.5) unstable; urgency=low
+af90xx-dkms (0.5-0mario1) unstable; urgency=low
 
   * Update from 3.1 sources
   * Complete update for 3.1.0, no compatible with lower&lt;br /&gt;&lt;br /&gt;--- a/debian/control
+++ b/debian/control
@@ -7,5 +7,5 @@ Standards-Version: 3.9.2
 
 Package: af90xx-dkms
 Architecture: all
-Depends: dkms (&gt;= 1.95), ${misc:Depends}
+Depends: dkms (&gt;= 1.95), ${misc:Depends}, linux-image (&gt;= 3.1.0)
 Description: Afatech AF9035 kernel module&lt;br /&gt;&lt;br /&gt;--- /dev/null
+++ b/debian/patches/debian-changes-0.0.3-0ppa3
@@ -0,0 +1,699 @@
+Description: Upstream changes introduced in version 0.0.3-0ppa3
+ This patch has been created by dpkg-source during the package build.
+ Here's the last changelog entry, hopefully it gives details on why
+ those changes were made:
+ .
+ af90xx-dkms (0.0.3-0ppa3) lucid; urgency=low
+ .
+   * Check compability with 2.6.26 or 2.6.32
+ .
+ The person named in the Author field signed this changelog entry.
+Author: Mario Izquierdo (mariodebian) 
+
+---
+The information above should follow the Patch Tagging Guidelines, please
+checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
+are templates for supplementary fields that you might want to add:
+
+Origin: , 
+Bug: 
+Bug-Debian: http://bugs.debian.org/
+Bug-Ubuntu: https://launchpad.net/bugs/
+Forwarded: 
+Reviewed-By: 
+Last-Update: 
+
+--- af90xx-dkms-0.0.3.orig/Makefile
++++ af90xx-dkms-0.0.3/Makefile
+@@ -16,7 +16,6 @@ EXTRA_CFLAGS += -DCONFIG_DVB_USB_DEBUG=y
+ obj-m += dvb/
+ 
+ 
+-EXTRA_CFLAGS += -include config-compat.h
+ EXTRA_CFLAGS += -include include/linux/version.h
+ 
+ KVERS:=$(shell uname -r)
+--- /dev/null
++++ af90xx-dkms-0.0.3/dvb/dmx.h
+@@ -0,0 +1,157 @@
++/*
++ * dmx.h
++ *
++ * Copyright (C) 2000 Marcus Metzler 
++ *                  &amp; Ralph  Metzler 
++ *                    for convergence integrated media GmbH
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public License
++ * as published by the Free Software Foundation; either version 2.1
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
++ *
++ */
++
++#ifndef _DVBDMX_H_
++#define _DVBDMX_H_
++
++#include types.h&gt;
++#ifdef __KERNEL__
++#include time.h&gt;
++#else
++#include 
++#endif
++
++
++#define DMX_FILTER_SIZE 16
++
++typedef enum
++{
++	DMX_OUT_DECODER, /* Streaming directly to decoder. */
++	DMX_OUT_TAP,     /* Output going to a memory buffer */
++			 /* (to be retrieved via the read command).*/
++	DMX_OUT_TS_TAP,  /* Output multiplexed into a new TS  */
++			 /* (to be retrieved by reading from the */
++			 /* logical DVR device).                 */
++	DMX_OUT_TSDEMUX_TAP /* Like TS_TAP but retrieved from the DMX device */
++} dmx_output_t;
++
++
++typedef enum
++{
++	DMX_IN_FRONTEND, /* Input from a front-end device.  */
++	DMX_IN_DVR       /* Input from the logical DVR device.  */
++} dmx_input_t;
++
++
++typedef enum
++{
++	DMX_PES_AUDIO0,
++	DMX_PES_VIDEO0,
++	DMX_PES_TELETEXT0,
++	DMX_PES_SUBTITLE0,
++	DMX_PES_PCR0,
++
++	DMX_PES_AUDIO1,
++	DMX_PES_VIDEO1,
++	DMX_PES_TELETEXT1,
++	DMX_PES_SUBTITLE1,
++	DMX_PES_PCR1,
++
++	DMX_PES_AUDIO2,
++	DMX_PES_VIDEO2,
++	DMX_PES_TELETEXT2,
++	DMX_PES_SUBTITLE2,
++	DMX_PES_PCR2,
++
++	DMX_PES_AUDIO3,
++	DMX_PES_VIDEO3,
++	DMX_PES_TELETEXT3,
++	DMX_PES_SUBTITLE3,
++	DMX_PES_PCR3,
++
++	DMX_PES_OTHER
++} dmx_pes_type_t;
++
++#define DMX_PES_AUDIO    DMX_PES_AUDIO0
++#define DMX_PES_VIDEO    DMX_PES_VIDEO0
++#define DMX_PES_TELETEXT DMX_PES_TELETEXT0
++#define DMX_PES_SUBTITLE DMX_PES_SUBTITLE0
++#define DMX_PES_PCR      DMX_PES_PCR0
++
++
++typedef struct dmx_filter
++{
++	__u8  filter[DMX_FILTER_SIZE];
++	__u8  mask[DMX_FILTER_SIZE];
++	__u8  mode[DMX_FILTER_SIZE];
++} dmx_filter_t;
++
++
++struct dmx_sct_filter_params
++{
++	__u16          pid;
++	dmx_filter_t   filter;
++	__u32          timeout;
++	__u32          flags;
++#define DMX_CHECK_CRC       1
++#define DMX_ONESHOT         2
++#define DMX_IMMEDIATE_START 4
++#define DMX_KERNEL_CLIENT   0x8000
++};
++
++
++struct dmx_pes_filter_params
++{
++	__u16          pid;
++	dmx_input_t    input;
++	dmx_output_t   output;
++	dmx_pes_type_t pes_type;
++	__u32          flags;
++};
++
++typedef struct dmx_caps {
++	__u32 caps;
++	int num_decoders;
++} dmx_caps_t;
++
++typedef enum {
++	DMX_SOURCE_FRONT0 = 0,
++	DMX_SOURCE_FRONT1,
++	DMX_SOURCE_FRONT2,
++	DMX_SOURCE_FRONT3,
++	DMX_SOURCE_DVR0   = 16,
++	DMX_SOURCE_DVR1,
++	DMX_SOURCE_DVR2,
++	DMX_SOURCE_DVR3
++} dmx_source_t;
++
++struct dmx_stc {
++	unsigned int num;	/* input : which STC? 0..N */
++	unsigned int base;	/* output: divisor for stc to get 90 kHz clock */
++	__u64 stc;		/* output: stc in 'base'*90 kHz units */
++};
++
++
++#define DMX_START                _IO('o', 41)
++#define DMX_STOP                 _IO('o', 42)
++#define DMX_SET_FILTER           _IOW('o', 43, struct dmx_sct_filter_params)
++#define DMX_SET_PES_FILTER       _IOW('o', 44, struct dmx_pes_filter_params)
++#define DMX_SET_BUFFER_SIZE      _IO('o', 45)
++#define DMX_GET_PES_PIDS         _IOR('o', 47, __u16[5])
++#define DMX_GET_CAPS             _IOR('o', 48, dmx_caps_t)
++#define DMX_SET_SOURCE           _IOW('o', 49, dmx_source_t)
++#define DMX_GET_STC              _IOWR('o', 50, struct dmx_stc)
++#define DMX_ADD_PID              _IOW('o', 51, __u16)
++#define DMX_REMOVE_PID           _IOW('o', 52, __u16)
++
++#endif /*_DVBDMX_H_*/
+--- af90xx-dkms-0.0.3.orig/dvb/dmxdev.c
++++ af90xx-dkms-0.0.3/dvb/dmxdev.c
+@@ -28,6 +28,7 @@
+ #include module.h&gt;
+ #if LINUX_VERSION_CODE &lt; KERNEL_VERSION(2, 6, 39)
+ #include smp_lock.h&gt;
++#include "dmx.h"
+ #endif
+ #include poll.h&gt;
+ #include ioctl.h&gt;
+--- /dev/null
++++ af90xx-dkms-0.0.3/dvb/config-compat.h
+@@ -0,0 +1,14 @@
++#ifndef __CONFIG_COMPAT_H__
++#define __CONFIG_COMPAT_H__
++
++#include version.h&gt;
++#include mmdebug.h&gt;
++
++#define CONFIG_DVB_AF9013_MODULE 1
++#define CONFIG_DVB_MAX_ADAPTERS 8
++#define CONFIG_MEDIA_TUNER_TUA9001_MODULE 1
++#define CONFIG_DVB_USB_AF9015_MODULE 1
++#define CONFIG_DVB_USB_AF9035_MODULE 1
++
++#endif
++
+--- af90xx-dkms-0.0.3.orig/dvb/mxl5007t.h
++++ af90xx-dkms-0.0.3/dvb/mxl5007t.h
+@@ -77,7 +77,7 @@ struct mxl5007t_config {
+ 	unsigned int clk_out_enable:1;
+ };
+ 
+-
++#if LINUX_VERSION_CODE &gt; KERNEL_VERSION(2, 6, 39)
+ #if defined(CONFIG_MEDIA_TUNER_MXL5007T) || (defined(CONFIG_MEDIA_TUNER_MXL5007T_MODULE) &amp;&amp; defined(MODULE))
+ extern struct dvb_frontend *mxl5007t_attach(struct dvb_frontend *fe,
+ 					    struct i2c_adapter *i2c, u8 addr,
+@@ -92,6 +92,7 @@ static inline struct dvb_frontend *mxl50
+ 	return NULL;
+ }
+ #endif
++#endif
+ 
+ #endif /* __MXL5007T_H__ */
+ 
+--- /dev/null
++++ af90xx-dkms-0.0.3/dvb/frontend.h
+@@ -0,0 +1,414 @@
++/*
++ * frontend.h
++ *
++ * Copyright (C) 2000 Marcus Metzler 
++ *		    Ralph  Metzler 
++ *		    Holger Waechtler 
++ *		    Andre Draszik 
++ *		    for convergence integrated media GmbH
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public License
++ * as published by the Free Software Foundation; either version 2.1
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
++ *
++ */
++
++#ifndef _DVBFRONTEND_H_
++#define _DVBFRONTEND_H_
++
++#include types.h&gt;
++
++typedef enum fe_type {
++	FE_QPSK,
++	FE_QAM,
++	FE_OFDM,
++	FE_ATSC
++} fe_type_t;
++
++
++typedef enum fe_caps {
++	FE_IS_STUPID			= 0,
++	FE_CAN_INVERSION_AUTO		= 0x1,
++	FE_CAN_FEC_1_2			= 0x2,
++	FE_CAN_FEC_2_3			= 0x4,
++	FE_CAN_FEC_3_4			= 0x8,
++	FE_CAN_FEC_4_5			= 0x10,
++	FE_CAN_FEC_5_6			= 0x20,
++	FE_CAN_FEC_6_7			= 0x40,
++	FE_CAN_FEC_7_8			= 0x80,
++	FE_CAN_FEC_8_9			= 0x100,
++	FE_CAN_FEC_AUTO			= 0x200,
++	FE_CAN_QPSK			= 0x400,
++	FE_CAN_QAM_16			= 0x800,
++	FE_CAN_QAM_32			= 0x1000,
++	FE_CAN_QAM_64			= 0x2000,
++	FE_CAN_QAM_128			= 0x4000,
++	FE_CAN_QAM_256			= 0x8000,
++	FE_CAN_QAM_AUTO			= 0x10000,
++	FE_CAN_TRANSMISSION_MODE_AUTO	= 0x20000,
++	FE_CAN_BANDWIDTH_AUTO		= 0x40000,
++	FE_CAN_GUARD_INTERVAL_AUTO	= 0x80000,
++	FE_CAN_HIERARCHY_AUTO		= 0x100000,
++	FE_CAN_8VSB			= 0x200000,
++	FE_CAN_16VSB			= 0x400000,
++	FE_HAS_EXTENDED_CAPS		= 0x800000,   * We need more bitspace for newer APIs, indicate this. */
++	FE_CAN_TURBO_FEC		= 0x8000000,  /* frontend supports "turbo fec modulation" */
++	FE_CAN_2G_MODULATION		= 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
++	FE_NEEDS_BENDING		= 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
++	FE_CAN_RECOVER			= 0x40000000, /* frontend can recover from a cable unplug automatically */
++	FE_CAN_MUTE_TS			= 0x80000000  /* frontend can stop spurious TS data output */
++} fe_caps_t;
++
++
++struct dvb_frontend_info {
++	char       name[128];
++	fe_type_t  type;
++	__u32      frequency_min;
++	__u32      frequency_max;
++	__u32      frequency_stepsize;
++	__u32      frequency_tolerance;
++	__u32      symbol_rate_min;
++	__u32      symbol_rate_max;
++	__u32      symbol_rate_tolerance;	/* ppm */
++	__u32      notifier_delay;		/* DEPRECATED */
++	fe_caps_t  caps;
++};
++
++
++/**
++ *  Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
++ *  the meaning of this struct...
++ */
++struct dvb_diseqc_master_cmd {
++	__u8 msg [6];	/*  { framing, address, command, data [3] } */
++	__u8 msg_len;	/*  valid values are 3...6  */
++};
++
++
++struct dvb_diseqc_slave_reply {
++	__u8 msg [4];	/*  { framing, data [3] } */
++	__u8 msg_len;	/*  valid values are 0...4, 0 means no msg  */
++	int  timeout;	/*  return from ioctl after timeout ms with */
++};			/*  errorcode when no message was received  */
++
++
++typedef enum fe_sec_voltage {
++	SEC_VOLTAGE_13,
++	SEC_VOLTAGE_18,
++	SEC_VOLTAGE_OFF
++} fe_sec_voltage_t;
++
++
++typedef enum fe_sec_tone_mode {
++	SEC_TONE_ON,
++	SEC_TONE_OFF
++} fe_sec_tone_mode_t;
++
++
++typedef enum fe_sec_mini_cmd {
++	SEC_MINI_A,
++	SEC_MINI_B
++} fe_sec_mini_cmd_t;
++
++
++typedef enum fe_status {
++	FE_HAS_SIGNAL	= 0x01,   /* found something above the noise level */
++	FE_HAS_CARRIER	= 0x02,   /* found a DVB signal  */
++	FE_HAS_VITERBI	= 0x04,   /* FEC is stable  */
++	FE_HAS_SYNC	= 0x08,   /* found sync bytes  */
++	FE_HAS_LOCK	= 0x10,   /* everything's working... */
++	FE_TIMEDOUT	= 0x20,   /* no lock within the last ~2 seconds */
++	FE_REINIT	= 0x40    /* frontend was reinitialized,  */
++} fe_status_t;			  /* application is recommended to reset */
++				  /* DiSEqC, tone and parameters */
++
++typedef enum fe_spectral_inversion {
++	INVERSION_OFF,
++	INVERSION_ON,
++	INVERSION_AUTO
++} fe_spectral_inversion_t;
++
++
++typedef enum fe_code_rate {
++	FEC_NONE = 0,
++	FEC_1_2,
++	FEC_2_3,
++	FEC_3_4,
++	FEC_4_5,
++	FEC_5_6,
++	FEC_6_7,
++	FEC_7_8,
++	FEC_8_9,
++	FEC_AUTO,
++	FEC_3_5,
++	FEC_9_10,
++} fe_code_rate_t;
++
++
++typedef enum fe_modulation {
++	QPSK,
++	QAM_16,
++	QAM_32,
++	QAM_64,
++	QAM_128,
++	QAM_256,
++	QAM_AUTO,
++	VSB_8,
++	VSB_16,
++	PSK_8,
++	APSK_16,
++	APSK_32,
++	DQPSK,
++} fe_modulation_t;
++
++typedef enum fe_transmit_mode {
++	TRANSMISSION_MODE_2K,
++	TRANSMISSION_MODE_8K,
++	TRANSMISSION_MODE_AUTO,
++	TRANSMISSION_MODE_4K
++} fe_transmit_mode_t;
++
++typedef enum fe_bandwidth {
++	BANDWIDTH_8_MHZ,
++	BANDWIDTH_7_MHZ,
++	BANDWIDTH_6_MHZ,
++	BANDWIDTH_AUTO
++} fe_bandwidth_t;
++
++
++typedef enum fe_guard_interval {
++	GUARD_INTERVAL_1_32,
++	GUARD_INTERVAL_1_16,
++	GUARD_INTERVAL_1_8,
++	GUARD_INTERVAL_1_4,
++	GUARD_INTERVAL_AUTO
++} fe_guard_interval_t;
++
++
++typedef enum fe_hierarchy {
++	HIERARCHY_NONE,
++	HIERARCHY_1,
++	HIERARCHY_2,
++	HIERARCHY_4,
++	HIERARCHY_AUTO
++} fe_hierarchy_t;
++
++
++struct dvb_qpsk_parameters {
++	__u32		symbol_rate;  /* symbol rate in Symbols per second */
++	fe_code_rate_t	fec_inner;    /* forward error correction (see above) */
++};
++
++struct dvb_qam_parameters {
++	__u32		symbol_rate; /* symbol rate in Symbols per second */
++	fe_code_rate_t	fec_inner;   /* forward error correction (see above) */
++	fe_modulation_t	modulation;  /* modulation type (see above) */
++};
++
++struct dvb_vsb_parameters {
++	fe_modulation_t	modulation;  /* modulation type (see above) */
++};
++
++struct dvb_ofdm_parameters {
++	fe_bandwidth_t      bandwidth;
++	fe_code_rate_t      code_rate_HP;  /* high priority stream code rate */
++	fe_code_rate_t      code_rate_LP;  /* low priority stream code rate */
++	fe_modulation_t     constellation; /* modulation type (see above) */
++	fe_transmit_mode_t  transmission_mode;
++	fe_guard_interval_t guard_interval;
++	fe_hierarchy_t      hierarchy_information;
++};
++
++
++struct dvb_frontend_parameters {
++	__u32 frequency;     /* (absolute) frequency in Hz for QAM/OFDM/ATSC */
++			     /* intermediate frequency in kHz for QPSK */
++	fe_spectral_inversion_t inversion;
++	union {
++		struct dvb_qpsk_parameters qpsk;
++		struct dvb_qam_parameters  qam;
++		struct dvb_ofdm_parameters ofdm;
++		struct dvb_vsb_parameters vsb;
++	} u;
++};
++
++
++struct dvb_frontend_event {
++	fe_status_t status;
++	struct dvb_frontend_parameters parameters;
++};
++
++/* S2API Commands */
++#define DTV_UNDEFINED		0
++#define DTV_TUNE		1
++#define DTV_CLEAR		2
++#define DTV_FREQUENCY		3
++#define DTV_MODULATION		4
++#define DTV_BANDWIDTH_HZ	5
++#define DTV_INVERSION		6
++#define DTV_DISEQC_MASTER	7
++#define DTV_SYMBOL_RATE		8
++#define DTV_INNER_FEC		9
++#define DTV_VOLTAGE		10
++#define DTV_TONE		11
++#define DTV_PILOT		12
++#define DTV_ROLLOFF		13
++#define DTV_DISEQC_SLAVE_REPLY	14
++
++/* Basic enumeration set for querying unlimited capabilities */
++#define DTV_FE_CAPABILITY_COUNT	15
++#define DTV_FE_CAPABILITY	16
++#define DTV_DELIVERY_SYSTEM	17
++
++/* ISDB-T and ISDB-Tsb */
++#define DTV_ISDBT_PARTIAL_RECEPTION	18
++#define DTV_ISDBT_SOUND_BROADCASTING	19
++
++#define DTV_ISDBT_SB_SUBCHANNEL_ID	20
++#define DTV_ISDBT_SB_SEGMENT_IDX	21
++#define DTV_ISDBT_SB_SEGMENT_COUNT	22
++
++#define DTV_ISDBT_LAYERA_FEC			23
++#define DTV_ISDBT_LAYERA_MODULATION		24
++#define DTV_ISDBT_LAYERA_SEGMENT_COUNT		25
++#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING	26
++
++#define DTV_ISDBT_LAYERB_FEC			27
++#define DTV_ISDBT_LAYERB_MODULATION		28
++#define DTV_ISDBT_LAYERB_SEGMENT_COUNT		29
++#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING	30
++
++#define DTV_ISDBT_LAYERC_FEC			31
++#define DTV_ISDBT_LAYERC_MODULATION		32
++#define DTV_ISDBT_LAYERC_SEGMENT_COUNT		33
++#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING	34
++
++#define DTV_API_VERSION		35
++
++#define DTV_CODE_RATE_HP	36
++#define DTV_CODE_RATE_LP	37
++#define DTV_GUARD_INTERVAL	38
++#define DTV_TRANSMISSION_MODE	39
++#define DTV_HIERARCHY		40
++
++#define DTV_ISDBT_LAYER_ENABLED	41
++
++#define DTV_ISDBS_TS_ID		42
++
++#define DTV_MAX_COMMAND				DTV_ISDBS_TS_ID
++
++typedef enum fe_pilot {
++	PILOT_ON,
++	PILOT_OFF,
++	PILOT_AUTO,
++} fe_pilot_t;
++
++typedef enum fe_rolloff {
++	ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */
++	ROLLOFF_20,
++	ROLLOFF_25,
++	ROLLOFF_AUTO,
++} fe_rolloff_t;
++
++typedef enum fe_delivery_system {
++	SYS_UNDEFINED,
++	SYS_DVBC_ANNEX_AC,
++	SYS_DVBC_ANNEX_B,
++	SYS_DVBT,
++	SYS_DSS,
++	SYS_DVBS,
++	SYS_DVBS2,
++	SYS_DVBH,
++	SYS_ISDBT,
++	SYS_ISDBS,
++	SYS_ISDBC,
++	SYS_ATSC,
++	SYS_ATSCMH,
++	SYS_DMBTH,
++	SYS_CMMB,
++	SYS_DAB,
++} fe_delivery_system_t;
++
++struct dtv_cmds_h {
++	char	*name;		/* A display name for debugging purposes */
++
++	__u32	cmd;		/* A unique ID */
++
++	/* Flags */
++	__u32	set:1;		/* Either a set or get property */
++	__u32	buffer:1;	/* Does this property use the buffer? */
++	__u32	reserved:30;	/* Align */
++};
++
++struct dtv_property {
++	__u32 cmd;
++	__u32 reserved[3];
++	union {
++		__u32 data;
++		struct {
++			__u8 data[32];
++			__u32 len;
++			__u32 reserved1[3];
++			void *reserved2;
++		} buffer;
++	} u;
++	int result;
++} __attribute__ ((packed));
++
++/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
++#define DTV_IOCTL_MAX_MSGS 64
++
++struct dtv_properties {
++	__u32 num;
++	struct dtv_property *props;
++};
++
++#define FE_SET_PROPERTY		   _IOW('o', 82, struct dtv_properties)
++#define FE_GET_PROPERTY		   _IOR('o', 83, struct dtv_properties)
++
++
++/**
++ * When set, this flag will disable any zigzagging or other "normal" tuning
++ * behaviour. Additionally, there will be no automatic monitoring of the lock
++ * status, and hence no frontend events will be generated. If a frontend device
++ * is closed, this flag will be automatically turned off when the device is
++ * reopened read-write.
++ */
++#define FE_TUNE_MODE_ONESHOT 0x01
++
++
++#define FE_GET_INFO		   _IOR('o', 61, struct dvb_frontend_info)
++
++#define FE_DISEQC_RESET_OVERLOAD   _IO('o', 62)
++#define FE_DISEQC_SEND_MASTER_CMD  _IOW('o', 63, struct dvb_diseqc_master_cmd)
++#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
++#define FE_DISEQC_SEND_BURST       _IO('o', 65)  /* fe_sec_mini_cmd_t */
++
++#define FE_SET_TONE		   _IO('o', 66)  /* fe_sec_tone_mode_t */
++#define FE_SET_VOLTAGE		   _IO('o', 67)  /* fe_sec_voltage_t */
++#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68)  /* int */
++
++#define FE_READ_STATUS		   _IOR('o', 69, fe_status_t)
++#define FE_READ_BER		   _IOR('o', 70, __u32)
++#define FE_READ_SIGNAL_STRENGTH    _IOR('o', 71, __u16)
++#define FE_READ_SNR		   _IOR('o', 72, __u16)
++#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
++
++#define FE_SET_FRONTEND		   _IOW('o', 76, struct dvb_frontend_parameters)
++#define FE_GET_FRONTEND		   _IOR('o', 77, struct dvb_frontend_parameters)
++#define FE_SET_FRONTEND_TUNE_MODE  _IO('o', 81) /* unsigned int */
++#define FE_GET_EVENT		   _IOR('o', 78, struct dvb_frontend_event)
++
++#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
++
++#endif /*_DVBFRONTEND_H_*/
+--- af90xx-dkms-0.0.3.orig/dvb/af9035.h
++++ af90xx-dkms-0.0.3/dvb/af9035.h
+@@ -184,4 +184,22 @@ struct af9035_firmware_header {
+ 	struct af9035_segment segment[SEGMENT_MAX_COUNT];
+ };
+ 
++
++#if LINUX_VERSION_CODE &lt; KERNEL_VERSION(2, 6, 39)
++#if defined(CONFIG_MEDIA_TUNER_MXL5007T) || (defined(CONFIG_MEDIA_TUNER_MXL5007T_MODULE) &amp;&amp; defined(MODULE))
++extern struct dvb_frontend *mxl5007t_attach(struct dvb_frontend *fe,
++                                            struct i2c_adapter *i2c, u8 addr,
++                                            struct mxl5007t_config *cfg);
++#else
++static inline struct dvb_frontend *mxl5007t_attach(struct dvb_frontend *fe,
++                                                   struct i2c_adapter *i2c,
++                                                   u8 addr,
++                                                   struct mxl5007t_config *cfg)
++{
++        printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++        return NULL;
++}
++#endif
++#endif
++
+ #endif
+--- af90xx-dkms-0.0.3.orig/dvb/dvb_frontend.h
++++ af90xx-dkms-0.0.3/dvb/dvb_frontend.h
+@@ -38,7 +38,13 @@
+ #include mutex.h&gt;
+ #include slab.h&gt;
+ 
++#include version.h&gt;
++
++#if LINUX_VERSION_CODE &lt; KERNEL_VERSION(2, 6, 39)
++#include "frontend.h"
++#else
+ #include dvb/frontend.h&gt;
++#endif
+ 
+ #include "dvbdev.h"
+ &lt;br /&gt;&lt;br /&gt;--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+debian-changes-0.0.3-0ppa3&lt;br /&gt;&lt;br /&gt;--- a/debian/rules
+++ b/debian/rules
@@ -15,13 +15,12 @@ sname:=af90xx
 
 sversion:=$(shell dpkg-parsechangelog|grep "^Version:"|cut -d" " -f2|rev|cut -d- -f2-|rev|cut -d':' -f2)
 
-build-arch:
-build-indep:
+
 build:
 
 clean:
 	dh_testdir
-	dh_prep
+	dh_clean
 
 install: DH_OPTIONS=
 install: build&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>e66d5f03497b02141282de5ebb8ddfbaf56cc988</guid><pubDate>Fri, 20 Jan 2012 12:00:26 GMT</pubDate></item><item><title>[scripts.git] Update allpkgs target and allow to disable i386</title><link>http://tcosproject.org/cgit/scripts.git/commit/?id=b8938a2f49b6d99426f5e255db8d70418800cc9c</link><description>Update allpkgs target and allow to disable i386&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: b8938a2f49b6d99426f5e255db8d70418800cc9c&lt;br /&gt;Date: Sun, 08 Jan 2012 17:09:13 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/scripts.git/diff/?id=b8938a2f49b6d99426f5e255db8d70418800cc9c"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/Makefile
+++ b/Makefile
@@ -76,15 +76,19 @@ targz: clean
 
 
 
-DISTROS:=unstable testing squeeze lenny maverick lucid karmic jaunty
-ARCHITECTURES=i386 amd64
+#DISTROS:=unstable testing squeeze lenny natty maverick lucid
+DISTROS:=unstable testing squeeze precise oneiric natty lucid
+ARCHS=i386 amd64
 
 allpkgs:
+	@echo DISTROS=$(DISTROS)
+	@echo ARCHS=$(ARCHS)
 	@if [ "$(PKG)" = "" ]; then echo "Need to say PKG=foo "; exit 1; fi
 	@for distro in $(DISTROS); do\
 		echo "\n\n\t BUILD $(PKG) $$distro i386"; \
-		scripts/build.pkg.sh $(PKG) $$distro i386 || true ; \
-		if grep Architecture $(PKG)/debian/control | grep -q any ; then \
+		echo $(ARCHS) | grep -q i386 &amp;&amp; scripts/build.pkg.sh $(PKG) $$distro i386 || true ; \
+		if grep Architecture $(PKG)/debian/control | grep -q any  &amp;&amp; echo $(ARCHS) | grep -q amd64; then \
 			scripts/build.pkg.sh $(PKG) $$distro amd64 || true ; \
 		fi ;\
 	done
+&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>b8938a2f49b6d99426f5e255db8d70418800cc9c</guid><pubDate>Sun, 08 Jan 2012 17:09:13 GMT</pubDate></item><item><title>[tcos-configurator.git] tcos-configurator.desktop: Remove encoding from desktop file</title><link>http://tcosproject.org/cgit/tcos-configurator.git/commit/?id=b18c42ee2b9ba12517794f327aeacb3940dc1dc9</link><description>tcos-configurator.desktop: Remove encoding from desktop file&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: b18c42ee2b9ba12517794f327aeacb3940dc1dc9&lt;br /&gt;Date: Thu, 05 Jan 2012 18:10:03 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcos-configurator.git/diff/?id=b18c42ee2b9ba12517794f327aeacb3940dc1dc9"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/tcos-configurator.desktop
+++ b/tcos-configurator.desktop
@@ -1,6 +1,5 @@
 [Desktop Entry]
 Version=1.0
-Encoding=UTF-8
 Name=TCOS Server Configurator
 Name[es]=Configurador servidor TCOS 
 Comment=Configure TCOS server daemons and users&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>b18c42ee2b9ba12517794f327aeacb3940dc1dc9</guid><pubDate>Thu, 05 Jan 2012 18:10:03 GMT</pubDate></item><item><title>[tcosconfig.git] Release 0.3.32</title><link>http://tcosproject.org/cgit/tcosconfig.git/commit/?id=2f9e45af75a4694c49ba20afb5ce10206358782a</link><description>Release 0.3.32&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 2f9e45af75a4694c49ba20afb5ce10206358782a&lt;br /&gt;Date: Thu, 05 Jan 2012 16:23:18 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosconfig.git/diff/?id=2f9e45af75a4694c49ba20afb5ce10206358782a"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+tcosconfig (0.3.32) unstable; urgency=low
+
+  * TcosChrootBuilder.py: 
+    - Update kernel versions
+    - Read /var/lib/tcos/version.conf
+
+ -- Mario Izquierdo (mariodebian)   Thu, 05 Jan 2012 17:21:39 +0100
+
 tcosconfig (0.3.31) unstable; urgency=low
 
   * tcosconfig.desktop: Remove Encoding from desktop file&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>2f9e45af75a4694c49ba20afb5ce10206358782a</guid><pubDate>Thu, 05 Jan 2012 16:23:18 GMT</pubDate></item><item><title>[tcosconfig.git] TcosChrootBuilder.py: Update kernel versions. Read /var/lib/tcos/version.conf</title><link>http://tcosproject.org/cgit/tcosconfig.git/commit/?id=4aa29f1c6ac3054165caed7157a0eed7e4288272</link><description>TcosChrootBuilder.py: Update kernel versions. Read /var/lib/tcos/version.conf&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 4aa29f1c6ac3054165caed7157a0eed7e4288272&lt;br /&gt;Date: Thu, 05 Jan 2012 16:21:05 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosconfig.git/diff/?id=4aa29f1c6ac3054165caed7157a0eed7e4288272"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/TcosChrootBuilder.py
+++ b/TcosChrootBuilder.py
@@ -40,25 +40,22 @@ def print_debug(txt):
         print ( "TcosChrootBuilder::%s " %(txt) )
 
 DISTRO_VERSIONS={
-"debian":["unstable", "testing", "squeeze", "lenny"]  ,
-#"ubuntu":["hardy", "intrepid", "jaunty", "karmic", "lucid", "maverick"],
-"ubuntu":["lucid", "maverick", "natty"],
+"debian":["unstable", "testing", "squeeze"]  ,
+"ubuntu":["precise", "oneiric", "natty", "maverick","lucid"],
 }
 
 
 
 KERNEL_VERSIONS={
-"lenny":"2.6.26-2-486"  ,
-"squeeze":"2.6.32-5-486"  ,
-"testing":"2.6.32-5-486"  ,
-"unstable":"2.6.39-1-486"  ,
-#"hardy":"2.6.24-28-generic" ,
-#"intrepid":"2.6.27-17-generic",
-#"jaunty":"2.6.28-19-generic",
-#"karmic":"2.6.31-22-generic",
-"lucid":"2.6.32-31-generic",
-"maverick":"2.6.35-28-generic",
-"natty":"2.6.35-22-generic",
+"squeeze":"2.6.32-5-486",
+"testing":"3.1.0-1-486",
+"unstable":"3.1.0-1-486",
+
+"lucid":"2.6.32-37-generic",
+"maverick":"2.6.35-31-generic",
+"natty":"2.6.38-13-generic",
+"oneiric":"3.0.0-14-generic",
+"precise":"3.2.0-7-generic",
 }
 
 DISTRO_ALIAS={
@@ -86,7 +83,7 @@ BUILD_CHROOT_CMD="/usr/sbin/tcos-buildchroot"
 class TcosChroot:
     def __init__(self):
         
-        self.buildvars={}
+        self.buildvars={"DISTRIBUTION":"debian", "TCOS_KERNEL":KERNEL_VERSIONS["unstable"]}
 
         # Widgets
         self.ui = gtk.Builder()
@@ -132,7 +129,7 @@ class TcosChroot:
         self.combo_distribution.connect('changed', self.on_distribution_combo_change)
         
         self.populate_select(self.combo_distribution, DISTRO_VERSIONS.keys())
-        self.populate_select(self.combo_arch, ['i386','amd64', 'ppc'])
+        self.populate_select(self.combo_arch, ['i386','amd64'])
         
         # extra mirrors
         self.entry_securitymirror = self.ui.get_object("entry_securitymirror")
@@ -200,13 +197,22 @@ class TcosChroot:
 
     def loadData(self):
         print_debug("loadData() init")
-        version_data=self.getFile("/etc/tcos/version.conf")
+        version_data=[]
+        if os.path.isfile("/var/lib/tcos/version.conf"):
+            version_data=self.getFile("/var/lib/tcos/version.conf")
+
+        elif os.path.isfile("/etc/tcos/version.conf"):
+            version_data=self.getFile("/etc/tcos/version.conf")
+
         for line in version_data:
             self.buildvars[line.split("=")[0]]=line.split("=")[1].replace('"','')
         
         tcos_data=self.getFile("/etc/tcos/tcos.conf")
         for line in tcos_data:
+            if "TCOS_KERNEL" in line: continue
+            if "NEWEST_VMLINUZ" in line: continue
             self.buildvars[line.split("=")[0]]=line.split("=")[1].replace('"','')
+        print_debug("loadData() %s" %self.buildvars)
         
         
     def on_distro_combo_change(self, widget):&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>4aa29f1c6ac3054165caed7157a0eed7e4288272</guid><pubDate>Thu, 05 Jan 2012 16:21:05 GMT</pubDate></item><item><title>[tcosmonitor.git] Release 0.2.44</title><link>http://tcosproject.org/cgit/tcosmonitor.git/commit/?id=acde2edffb25b29ad893a58703f8581f3b4c2579</link><description>Release 0.2.44&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: acde2edffb25b29ad893a58703f8581f3b4c2579&lt;br /&gt;Date: Mon, 02 Jan 2012 16:09:55 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosmonitor.git/diff/?id=acde2edffb25b29ad893a58703f8581f3b4c2579"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+tcosmonitor (0.2.44) unstable; urgency=low
+
+  * Change Priority to extra, we depend on some extra packages
+  * Fix spelling errors in manual pages
+  * README: Remove hex2ascii.c (is in tcos-core package)
+  * README.standalone: Update ports info
+  * Remove rsync doc
+  * Switch from CDBS to dh7 format
+
+ -- Mario Izquierdo (mariodebian)   Mon, 02 Jan 2012 17:08:18 +0100
+
 tcosmonitor (0.2.43) unstable; urgency=low
 
   * Promoted by "Antonio Prez-Aranda "&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>acde2edffb25b29ad893a58703f8581f3b4c2579</guid><pubDate>Mon, 02 Jan 2012 16:09:55 GMT</pubDate></item><item><title>[tcosmonitor.git] Switch from CDBS to dh7 format</title><link>http://tcosproject.org/cgit/tcosmonitor.git/commit/?id=aa830236e843bffe7b54929b7d1f80e469ee4575</link><description>Switch from CDBS to dh7 format&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: aa830236e843bffe7b54929b7d1f80e469ee4575&lt;br /&gt;Date: Mon, 02 Jan 2012 16:07:40 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosmonitor.git/diff/?id=aa830236e843bffe7b54929b7d1f80e469ee4575"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/debian/control
+++ b/debian/control
@@ -2,7 +2,7 @@ Source: tcosmonitor
 Section: gnome
 Priority: extra
 Maintainer: Mario Izquierdo (mariodebian) 
-Build-Depends: debhelper (&gt;= 7.0.0), cdbs, python, python-support (&gt;= 0.3)
+Build-Depends: debhelper (&gt;= 7.0.50~), python-all (&gt;=2.6.6-3~)
 Standards-Version: 3.9.2
 Vcs-Git: http://tcosproject.org/git/tcosmonitor.git
 Vcs-Browser: http://tcosproject.org/cgit/tcosmonitor.git/
@@ -10,13 +10,13 @@ Homepage: http://www.tcosproject.org
 
 Package: tcosmonitor
 Architecture: all
-Depends:  python, 
-          tcosmonitor-common ( &gt;= 0.2.39), 
-          python-gtk-vnc, 
-          gksu | kdebase-bin,
-          nmap,
-          ${misc:Depends}, ${shlibs:Depends}, ${python:Depends}
-Conflicts: initramfs-tools-tcos (&lt;= 0.88.16), tcosmonitor (&lt;=0.2.16~rc9)
+Depends: python, 
+         tcosmonitor-common ( &gt;= 0.2.39), 
+         python-gtk-vnc, 
+         gksu | kdebase-bin,
+         nmap,
+         ${misc:Depends}, ${shlibs:Depends}, ${python:Depends}
+Breaks: initramfs-tools-tcos (&lt;= 0.88.16)
 Description: Thin client monitor for TCOS
  TCOS, thin Client Operating System is a method to create small embedded os
  based on Debian/Ubuntu with normal Debian kernel's.
@@ -25,30 +25,30 @@ Description: Thin client monitor for TCOS
 
 Package: tcosmonitor-common
 Architecture: all
-Depends:  python, 
-          python-utmp, 
-          python-dbus,
-          python-gtk2, 
-          python-dns, 
-          python-netifaces, 
-          python-notify, 
-          python-xlib,
-          python-ipaddr,
-          python-ipy,
-          python-eggtrayicon | python-gnome2-extras,
-          python-dateutil,
-          zenity, 
-          dbus, 
-          x11vnc, 
-          lsb-base (&gt;= 3.0-6), 
-          notification-daemon | xfce4-notifyd, 
-          libnotify-bin, 
-          python-m2crypto,
-          python-medusa,
-          tcos-core ( &gt;= 0.89.44), 
-          consolekit,
-          ${misc:Depends}, ${shlibs:Depends}, ${python:Depends}
-Conflicts: initramfs-tools-tcos (&lt;= 0.88.16), tcosmonitor (&lt;=0.2.39)
+Depends: python, 
+         python-utmp, 
+         python-dbus,
+         python-gtk2, 
+         python-dns, 
+         python-netifaces, 
+         python-notify, 
+         python-xlib,
+         python-ipaddr,
+         python-ipy,
+         python-eggtrayicon | python-gnome2-extras,
+         python-dateutil,
+         zenity, 
+         dbus, 
+         x11vnc, 
+         lsb-base (&gt;= 3.0-6), 
+         notification-daemon | xfce4-notifyd, 
+         libnotify-bin, 
+         python-m2crypto,
+         python-medusa,
+         tcos-core ( &gt;= 0.89.44), 
+         consolekit,
+         ${misc:Depends}, ${shlibs:Depends}, ${python:Depends}
+Breaks: initramfs-tools-tcos (&lt;= 0.88.16), tcosmonitor (&lt;=0.2.39)
 Description: Thin client monitor for TCOS (common files)
  TCOS, thin Client Operating System is a method to create small embedded os
  based on Debian/Ubuntu with normal Debian kernel's.&lt;br /&gt;&lt;br /&gt;--- a/debian/rules
+++ b/debian/rules
@@ -1,32 +1,27 @@
 #!/usr/bin/make -f
 
-DEB_PYTHON_SYSTEM=pysupport
-DEB_PACKAGES = tcosmonitor  tcosmonitor-common
-DEB_ALL_PACKAGES= tcosmonitor tcosmonitor-common
+%:
+	dh $@ --with python2
 
-include /usr/share/cdbs/1/rules/debhelper.mk
-include /usr/share/cdbs/1/class/python-distutils.mk
 
-# cdbs is confused if more than one binary package is build:
-DEB_DESTDIR=$(CURDIR)/debian/tmp
+override_dh_auto_clean:
+	dh_auto_clean
+	cd po &amp;&amp; make clean
 
-cleanbuilddir/tcosmonitor::
-	$(MAKE) -C po clean
 
-#clean::
-#	$(MAKE) clean
 
-# test if __VERSION__ is not parsed and fail
-install/tcosmonitor::
-	@if [ `find $(CURDIR)/debian/tmp/ -name "*.py" | xargs grep __VERSION__ | wc -l` != 0 ]; then \
-		echo "__VERSION__ unparsed"; \
-		find *.py | xargs grep __VERSION__;\
-		exit 1; \
-	fi
-
-
-binary-predeb/tcosmonitor-common::
-	# link doc
-	rm -rf debian/tcosmonitor/usr/share/doc/tcosmonitor
-	ln -s tcosmonitor-common debian/tcosmonitor/usr/share/doc/tcosmonitor
+.PHONY: override_dh_auto_clean
 
+#install/tcosmonitor::
+#	@if [ `find $(CURDIR)/debian/tmp/ -name "*.py" | xargs grep __VERSION__ | wc -l` != 0 ]; then \
+#		echo "__VERSION__ unparsed"; \
+#		find *.py | xargs grep __VERSION__;\
+#		exit 1; \
+#	fi
+#
+#
+#binary-predeb/tcosmonitor-common::
+#	# link doc
+#	rm -rf debian/tcosmonitor/usr/share/doc/tcosmonitor
+#	ln -s tcosmonitor-common debian/tcosmonitor/usr/share/doc/tcosmonitor
+#&lt;br /&gt;&lt;br /&gt;--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)&lt;br /&gt;&lt;br /&gt;--- a/debian/tcosmonitor-common.dirs
+++ b/debian/tcosmonitor-common.dirs
@@ -1,4 +1,3 @@
 usr/bin
-usr/share/tcosmonitor
 etc/X11/Xsession.d
 usr/share/pixmaps&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>aa830236e843bffe7b54929b7d1f80e469ee4575</guid><pubDate>Mon, 02 Jan 2012 16:07:40 GMT</pubDate></item><item><title>[tcosmonitor.git] Remove rsync doc</title><link>http://tcosproject.org/cgit/tcosmonitor.git/commit/?id=361a86c0109a32863de5d327748f1659f18d489c</link><description>Remove rsync doc&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 361a86c0109a32863de5d327748f1659f18d489c&lt;br /&gt;Date: Mon, 02 Jan 2012 16:07:06 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosmonitor.git/diff/?id=361a86c0109a32863de5d327748f1659f18d489c"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/debian/tcosmonitor-common.docs
+++ b/debian/tcosmonitor-common.docs
@@ -3,4 +3,3 @@ AUTHORS
 TODO
 README.server-utils
 README.standalone
-README.rsync&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>361a86c0109a32863de5d327748f1659f18d489c</guid><pubDate>Mon, 02 Jan 2012 16:07:06 GMT</pubDate></item><item><title>[tcosconfig.git] Release 0.3.31</title><link>http://tcosproject.org/cgit/tcosconfig.git/commit/?id=495288dd58d573336fd38f21102fa81527489642</link><description>Release 0.3.31&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 495288dd58d573336fd38f21102fa81527489642&lt;br /&gt;Date: Mon, 02 Jan 2012 15:44:59 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosconfig.git/diff/?id=495288dd58d573336fd38f21102fa81527489642"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+tcosconfig (0.3.31) unstable; urgency=low
+
+  * tcosconfig.desktop: Remove Encoding from desktop file
+  * Switch from CDBS to dh7 and format 3.0 (native)
+
+ -- Mario Izquierdo (mariodebian)   Mon, 02 Jan 2012 16:44:23 +0100
+
 tcosconfig (0.3.30) unstable; urgency=low
 
   * ConfigReader.py: Disable kernel version check (allow 3.0 kernels)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>495288dd58d573336fd38f21102fa81527489642</guid><pubDate>Mon, 02 Jan 2012 15:44:59 GMT</pubDate></item><item><title>[tcosconfig.git] Switch from CDBS to dh7 and format 3.0 (native)</title><link>http://tcosproject.org/cgit/tcosconfig.git/commit/?id=f81d6f4a8dbaecc79fd97d6ceda9bc61f404910a</link><description>Switch from CDBS to dh7 and format 3.0 (native)&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: f81d6f4a8dbaecc79fd97d6ceda9bc61f404910a&lt;br /&gt;Date: Mon, 02 Jan 2012 15:44:03 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosconfig.git/diff/?id=f81d6f4a8dbaecc79fd97d6ceda9bc61f404910a"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/Makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-all:
-
-include common.mk
-
-exec:
-	python $(project).py --debug
-
-clean:
-	rm -f *~ *.pyc *.orig *.bak *-stamp
-	rm -rf pixmaps/
-	cd po &amp;&amp; make clean
-	dh_clean
-
-pot:
-	cd po &amp;&amp; make pot
-
-
-tcos:
-	rm -f ../tcosconfig_*deb
-	debuild -uc -us; true
-	sudo dpkg -i ../tcosconfig_*deb
-
-
-
-patch_hardy:
-	echo 6 &gt; debian/compat
-	sed -i 's/7\.0\.0/6\.0\.0/g' debian/control
-	sed -i 's/3\.8\.0/3\.7\.2/g' debian/control&lt;br /&gt;&lt;br /&gt;--- a/common.mk
+++ /dev/null
@@ -1,62 +0,0 @@
-#.SILENT:
-
-MAKE=make -B
-INSTALL=install
-
-VERSION=$(shell head -1 debian/changelog 2&gt;/dev/null | awk  '{gsub(/\(/,"",$$2); gsub(/\)/, "" , $$2); print $$2}' )
-
-have_changelog := $(wildcard debian/changelog)
-ifeq ($(strip $(have_changelog)),)
-VERSION=$(shell head -1 ../debian/changelog 2&gt;/dev/null | awk  '{gsub(/\(/,"",$$2); gsub(/\)/, "" , $$2); print $$2}' )
-endif
-
-
-
-PACKAGE=tcosconfig
-
-
-TCOS_DIR=$(shell awk -F "=" '/TCOS_DIR=/ {print $$2}' /etc/tcos/tcos.conf )
-TCOS_BINS=$(shell awk -F "=" '/TCOS_BINS=/ {print $$2}' /etc/tcos/tcos.conf )
-TCOS_XMLRPC_DIR=$(PREFIX)/share/tcosmonitor/xmlrpc/
-DBUS_CONF=/etc/dbus-1/system.d/
-X11_CONF=/etc/X11/Xsession.d/
-
-project=tcosconfig
-
-
-# debian or ubuntu ???
-HAVE_DEBIAN=$(shell grep -i debian /etc/issue)
-HAVE_UBUNTU=$(shell grep -i ubuntu /etc/issue)
-
-ifeq ( $(strip $(HAVE_DEBIAN)),)
-DEB_MIRROR=http://archive.ubuntu.com/ubuntu/
-else
-DEB_MIRROR=http://ftp.uk.debian.org/debian/
-endif
-
-#BUSYBOX_FILE=$(shell apt-cache show busybox-static|awk '/^Filename/ {print $$2}'| head -1)
-
-
-PREFIX:=/usr
-
-
-test:
-	@echo "------------------------------------"
-	@echo VERSION=$(VERSION)
-	@echo PACKAGE=$(PACKAGE)
-	@echo 
-	@echo PREFIX=$(PREFIX)
-	@echo DESTDIR=$(DESTDIR)
-	@echo
-	@echo CURDIR=$(CURDIR)
-	@echo 
-	@echo TCOS_DIR=$(TCOS_DIR)
-	@echo TCOS_BINS=$(TCOS_BINS)
-	@echo TCOS_XMLRPC_DIR=$(TCOS_XMLRPC_DIR)
-	@echo DBUS_CONF=$(DBUS_CONF)
-	@echo x11_CONF=$(X11_CONF)
-	@echo
-	@echo HAVE_DEBIAN=$(HAVE_DEBIAN)
-	@echo HAVE_UBUNTU=$(HAVE_UBUNTU)
-	@echo DEB_MIRROR=$(DEB_MIRROR)
-	@echo "------------------------------------"&lt;br /&gt;&lt;br /&gt;--- a/debian/README.Debian
+++ /dev/null
@@ -1,7 +0,0 @@
-tcosconfig for Debian
--------------------------
-
-Config and create bootable image disk of TCOS system.
-
-
- -- Mario Izquierdo (mariodebian) , Tue, 19 Apr 2006 10:00:07 +0100&lt;br /&gt;&lt;br /&gt;--- a/debian/control
+++ b/debian/control
@@ -2,7 +2,7 @@ Source: tcosconfig
 Section: gnome
 Priority: optional
 Maintainer: Mario Izquierdo (mariodebian) 
-Build-Depends:  debhelper (&gt;= 7.0.0), cdbs, python, python-support (&gt;= 0.3)
+Build-Depends: debhelper (&gt;= 7.0.50~), python-all (&gt;= 2.6.6-3~)
 Standards-Version: 3.9.2
 Vcs-Git: http://tcosproject.org/git/tcosconfig.git
 Vcs-Browser: http://tcosproject.org/cgit/tcosconfig.git/
@@ -10,9 +10,9 @@ Homepage: http://www.tcosproject.org
 
 Package: tcosconfig
 Architecture: all
-Depends:  initramfs-tools-tcos (&gt;= 0.89.70), gksu | kdebase-bin, file,
-          python, python-gtk2,
-          ${python:Depends}, ${misc:Depends}, ${shlibs:Depends}
+Depends: initramfs-tools-tcos (&gt;= 0.89.70), gksu | kdebase-bin, file,
+         python, python-gtk2,
+         ${python:Depends}, ${misc:Depends}, ${shlibs:Depends}
 Description: Small Python GUI to configure and create TCOS boot images
  TCOS, thin Client Operating System is a method to create small embedded os
  based on Debian/Ubuntu with normal Debian kernel's.&lt;br /&gt;&lt;br /&gt;--- a/debian/dirs
+++ /dev/null
@@ -1,3 +0,0 @@
-usr/bin
-usr/share/tcosconfig
-usr/share/locale/es/LC_MESSAGES&lt;br /&gt;&lt;br /&gt;--- a/debian/pycompat
+++ /dev/null
@@ -1 +0,0 @@
-2&lt;br /&gt;&lt;br /&gt;--- a/debian/rules
+++ b/debian/rules
@@ -1,15 +1,10 @@
 #!/usr/bin/make -f
 
-DEB_PYTHON_SYSTEM=pysupport
-DEB_PYTHON_PRIVATE_MODULES_DIRS = /usr/share/tcosconfig
+%:
+	dh $@ --with python2
 
-
-include /usr/share/cdbs/1/rules/debhelper.mk
-include /usr/share/cdbs/1/class/python-distutils.mk
-
-
-cleanbuilddir/tcosconfig::
+override_dh_auto_clean:
 	$(MAKE) -C po clean
-
+	dh_auto_clean
 
 &lt;br /&gt;&lt;br /&gt;--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>f81d6f4a8dbaecc79fd97d6ceda9bc61f404910a</guid><pubDate>Mon, 02 Jan 2012 15:44:03 GMT</pubDate></item><item><title>[tcosconfig.git] tcosconfig.desktop: Remove Encoding from desktop file</title><link>http://tcosproject.org/cgit/tcosconfig.git/commit/?id=1800b920c7a755809b76b295f93c1ad7707b9ffa</link><description>tcosconfig.desktop: Remove Encoding from desktop file&lt;br /&gt;===================================&lt;br /&gt;Author: Mario Izquierdo (mariodebian)&lt;br /&gt;GIT id: 1800b920c7a755809b76b295f93c1ad7707b9ffa&lt;br /&gt;Date: Mon, 02 Jan 2012 15:19:05 GMT&lt;pre&gt;&lt;a href="http://tcosproject.org/cgit/tcosconfig.git/diff/?id=1800b920c7a755809b76b295f93c1ad7707b9ffa"&gt;Commit diff&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;--- a/tcosconfig.desktop
+++ b/tcosconfig.desktop
@@ -1,6 +1,5 @@
 [Desktop Entry]
 Version=1.0
-Encoding=UTF-8
 Name=TCOS-config
 Name[en_GB]=TCOS-config
 Name[es]=TCOS-config&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description><author>Mario Izquierdo (mariodebian)</author><guid>1800b920c7a755809b76b295f93c1ad7707b9ffa</guid><pubDate>Mon, 02 Jan 2012 15:19:05 GMT</pubDate></item></channel></rss>

