From: Peter Skipworth <pete@peterskipworth.com> The bttv module currently lacks support for the Adlink RTV24 capture card. The following patch adds support for the Adlink RTV24 video capture card to the bttv module. Cc: Gerd Knorr <kraxel@bytesex.org> Signed-off-by: Andrew Morton <akpm@osdl.org> --- drivers/media/video/bttv-cards.c | 106 +++++++++++++++++++++++++++++++++++++++ drivers/media/video/bttv.h | 1 2 files changed, 107 insertions(+) diff -puN drivers/media/video/bttv-cards.c~bttv-support-for-adlink-rtv24-capture-card drivers/media/video/bttv-cards.c --- 25/drivers/media/video/bttv-cards.c~bttv-support-for-adlink-rtv24-capture-card 2005-05-17 00:56:19.000000000 -0700 +++ 25-akpm/drivers/media/video/bttv-cards.c 2005-05-17 00:56:19.000000000 -0700 @@ -51,6 +51,7 @@ static void avermedia_eeprom(struct bttv static void osprey_eeprom(struct bttv *btv); static void modtec_eeprom(struct bttv *btv); static void init_PXC200(struct bttv *btv); +static void init_RTV24(struct bttv *btv); static void winview_audio(struct bttv *btv, struct video_audio *v, int set); static void lt9415_audio(struct bttv *btv, struct video_audio *v, int set); @@ -2251,6 +2252,19 @@ struct tvcard bttv_tvcards[] = { .no_tda7432 = 1, .no_tda9875 = 1, .muxsel_hook = kodicom4400r_muxsel, +}, +{ + /* ---- card 0x86---------------------------------- */ + /* Michael Henson <mhenson@clarityvi.com> */ + /* Adlink RTV24 with special unlock codes */ + .name = "Adlink RTV24", + .video_inputs = 4, + .audio_inputs = 1, + .tuner = 0, + .svhs = 2, + .muxsel = { 2, 3, 1, 0}, + .tuner_type = -1, + .pll = PLL_28, }}; static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards); @@ -2748,6 +2762,9 @@ void __devinit bttv_init_card2(struct bt case BTTV_KODICOM_4400R: kodicom4400r_init(btv); break; + case BTTV_ADLINK_RTV24: + init_RTV24( btv ); + break; } /* pll configuration */ @@ -3303,6 +3320,95 @@ static void __devinit init_PXC200(struct printk(KERN_INFO "PXC200 Initialised.\n"); } +/* ----------------------------------------------------------------------- */ +/* + * The Adlink RTV-24 (aka Angelo) has some special initialisation to unlock + * it. This apparently involves the following procedure for each 878 chip: + * + * 1) write 0x00C3FEFF to the GPIO_OUT_EN register + * + * 2) write to GPIO_DATA + * - 0x0E + * - sleep 1ms + * - 0x10 + 0x0E + * - sleep 10ms + * - 0x0E + * read from GPIO_DATA into buf (uint_32) + * - if ( data>>18 & 0x01 != 0) || ( buf>>19 & 0x01 != 1 ) + * error. ERROR_CPLD_Check_Failed stop. + * + * 3) write to GPIO_DATA + * - write 0x4400 + 0x0E + * - sleep 10ms + * - write 0x4410 + 0x0E + * - sleep 1ms + * - write 0x0E + * read from GPIO_DATA into buf (uint_32) + * - if ( buf>>18 & 0x01 ) || ( buf>>19 && 0x01 != 0 ) + * error. ERROR_CPLD_Check_Failed. + */ +/* ----------------------------------------------------------------------- */ +void init_RTV24(struct bttv *btv) +{ + uint32_t dataRead = 0; + long watchdog_value = 0x0E; + + printk( + KERN_INFO + "bttv%d: Adlink RTV-24 initialisation in progress ...\n", + btv->c.nr + ); + + btwrite( 0x00c3feff, BT848_GPIO_OUT_EN ); + + btwrite( 0 + watchdog_value, BT848_GPIO_DATA ); + msleep( 1 ); + btwrite( 0x10 + watchdog_value, BT848_GPIO_DATA ); + msleep( 10 ); + btwrite( 0 + watchdog_value, BT848_GPIO_DATA ); + + dataRead = btread( BT848_GPIO_DATA ); + + if ( ( ( ( dataRead >> 18 ) & 0x01 ) != 0 ) || + ( ( ( dataRead >> 19 ) & 0x01 ) != 1 ) + ) + { + printk( + KERN_INFO + "bttv%d: Adlink RTV-24 initialisation(1) ERROR_CPLD_Check_Failed (read %d)\n", + btv->c.nr, dataRead + ); + } + + btwrite( 0x4400 + watchdog_value, BT848_GPIO_DATA ); + msleep( 10 ); + btwrite( 0x4410 + watchdog_value, BT848_GPIO_DATA ); + msleep( 1 ); + btwrite( watchdog_value, BT848_GPIO_DATA ); + msleep( 1 ); + dataRead = btread( BT848_GPIO_DATA ); + + if ( ( ( ( dataRead >> 18 ) & 0x01 ) != 0 ) || + ( ( ( dataRead >> 19 ) & 0x01 ) != 0 ) + ) + { + printk( + KERN_INFO + "bttv%d: Adlink RTV-24 initialisation(2) ERROR_CPLD_Check_Failed (read %d)\n", + btv->c.nr, dataRead + ); + + return; + } + + printk( + KERN_INFO + "bttv%d: Adlink RTV-24 initialisation complete.\n", + btv->c.nr + ); +} + + /* ----------------------------------------------------------------------- */ /* Miro Pro radio stuff -- the tea5757 is connected to some GPIO ports */ diff -puN drivers/media/video/bttv.h~bttv-support-for-adlink-rtv24-capture-card drivers/media/video/bttv.h --- 25/drivers/media/video/bttv.h~bttv-support-for-adlink-rtv24-capture-card 2005-05-17 00:56:19.000000000 -0700 +++ 25-akpm/drivers/media/video/bttv.h 2005-05-17 00:56:19.000000000 -0700 @@ -135,6 +135,7 @@ #define BTTV_DVICO_DVBT_LITE 0x80 #define BTTV_TIBET_CS16 0x83 #define BTTV_KODICOM_4400R 0x84 +#define BTTV_ADLINK_RTV24 0x86 /* i2c address list */ #define I2C_TSA5522 0xc2 _