[linux-dvb] Pinnacle PCTV HD Pro Stick

Markus Rechberger mrechberger at gmail.com
Fri Nov 17 08:37:53 CET 2006


On 11/17/06, Markus Rechberger <mrechberger at gmail.com> wrote:
> Hi,
>
> On 11/17/06, Erik Meitner <emeitner at gmail.com> wrote:
> > I have a Pinnacle PCTV HD Pro Stick that I hoped would work with the
> current
> > drivers. My initial investigation and work shows that, although it is not
> > currently plug-n-play, it is similar enough to supported hardware that it
> > may require little work.
> >
> > USB ID: 2304:0227.
> > Device identifies itself as a "PCTV 800e".
> > It appears to be based on an em2870.
> > Has an MT2060 tuner.
> > Output of lsusb is attached.
> >
>
> So far the components are supported.
> http://www.pinnaclesys.com/PublicSite/us/Products/Consumer+Products/PCTV+Tuners/PCTV+Analog_Digital+PVR/PCTV+HD+Pro+Stick
> >
> > I did some testing to see how the device could be supported in the
> existing
> > framework. I have made some progress(I think) but I need to do some
> > research. The changes i made are included in the attached patch made to
> this
> > Mercurial tree:
> > http://linuxtv.org/hg/~mrechberger/v4l-dvb / 3586:b9780631fdb5
> >
>
> wrong tree..
> it should be http://linuxtv.org/hg/~mrechberger/v4l-dvb-kernel
>
> > So far the em28xx module loads fine. The em2880-dvb module does not load
> > properly.
> > Below is the kernel log of loading the em28xx and em2880-dvb modules:
> >
> > $ sudo modprobe em28xx device_mode=1 core_debug=1 i2c_scan=1  i2c_debug=1
> > [17180834.864000] Linux video capture interface: v1.00
> > [17180834.868000] em28xx v4l2 driver version 0.0.1 loaded
> > [17180834.868000] em28xx new video device (2304:0227): interface 0, class
> > 255
> > [17180834.868000] em28xx #0: Alternate settings: 8
> > [17180834.868000] em28xx #0: Alternate setting 0, max size= 0
> > [17180834.868000] em28xx #0: Alternate setting 1, max size= 0
> > [17180834.868000] em28xx #0: Alternate setting 2, max size= 1448
> > [17180834.868000] em28xx #0: Alternate setting 3, max size= 2048
> > [17180834.868000] em28xx #0: Alternate setting 4, max size= 2304
> > [17180834.868000] em28xx #0: Alternate setting 5, max size= 2580
> > [17180834.868000] em28xx #0: Alternate setting 6, max size= 2892
> > [17180834.868000] em28xx #0: Alternate setting 7, max size= 3072
> > [17180834.892000] /home/emeitner/dev/dvb/test/v4l-dvb/v4l/mt2060-tuner.c:
> > mt2060_module_init
> > [17180838.180000] attach_inform: eeprom detected.
> > [17180838.180000] tuner 4-0061: chip found @ 0xc2 (em28xx #0)
> > [17180838.180000] attach inform: detected I2C address c2
> > [17180838.228000] em28xx #0: i2c eeprom 00: 1a eb 67 95 04 23 27 02 d0 12
> 5c
> > 03 8e 16 a4 1c
> > [17180838.228000] em28xx #0: i2c eeprom 10: 6a 24 27 57 46 07 01 00 00 00
> 00
> > 00 00 00 00 00
> > [17180838.228000] em28xx #0: i2c eeprom 20: 46 00 01 00 f0 10 02 00 b8 00
> 00
> > 00 5b 1c 00 00
> > [17180838.228000] em28xx #0: i2c eeprom 30: 00 00 20 40 20 80 02 20 01 01
> 00
> > 00 00 00 00 00
> > [17180838.228000] em28xx #0: i2c eeprom 40: 00 00 00 00 00 00 00 00 00 00
> 00
> > 00 00 00 00 00
> > [17180838.228000] em28xx #0: i2c eeprom 50: 00 00 00 00 00 00 00 00 00 00
> 00
> > 00 00 00 00 00
> > [17180838.228000] em28xx #0: i2c eeprom 60: 00 00 00 00 00 00 00 00 00 00
> 24
> > 03 50 00 69 00
> > [17180838.228000] em28xx #0: i2c eeprom 70: 6e 00 6e 00 61 00 63 00 6c 00
> 65
> > 00 20 00 53 00
> > [17180838.228000] em28xx #0: i2c eeprom 80: 79 00 73 00 74 00 65 00 6d 00
> 73
> > 00 00 00 16 03
> > [17180838.228000] em28xx #0: i2c eeprom 90: 50 00 43 00 54 00 56 00 20 00
> 38
> > 00 30 00 30 00
> > [17180838.228000] em28xx #0: i2c eeprom a0: 65 00 00 00 1c 03 30 00 36 00
> 30
> > 00 38 00 30 00
> > [17180838.228000] em28xx #0: i2c eeprom b0: 31 00 30 00 31 00 30 00 33 00
> 38
> > 00 34 00 00 00
> > [17180838.228000] em28xx #0: i2c eeprom c0: 00 00 00 00 00 00 00 00 00 00
> 00
> > 00 00 00 00 00
> > [17180838.228000] em28xx #0: i2c eeprom d0: 00 00 00 00 00 00 00 00 00 00
> 00
> > 00 00 00 00 00
> > [17180838.228000] em28xx #0: i2c eeprom e0: 00 00 00 00 00 00 00 00 00 00
> 00
> > 00 00 00 00 00
> > [17180838.228000] em28xx #0: i2c eeprom f0: 00 00 dc 00 00 00 00 00 00 00
> 00
> > 00 00 00 00 00
> > [17180838.228000] EEPROM ID= 0x9567eb1a
> > [17180838.228000] Vendor/Product ID= 2304:0227
> > [17180838.228000] AC97 audio (5 sample rates)
> > [17180838.228000] 500mA max power
> > [17180838.228000] Table at 0x27, strings=0x168e, 0x1ca4, 0x246a
> > [17180838.260000] em28xx #0: found i2c device @ 0xa0 [eeprom]
> > [17180838.264000] em28xx #0: found i2c device @ 0xc2 [tuner (analog)]
> > [17180839.316000] em28xx #0: V4L2 device registered as /dev/video0
> > [17180839.316000] em28xx #0: Found Pinnacle PCTV HD PRO Stick
> > [17180839.316000] usbcore: registered new driver em28xx
> >
> >
> > $ sudo modprobe em2880-dvb
> >
> > [17180876.128000] em2880-dvb.c: DVB Init
> > [17180876.188000] FIXME: Write failed, backtrace:
> > [17180876.188000] ===============================
> > [17180876.188000] 7f
> > [17180876.188000] ================================
> > [17180876.188000] zl10353_read_register: readreg error (reg=127, ret==-19)
> > [17180876.188000] em2880-dvb.c: failed initializing zl10353 DVB-T
> > demodulator
> > [17180876.188000] em2880-dvb.c: retrying with mt352 DVB-T demodulator
> > [17180876.200000] FIXME: Write failed, backtrace:
> > [17180876.200000] ===============================
> > [17180876.200000] 7f
> > [17180876.200000] ================================
> > [17180876.200000] mt352_read_register: readreg error (reg=127, ret==-19)
> > [17180876.200000] em2880-dvb.c: no luck with mt352 demodulator, not
> > attaching em2880-dvb
> > [17180876.200000] em2880-dvb.c: DVB-T demodulator not reachable, did you
> try
> > "modprobe em28xx device_mode=1"
> >
> >
> > I now need to do some USB sniffing and work on em28xx_card_setup(). Any
> > suggestions/help/comments would be appreciated.
> >
> > Not much, but its a start:
> > =========================
> >
> > --- em2880-dvb.c.orig    2006-11-15 23:16:49.000000000 -0600
> > +++ em2880-dvb.c    2006-11-16 22:43:33.000000000 -0600
> > @@ -560,6 +560,7 @@ static int em2880_dvb_init(struct em28xx
> >              dvb_dev->frontend =
> > zl10353_attach(&em2880_pinnacle_pctvstick_dev,&dev->i2c_adap);
> >              break;
> >          case EM2870_BOARD_KWORLD_355U:
> > +        case EM2800_BOARD_PINNACLE_PCTV_HD_PRO:
> >              dev->em28xx_write_regs_req(dev,0x00,0x48,"\x00",1);
> >              dev->em28xx_write_regs_req(dev,0x00,0x12,"\x37",1);
> >              dev->em28xx_write_regs_req(dev,0x00,0x04,"\x00",1); /* enable
> > zl10353 on i2c bus */
> > --- em28xx-cards.c.orig    2006-11-15 22:23:05.000000000 -0600
> > +++ em28xx-cards.c    2006-11-16 23:14:56.000000000 -0600
> > @@ -684,6 +684,29 @@ struct em28xx_board em28xx_boards[] = {
> >              .amux     = 1,
> >          }},
> >      },
> > +    [EM2800_BOARD_PINNACLE_PCTV_HD_PRO] = {
> > +        .name         = "Pinnacle PCTV HD PRO Stick",
> > +        .has_tuner    = 1,
> > +        .tuner_type   = TUNER_MT2060,
> > +        .dev_modes    = EM28XX_VIDEO, /*| EM28XX_AUDIO | EM28XX_VBI |
> > EM28XX_DVB,*/
> > +        .decoder      = EM28XX_SAA7113,
> > +        .norm         = VIDEO_MODE_NTSC,
> > +        .tda9887_conf = TDA9887_PRESENT,
> > +        .vchannels    = 3,
> > +        .input          = {{
> > +            .type     = EM28XX_VMUX_TELEVISION,
> > +            .vmux     = 2,
> > +            .amux     = 0,
> > +        },{
> > +            .type     = EM28XX_VMUX_COMPOSITE1,
> > +            .vmux     = 0,
> > +            .amux     = 1,
> > +        },{
> > +            .type     = EM28XX_VMUX_SVIDEO,
> > +            .vmux     = 9,
> > +            .amux     = 1,
> > +        }},
> > +    },
> >  };
> >
> >  const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
> > @@ -703,6 +726,7 @@ struct usb_device_id em28xx_id_table []
> >      { USB_DEVICE(0xeb1a, 0x2860), .driver_info = EM2860_BOARD_GENERIC },
> >      { USB_DEVICE(0x0ccd, 0x0036), .driver_info =
> > EM2820_BOARD_TERRATEC_CINERGY_250 },
> >      { USB_DEVICE(0x2304, 0x0208), .driver_info =
> > EM2820_BOARD_PINNACLE_USB_2 },
> > +    { USB_DEVICE(0x2304, 0x0227), .driver_info =
> > EM2800_BOARD_PINNACLE_PCTV_HD_PRO },
> >  #if 1
> >      { USB_DEVICE(0x2040, 0x4200), .driver_info =
> > EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 },
> >  #else
> > --- em28xx.h.orig    2006-11-15 22:23:10.000000000 -0600
> > +++ em28xx.h    2006-11-15 22:24:42.000000000 -0600
> > @@ -86,6 +86,7 @@
> >  #define EM2860_BOARD_GADMEI_UTV330        36
> >  #define EM2800_BOARD_VGEAR_POCKETTV             37
> >  #define EM2870_BOARD_KWORLD_350U        38
> > +#define EM2800_BOARD_PINNACLE_PCTV_HD_PRO    39
> >
> >  #define EM28XX_VBI_LINES 34
> >
> >
>
> this change was correct, but you missed em28xx-i2c.c, and please do
> not use my v4l-dvb tree.. it's a fork of the maintree 11 months ago!
> My v4l-dvb-kernel tree is the right one for these experiments.
> Let me know if it works out by adding
> EM2800_BOARD_PINNACLE_PCTV_HD_PRO     to em28xx-i2c.c
>
> You should also name the device EM2880_BOARD_PINNACLE_PCTV_HD_PRO
> instead of EM2800 (since em2800 is a castrated version of the evolved
> em28xx series).
>

Correction: it should be EM2870_BOARD_PINNACLE_PCTV_HD_PRO

Markus



More information about the linux-dvb mailing list