Date: Wed, 3 Sep 2008 22:24:53 +0200 From: "Martin Ziegler" <martin.ziegler@cevibasel.ch> To: <freebsd-multimedia@freebsd.org> Subject: RE: PVR-150 improvements Message-ID: <67921C73D4E24B8E9B51A1E79CDF7F2D@leaf101> In-Reply-To: <20080903120019.EF0CB10656AB@hub.freebsd.org> References: <20080903120019.EF0CB10656AB@hub.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> Date: Wed, 3 Sep 2008 11:15:45 +0200 > From: Stefan Ehmann <shoesoft@gmx.net> > Subject: PVR-150 improvements > To: freebsd-multimedia@freebsd.org > Message-ID: <200809031115.45753.shoesoft@gmx.net> > Content-Type: text/plain; charset="us-ascii" > > I recently acquired a PVR-150 card and had some issues with > the pvrxxx port. I > could solve them based on the linux ivtv and lirc sources. > Thanks to them and > to usleepless for providing the port. > > Maybe someone will find my changes useful: > - added correct detection of my tuner in tveeprom.c > - stereo is now working (only mono previously) > - added support for external remote > - don't stop encoder on channel change > > The last one was very annoying when playing "live TV" via > mplayer. Because > the encoder was stopped mplayer doesn't have enough data. So > I got video > stutters and audio sync problems. I had to restart mplayer > after a few channel > changes. To avoid clicks, audio is muted during channel change. > > Here are my patches against pvrxxx-09042008 from > http://usleepless.110mb.com/pvrxxx_port.tgz > In the current state the patches will break other cards > because I haven't > included checks which card is attached. But I hope they will > make it in some > way into the next pvrxxx version. > Nice work. I've 2 notes: - The directory pvrxxx/work and is not present by default. So you can't patch the files directly. - Works with a PVR-150 or a PVR-350 but not both at the same time. If both are present in the system, only the PVR-350 works (as cxm1). Thanks. Martin > --- pvrxxx.orig/work/dev/cxm/cxm.c 2008-09-02 > 21:32:53.000000000 +0200 > +++ pvrxxx/work/dev/cxm/cxm.c 2008-09-02 22:08:12.000000000 +0200 > @@ -1999,6 +1999,9 @@ > > tda9887_command(sc->iicbus, VIDIOC_S_STD, &sc->tuner_std); > cx25840_command(sc->iicbus, VIDIOC_S_STD, &sc->tuner_std); > + if (cxm_ir_init(sc) < 0) { > + device_printf(dev, "could not > initialize IR remote\n"); > + } > } /* sc->cardtype == CXM_PVR250 */ > > if(sc->cardtype == CXM_PVR500) > --- pvrxxx.orig/work/dev/cxm/cxm.h 2008-09-02 > 21:32:53.000000000 +0200 > +++ pvrxxx/work/dev/cxm/cxm.h 2008-09-02 22:07:46.000000000 +0200 > @@ -476,7 +476,7 @@ > * I2C addresses > */ > #define CXM_I2C_EEPROM 0xa0 > -#define CXM_I2C_IR 0x30 > +#define CXM_I2C_IR 0xe2 > #define CXM_I2C_MSP3400 0x80 > #define CXM_I2C_SAA7115 0x42 > #define CXM_I2C_TUNER 0xc2 > --- pvrxxx.orig/work/dev/cxm/cxm_ir.c 2008-09-02 > 21:32:53.000000000 +0200 > +++ pvrxxx/work/dev/cxm/cxm_ir.c 2008-09-03 > 09:27:31.000000000 +0200 > @@ -108,17 +108,11 @@ > { > int result; > > - result = cxm_ir_read(sc->iicbus, CXM_I2C_IR, buf, len); > + char tmp[6]; > + result = cxm_ir_read(sc->iicbus, CXM_I2C_IR, tmp, sizeof(tmp)); > + buf[0] = tmp[3]; > + buf[1] = tmp[4]; > + buf[2] = tmp[5]; > > - if (result >= 0) > - return result; > - > - /* > - * If the IR receiver didn't respond, > - * then wait 50 ms and try again. > - */ > - > - tsleep(&sc->iicbus, PZERO, "IR", hz / 20 ); > - > - return cxm_ir_read(sc->iicbus, CXM_I2C_IR, buf, len); > + return result; > } > --- ./pvrxxx.orig/work/modules/cxm/cxm/cx25840-core.c 2007-02-16 > 21:07:28.000000000 +0100 > +++ ./pvrxxx/work/modules/cxm/cxm/cx25840-core.c > 2008-08-28 19:57:34.000000000 > +0200 > @@ -252,7 +252,7 @@ > instead of V4L2_STD_PAL. Someone needs to test this. */ > if (std & V4L2_STD_PAL ) { > /* Follow tuner change procedure for PAL */ > - cx25840_write(client, 0x808, 0x4f); /* 0x4f */ > + cx25840_write(client, 0x808, 0xff); > cx25840_write(client, 0x80b, 0x10); > } else if (std & V4L2_STD_SECAM) { > /* Select autodetect for SECAM */ > --- ./pvrxxx.orig/work/modules/cxm/cxm/tveeprom.c 2008-08-28 > 20:02:16.000000000 +0200 > +++ ./pvrxxx/work/modules/cxm/cxm/tveeprom.c 2008-08-28 > 19:58:35.000000000 > +0200 > @@ -275,7 +275,7 @@ > { TUNER_ABSENT, "Thompson DTT75105"}, > { TUNER_ABSENT, "Conexant_CX24109"}, > { TUNER_TCL_2002N, "TCL M2523_5N_E"}, > - { TUNER_ABSENT, "TCL M2523_3DB_E"}, > + { TUNER_TCL_2002MB, "TCL M2523_3DB_E"}, > { TUNER_ABSENT, "Philips 8275A"}, > { TUNER_ABSENT, "Microtune MT2060"}, > { TUNER_ABSENT, "Philips FM1236 MK5"}, > --- pvrxxx.orig/work/modules/cxm/cxm/v4l2_ioctl_hook.c > 2007-04-11 > 20:47:19.000000000 +0200 > +++ pvrxxx/work/modules/cxm/cxm/v4l2_ioctl_hook.c 2008-09-03 > 10:39:14.000000000 +0200 > @@ -54,9 +54,7 @@ > vf.frequency = (freq * 16) / 1000; > vf.type = V4L2_TUNER_ANALOG_TV ; > > - if (sc->source == cxm_tuner_source) > - if (cxm_pause_encoder(sc) < 0) > - return ENXIO; > + set_mute(sc->iicbus, 1); > > /* if (sc->cardtype == CXM_PVR500) */ > tda9887_command(sc->iicbus, VIDIOC_S_FREQUENCY, &vf); > @@ -112,9 +110,7 @@ > if (sc->cardtype == CXM_PVR500) > cxm_cx25840_lock(sc,&vf); > > - if (sc->source == cxm_tuner_source) > - if (cxm_unpause_encoder(sc) < 0) > - return ENXIO; > + set_mute(sc->iicbus, 0); > > return 0; > } >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?67921C73D4E24B8E9B51A1E79CDF7F2D>