Re: [patch] Remote Vision MX supported

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



Congratulations, you did it in a very short time.
Just a question, regarding the muxsel_hook:
For future implementations and/or new cards add, does it breaks binary
compatibility ?
should we use the same function, just with the proper mux change code for
another board w/ this kind of device ? I think its ok, dont see a problem
there...

Regards.

----- Original Message -----
From: "Miguel Freitas" <miguel@xxxxxxxxxxxxxxxx>
To: <video4linux-list@xxxxxxxxxx>
Sent: Monday, November 05, 2001 5:00 PM
Subject:  [patch] Remote Vision MX supported


> Hi folks,
>
> I think i did it. The card is now working fine under linux with 16
> inputs. In fact, i can tell you it's REALLY working: we just caught a
> thief in our university thanks to the cameras. One guard sneaked into a
> professor room at 3am to steal memory and hd and gave a nice shot to our
> camera! he's being fired today...
>
> I needed to create a muxsel_hook as the crosspoint switch has to be
> reseted and pulsed to change the input channel. Also uncommented some
> code related to gpiomask2.
>
> The patch is for linux-2.4.13 (linus). More information within.
> Thanks everybody for the help, if you need anything fell free to ask...
>
> Regards,
>
> Miguel Freitas
>


----------------------------------------------------------------------------
----


