[linux-dvb] Pinnacle 300i working

Ingo Schmiegel ingo at schmiegel.net
Thu Sep 15 22:11:22 CEST 2005


Hi all,

After some problems, I got the hybrid analog and dvb-t budget card
working with a stock 2.6.13.1 kernel plus one patch with _older_
video4linux drivers. Besides that kernel I'm using a fairly updated
debian/testing system.

Kudos go to user "neweb" on the german gentoo forum for the idea and the
pointer to the older drivers. You can find it all described (in german)
here:
 http://www.gentooforum.de/thread.php?threadid=6579
 http://de.gentoo-wiki.com/Pinnacle_300i

Short summary in English:

2.6.13.1 ships with video4linux 0.2.14. These drivers introduce a
problem with the 300i card. Symptom is that the "scan" utility (debian
package dvb-utils) can not tune to any frequency:
# scan /home/cfi/channels.conf -v
[...]
>>> tune to:
198500000:INVERSION_AUTO:BANDWIDTH_7_MHZ:FEC_3_4:FEC_NONE:QAM_16:TRANSMISSI
ON_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE
>>> tuning status == 0x00
[...]
>>> tuning status == 0x00
WARNING: >>> tuning failed!!!
[...]

To workaround
# cd /usr/src
# wget
http://www.linuxtv.org/downloads/video4linux/video4linux-20050627.tar.gz
# tar xzvf video4linux-20050627.tar.gz
# cd video4linux

In theory and with older kernels (~2.6.11 era, but not sure) you could
now just proceed with

# make
# make install
# modprobe -r saa7134_dvb video_buf_dvb saa7134 videodev video_buf mt352
dvb_core tda1004x i2c_nforce2 tuner tda9887 i2c_core v4l2_common v4l1_compat
# modprobe saa7134_dvb

Now you would see in /var/log/messages:
Sep 15 20:21:01 localhost kernel: saa7130/34: v4l2 driver version 0.2.13
loaded
instead of the 0.2.14 release coming with the kernel.

Unfortunately the API changed a little, so the newer kernel headers are
incompatible with the older v4l drivers. So the make step will yield
compilation errors. But it's an easy change to remedy that (see patch
below). Only three files need a small change each. Note that the change
of Make.config will prevent CX88 based cards from working. If you have
one of those in addition to the 300i, leave Make.config as it is and fix
the remaining compilation errors yourself :-p

Note that the "make install" will overwrite the installed dvb related
modules in /lib/modules/<kernel-version>. If you later test a newer
kernel, and the card can still not tune with that, rerun the "make
install" step.

Have fun!
  Ingo

*** /usr/src/video4linux_20050627/msp3400.c     Thu Sep 15 20:16:33 2005
--- /usr/src/video4linux_20050627/msp3400.c.orig        Thu Sep 15
20:13:07 2005
*************** static int msp34xx_sleep(struct msp3400c
*** 755,761 ****
                }
        }
        if (current->flags & PF_FREEZE)
!               refrigerator(/*PF_FREEZE*/);
        remove_wait_queue(&msp->wq, &wait);
        return msp->restart;
  }
--- 755,761 ----
                }
        }
        if (current->flags & PF_FREEZE)
!               refrigerator(PF_FREEZE);
        remove_wait_queue(&msp->wq, &wait);
        return msp->restart;
  }


*** /usr/src/video4linux_20050627/video-buf-dvb.c       Thu Sep 15
20:17:44 2005
--- /usr/src/video4linux_20050627/video-buf-dvb.c.orig  Thu Sep 15
20:17:12 2005
*************** static int videobuf_dvb_thread(void *dat
*** 63,69 ****
                if (kthread_should_stop())
                        break;
                if (current->flags & PF_FREEZE)
!                       refrigerator(/*PF_FREEZE*/);

                /* feed buffer data to demux */
                if (buf->state == STATE_DONE)
--- 63,69 ----
                if (kthread_should_stop())
                        break;
                if (current->flags & PF_FREEZE)
!                       refrigerator(PF_FREEZE);

                /* feed buffer data to demux */
                if (buf->state == STATE_DONE)

*** /usr/src/video4linux_20050627/Make.config   Thu Sep 15 20:19:08 2005
--- /usr/src/video4linux_20050627/Make.config.orig      Thu Sep 15
21:47:44 2005
*************** CONFIG_VIDEO_SAA7134    := m
*** 6,17 ****
  CONFIG_VIDEO_IR               := m
  CONFIG_VIDEO_TUNER    := m
  CONFIG_VIDEO_TVAUDIO  := m
! CONFIG_VIDEO_CX88     := n

  # doesn't build on kernels older than 2.6.10
  CONFIG_VIDEO_CX88_DVB := n
  CONFIG_VIDEO_SAA7134_DVB := n
  if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10))
!  CONFIG_VIDEO_CX88_DVB        := n
  if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10))
   CONFIG_VIDEO_SAA7134_DVB := m
--- 6,17 ----
  CONFIG_VIDEO_IR               := m
  CONFIG_VIDEO_TUNER    := m
  CONFIG_VIDEO_TVAUDIO  := m
! CONFIG_VIDEO_CX88     := m

  # doesn't build on kernels older than 2.6.10
  CONFIG_VIDEO_CX88_DVB := n
  CONFIG_VIDEO_SAA7134_DVB := n
  if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10))
!  CONFIG_VIDEO_CX88_DVB        := m
  if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10))
   CONFIG_VIDEO_SAA7134_DVB := m






More information about the linux-dvb mailing list