PVR-150 improvements
Martin Ziegler
martin.ziegler at cevibasel.ch
Wed Sep 3 20:42:03 UTC 2008
> Date: Wed, 3 Sep 2008 11:15:45 +0200
> From: Stefan Ehmann <shoesoft at gmx.net>
> Subject: PVR-150 improvements
> To: freebsd-multimedia at freebsd.org
> Message-ID: <200809031115.45753.shoesoft at 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;
> }
>
More information about the freebsd-multimedia
mailing list