> diff -ur linux-2.4.13-linus/drivers/media/video/bttv-cards.c
linux-2.4.13/drivers/media/video/bttv-cards.c
> --- linux-2.4.13-linus/drivers/media/video/bttv-cards.c Wed Oct 17
19:19:20 2001
> +++ linux-2.4.13/drivers/media/video/bttv-cards.c Mon Nov  5 16:22:41 2001
> @@ -55,6 +55,7 @@
>  static void gvbctv3pci_audio(struct bttv *btv, struct video_audio *v, int
set);
>  static void winfast2000_audio(struct bttv *btv, struct video_audio *v,
int set);
>  static void pvbt878p9b_audio(struct bttv *btv, struct video_audio *v, int
set);
> +static void rv605_muxsel(struct bttv *btv, unsigned int input);
>
>  /* config variables */
>  static int triton1=0;
> @@ -1106,6 +1107,21 @@
>   tuner_type: -1,
>   audio_hook: pvbt878p9b_audio,
>   has_radio: 1,
> +},{
> + /* Miguel Freitas <miguel@xxxxxxxxxxxxxxxx> */
> + name: "RemoteVision MX (RV605)",
> + video_inputs: 16,
> + audio_inputs: 0,
> + tuner: 0,
> + svhs: 0,
> + gpiomask: 0x00,
> + gpiomask2: 0x07ff,
> + muxsel: { 0x33, 0x13, 0x23, 0x43, 0xf3, 0x73, 0xe3, 0x03,
> +   0xd3, 0xb3, 0xc3, 0x63, 0x93, 0x53, 0x83, 0xa3 },
> + no_msp34xx: 1,
> + no_tda9875: 1,
> + tuner_type: -1,
> + muxsel_hook: rv605_muxsel,
>  }
>  };
>
> @@ -1922,6 +1938,47 @@
>   }
>  }
>
> +/* RemoteVision MX (rv605) muxsel helper [Miguel Freitas]
> + *
> + * This is needed because rv605 don't use a normal multiplex, but a
crosspoint
> + * switch instead (CD22M3494E). This IC can have multiple active
connections
> + * between Xn (input) and Yn (output) pins. We need to clear any existing
> + * connection prior to establish a new one, pulsing the STROBE pin.
> + *
> + * The board hardwire Y0 (xpoint) to MUX1 and MUXOUT to Yin.
> + * GPIO pins are wired as:
> + *  GPIO[0:3] - AX[0:3] (xpoint) - P1[0:3] (microcontroler)
> + *  GPIO[4:6] - AY[0:2] (xpoint) - P1[4:6] (microcontroler)
> + *  GPIO[7]   - DATA (xpoint)    - P1[7] (microcontroler)
> + *  GPIO[8]   -                  - P3[5] (microcontroler)
> + *  GPIO[9]   - RESET (xpoint)   - P3[6] (microcontroler)
> + *  GPIO[10]  - STROBE (xpoint)  - P3[7] (microcontroler)
> + *  GPINTR    -                  - P3[4] (microcontroler)
> + *
> + * The microcontroler is a 80C32 like. It should be possible to change
xpoint
> + * configuration either directly (as we are doing) or using the
microcontroler
> + * which is also wired to I2C interface. I have no further info on the
> + * microcontroler features, one would need to disassembly the firmware.
> + * note: the vendor refused to give any information on this product, all
> + *       that stuff was found using a multimeter! :)
> + */
> +static void rv605_muxsel(struct bttv *btv, unsigned int input)
> +{
> + /* reset all conections */
> + btaor(0x200,~0x200, BT848_GPIO_DATA);
> + mdelay(1);
> + btaor(0x000,~0x200, BT848_GPIO_DATA);
> + mdelay(1);
> +
> + /* create a new conection */
> + btaor(0x080,~0x480, BT848_GPIO_DATA);
> + btaor(0x480,~0x480, BT848_GPIO_DATA);
> + mdelay(1);
> + btaor(0x080,~0x480, BT848_GPIO_DATA);
> + mdelay(1);
> +}
> +
> +
>
 /* -----------------------------------------------------------------------
*/
>  /* motherboard chipset specific stuff
*/
>
> diff -ur linux-2.4.13-linus/drivers/media/video/bttv-driver.c
linux-2.4.13/drivers/media/video/bttv-driver.c
> --- linux-2.4.13-linus/drivers/media/video/bttv-driver.c Wed Oct 17
19:19:20 2001
> +++ linux-2.4.13/drivers/media/video/bttv-driver.c Mon Nov  5 16:29:05
2001
> @@ -425,18 +425,16 @@
>
>  static void bt848_muxsel(struct bttv *btv, unsigned int input)
>  {
> -
> -#if 0 /* seems no card uses this ... */
> +        /* needed by RemoteVideo MX */
>
btaor(bttv_tvcards[btv->type].gpiomask2,~bttv_tvcards[btv->type].gpiomask2,
>                BT848_GPIO_OUT_EN);
> -#endif
>
>   /* This seems to get rid of some synchronization problems */
>   btand(~(3<<5), BT848_IFORM);
> - mdelay(10);
> -
> + mdelay(10);
> +
>   input %= bttv_tvcards[btv->type].video_inputs;
> - if (input==bttv_tvcards[btv->type].svhs)
> + if (input==bttv_tvcards[btv->type].svhs)
>   {
>   btor(BT848_CONTROL_COMP, BT848_E_CONTROL);
>   btor(BT848_CONTROL_COMP, BT848_O_CONTROL);
> @@ -446,20 +444,25 @@
>   btand(~BT848_CONTROL_COMP, BT848_E_CONTROL);
>   btand(~BT848_CONTROL_COMP, BT848_O_CONTROL);
>   }
> - btaor((bttv_tvcards[btv->type].muxsel[input&7]&3)<<5, ~(3<<5),
BT848_IFORM);
> - audio(btv, (input!=bttv_tvcards[btv->type].tuner) ?
> +
> + btaor((bttv_tvcards[btv->type].muxsel[input]&3)<<5, ~(3<<5),
BT848_IFORM);
> + audio(btv, (input!=bttv_tvcards[btv->type].tuner) ?
>                AUDIO_EXTERN : AUDIO_TUNER, 1);
>
> -#if 0 /* seems no card uses this ... */
>   btaor(bttv_tvcards[btv->type].muxsel[input]>>4,
>   ~bttv_tvcards[btv->type].gpiomask2, BT848_GPIO_DATA);
> +
> + /* card specific hook */
> + if( bttv_tvcards[btv->type].muxsel_hook )
> + bttv_tvcards[btv->type].muxsel_hook ( btv, input );
> +
>   if (bttv_gpio)
>   bttv_gpio_tracking(btv,"muxsel");
> -#endif
> +
>  }
>
>
> -struct tvnorm
> +struct tvnorm
>  {
>          u32 Fsc;
>          u16 swidth, sheight; /* scaled standard width, height */
> diff -ur linux-2.4.13-linus/drivers/media/video/bttv.h
linux-2.4.13/drivers/media/video/bttv.h
> --- linux-2.4.13-linus/drivers/media/video/bttv.h Wed Oct 17 19:19:20 2001
> +++ linux-2.4.13/drivers/media/video/bttv.h Mon Nov  5 15:48:30 2001
> @@ -87,6 +87,7 @@
>  #define BTTV_PV_BT878P_PLUS 0x46
>  #define BTTV_FLYVIDEO98EZ   0x47
>  #define BTTV_PV_BT878P_9B   0x48
> +#define BTTV_RV605          0x49
>
>
>  /* i2c address list */
> @@ -123,7 +124,7 @@
>          int tuner;
>          int svhs;
>          u32 gpiomask;
> -        u32 muxsel[8];
> +        u32 muxsel[16];
>          u32 audiomux[6]; /* Tuner, Radio, external, internal, mute,
stereo */
>          u32 gpiomask2;   /* GPIO MUX mask */
>
> @@ -141,6 +142,7 @@
>   int tuner_type;
>   int has_radio;
>   void (*audio_hook)(struct bttv *btv, struct video_audio *v, int set);
> + void (*muxsel_hook)(struct bttv *btv, unsigned int input);
>  };
>
>  extern struct tvcard bttv_tvcards[];
>





[Index of Archives]     [Linux DVB]     [Video Disk Recorder]     [Asterisk]     [Photo]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Free Photo Albums]     [Fedora Users]     [Fedora Women]     [ALSA Users]     [ALSA Devel]     [Linux USB]

Powered by Linux