2005-04-16 15:20:36 -07:00
/*
*
* device driver for Conexant 2388 x based TV cards
* card - specific stuff .
*
* ( c ) 2003 Gerd Knorr < kraxel @ bytesex . org > [ SuSE Labs ]
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include <linux/init.h>
# include <linux/module.h>
# include <linux/pci.h>
# include <linux/delay.h>
# include "cx88.h"
2007-10-19 06:59:33 -03:00
# include "tea5767.h"
2005-04-16 15:20:36 -07:00
2007-08-15 14:41:58 -03:00
static unsigned int tuner [ ] = { [ 0 . . . ( CX88_MAXBOARDS - 1 ) ] = UNSET } ;
static unsigned int radio [ ] = { [ 0 . . . ( CX88_MAXBOARDS - 1 ) ] = UNSET } ;
static unsigned int card [ ] = { [ 0 . . . ( CX88_MAXBOARDS - 1 ) ] = UNSET } ;
module_param_array ( tuner , int , NULL , 0444 ) ;
module_param_array ( radio , int , NULL , 0444 ) ;
module_param_array ( card , int , NULL , 0444 ) ;
MODULE_PARM_DESC ( tuner , " tuner type " ) ;
MODULE_PARM_DESC ( radio , " radio tuner type " ) ;
MODULE_PARM_DESC ( card , " card type " ) ;
static unsigned int latency = UNSET ;
module_param ( latency , int , 0444 ) ;
MODULE_PARM_DESC ( latency , " pci latency timer " ) ;
2008-04-22 14:45:29 -03:00
# define info_printk(core, fmt, arg...) \
printk ( KERN_INFO " %s: " fmt , core - > name , # # arg )
# define warn_printk(core, fmt, arg...) \
printk ( KERN_WARNING " %s: " fmt , core - > name , # # arg )
# define err_printk(core, fmt, arg...) \
printk ( KERN_ERR " %s: " fmt , core - > name , # # arg )
2005-04-16 15:20:36 -07:00
/* ------------------------------------------------------------------ */
/* board config info */
2008-04-26 11:55:09 -03:00
/* If radio_type !=UNSET, radio_addr should be specified
*/
2007-08-15 14:41:58 -03:00
static const struct cx88_board cx88_boards [ ] = {
2005-04-16 15:20:36 -07:00
[ CX88_BOARD_UNKNOWN ] = {
. name = " UNKNOWN/GENERIC " ,
. tuner_type = UNSET ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 0 ,
} , {
. type = CX88_VMUX_COMPOSITE2 ,
. vmux = 1 ,
} , {
. type = CX88_VMUX_COMPOSITE3 ,
. vmux = 2 ,
} , {
. type = CX88_VMUX_COMPOSITE4 ,
. vmux = 3 ,
} } ,
} ,
[ CX88_BOARD_HAUPPAUGE ] = {
. name = " Hauppauge WinTV 34xxx models " ,
. tuner_type = UNSET ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0xff00 , // internal decoder
} , {
. type = CX88_VMUX_DEBUG ,
. vmux = 0 ,
. gpio0 = 0xff01 , // mono from tuner chip
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0xff02 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0xff02 ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0xff01 ,
} ,
} ,
[ CX88_BOARD_GDI ] = {
. name = " GDI Black Gold " ,
. tuner_type = UNSET ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2005-07-31 22:34:43 -07:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-04-16 15:20:36 -07:00
} } ,
} ,
[ CX88_BOARD_PIXELVIEW ] = {
. name = " PixelView " ,
2005-06-23 22:05:03 -07:00
. tuner_type = TUNER_PHILIPS_PAL ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0xff00 , // internal decoder
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0xff10 ,
2006-06-06 15:51:38 -03:00
} ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_ATI_WONDER_PRO ] = {
. name = " ATI TV Wonder Pro " ,
2005-06-23 22:05:03 -07:00
. tuner_type = TUNER_PHILIPS_4IN1 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2005-11-08 21:37:43 -08:00
. gpio0 = 0x03ff ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2005-11-08 21:37:43 -08:00
. gpio0 = 0x03fe ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-11-08 21:37:43 -08:00
. gpio0 = 0x03fe ,
2005-04-16 15:20:36 -07:00
} } ,
} ,
2005-11-08 21:37:43 -08:00
[ CX88_BOARD_WINFAST2000XP_EXPERT ] = {
. name = " Leadtek Winfast 2000XP Expert " ,
. tuner_type = TUNER_PHILIPS_4IN1 ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT ,
2005-11-08 21:37:43 -08:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x00F5e700 ,
. gpio1 = 0x00003004 ,
. gpio2 = 0x00F5e700 ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x00F5c700 ,
. gpio1 = 0x00003004 ,
. gpio2 = 0x00F5c700 ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x00F5c700 ,
. gpio1 = 0x00003004 ,
. gpio2 = 0x00F5c700 ,
. gpio3 = 0x02000000 ,
2005-11-08 21:37:43 -08:00
} } ,
. radio = {
. type = CX88_RADIO ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x00F5d700 ,
. gpio1 = 0x00003004 ,
. gpio2 = 0x00F5d700 ,
. gpio3 = 0x02000000 ,
2005-11-08 21:37:43 -08:00
} ,
} ,
2005-11-08 21:38:34 -08:00
[ CX88_BOARD_AVERTV_STUDIO_303 ] = {
2005-04-16 15:20:36 -07:00
. name = " AverTV Studio 303 (M126) " ,
2005-06-23 22:05:03 -07:00
. tuner_type = TUNER_PHILIPS_FM1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2006-03-09 16:09:51 -03:00
. gpio1 = 0xe09f ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2006-03-09 16:09:51 -03:00
. gpio1 = 0xe05f ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2006-03-09 16:09:51 -03:00
. gpio1 = 0xe05f ,
2005-04-16 15:20:36 -07:00
} } ,
. radio = {
2006-03-09 16:09:51 -03:00
. gpio1 = 0xe0df ,
2005-04-16 15:20:36 -07:00
. type = CX88_RADIO ,
} ,
} ,
[ CX88_BOARD_MSI_TVANYWHERE_MASTER ] = {
// added gpio values thanks to Michal
// values for PAL from DScaler
. name = " MSI TV-@nywhere Master " ,
2005-06-23 22:05:03 -07:00
. tuner_type = TUNER_MT2032 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-11-08 21:37:39 -08:00
. tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER_NTSC ,
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x000040bf ,
. gpio1 = 0x000080c0 ,
. gpio2 = 0x0000ff40 ,
} , {
2005-11-08 21:37:43 -08:00
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x000040bf ,
. gpio1 = 0x000080c0 ,
. gpio2 = 0x0000ff40 ,
} , {
2005-11-08 21:37:43 -08:00
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x000040bf ,
. gpio1 = 0x000080c0 ,
. gpio2 = 0x0000ff40 ,
2005-11-08 21:37:43 -08:00
} } ,
. radio = {
2005-04-16 15:20:36 -07:00
. type = CX88_RADIO ,
2007-10-19 06:59:33 -03:00
. vmux = 3 ,
. gpio0 = 0x000040bf ,
. gpio1 = 0x000080c0 ,
. gpio2 = 0x0000ff20 ,
2005-11-08 21:37:43 -08:00
} ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_WINFAST_DV2000 ] = {
2005-11-08 21:37:43 -08:00
. name = " Leadtek Winfast DV2000 " ,
. tuner_type = TUNER_PHILIPS_FM1216ME_MK3 ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT ,
2005-11-08 21:37:43 -08:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x0035e700 ,
. gpio1 = 0x00003004 ,
. gpio2 = 0x0035e700 ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x0035c700 ,
. gpio1 = 0x00003004 ,
. gpio2 = 0x0035c700 ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x0035c700 ,
. gpio1 = 0x0035c700 ,
. gpio2 = 0x02000000 ,
. gpio3 = 0x02000000 ,
} } ,
2005-11-08 21:37:43 -08:00
. radio = {
2005-04-16 15:20:36 -07:00
. type = CX88_RADIO ,
. gpio0 = 0x0035d700 ,
. gpio1 = 0x00007004 ,
. gpio2 = 0x0035d700 ,
. gpio3 = 0x02000000 ,
2006-06-06 15:51:38 -03:00
} ,
2005-11-08 21:37:43 -08:00
} ,
2005-06-23 22:05:03 -07:00
[ CX88_BOARD_LEADTEK_PVR2000 ] = {
2005-04-16 15:20:36 -07:00
// gpio values for PAL version from regspy by DScaler
2005-06-23 22:05:03 -07:00
. name = " Leadtek PVR 2000 " ,
. tuner_type = TUNER_PHILIPS_FM1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT ,
2005-06-23 22:05:03 -07:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x0000bde2 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-06-23 22:05:03 -07:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x0000bde6 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-06-23 22:05:03 -07:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x0000bde6 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-06-23 22:05:03 -07:00
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x0000bd62 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-06-23 22:05:03 -07:00
} ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_BLACKBIRD ,
2005-06-23 22:05:03 -07:00
} ,
2005-04-16 15:20:36 -07:00
[ CX88_BOARD_IODATA_GVVCP3PCI ] = {
2005-11-08 21:37:43 -08:00
. name = " IODATA GV-VCP3/PCI " ,
2005-04-16 15:20:36 -07:00
. tuner_type = TUNER_ABSENT ,
2005-11-08 21:37:43 -08:00
. radio_type = UNSET ,
2005-06-23 22:05:03 -07:00
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
2005-11-08 21:37:43 -08:00
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 0 ,
} , {
. type = CX88_VMUX_COMPOSITE2 ,
. vmux = 1 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
} } ,
} ,
2005-04-16 15:20:36 -07:00
[ CX88_BOARD_PROLINK_PLAYTVPVR ] = {
2005-11-08 21:37:43 -08:00
. name = " Prolink PlayTV PVR " ,
. tuner_type = TUNER_PHILIPS_FM1236_MK3 ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2006-03-13 03:41:44 -03:00
. gpio0 = 0xbff0 ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2006-03-13 03:41:44 -03:00
. gpio0 = 0xbff3 ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2006-03-13 03:41:44 -03:00
. gpio0 = 0xbff3 ,
2005-04-16 15:20:36 -07:00
} } ,
. radio = {
. type = CX88_RADIO ,
2006-03-13 03:41:44 -03:00
. gpio0 = 0xbff0 ,
2005-04-16 15:20:36 -07:00
} ,
} ,
[ CX88_BOARD_ASUS_PVR_416 ] = {
. name = " ASUS PVR-416 " ,
2005-06-23 22:05:03 -07:00
. tuner_type = TUNER_PHILIPS_FM1236_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x0000fde6 ,
2005-11-08 21:37:43 -08:00
} , {
2005-04-16 15:20:36 -07:00
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x0000fde6 , // 0x0000fda6 L,R RCA audio in?
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-04-16 15:20:36 -07:00
} } ,
2005-11-08 21:37:43 -08:00
. radio = {
. type = CX88_RADIO ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x0000fde2 ,
2005-11-08 21:37:43 -08:00
} ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_BLACKBIRD ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_MSI_TVANYWHERE ] = {
. name = " MSI TV-@nywhere " ,
2005-06-23 22:05:03 -07:00
. tuner_type = TUNER_MT2032 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x00000fbf ,
. gpio2 = 0x0000fc08 ,
} , {
2005-11-08 21:37:43 -08:00
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x00000fbf ,
. gpio2 = 0x0000fc68 ,
} , {
2005-11-08 21:37:43 -08:00
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x00000fbf ,
. gpio2 = 0x0000fc68 ,
2005-11-08 21:37:43 -08:00
} } ,
2005-04-16 15:20:36 -07:00
} ,
2005-11-08 21:37:43 -08:00
[ CX88_BOARD_KWORLD_DVB_T ] = {
. name = " KWorld/VStream XPert DVB-T " ,
2005-04-16 15:20:36 -07:00
. tuner_type = TUNER_ABSENT ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-11-08 21:37:43 -08:00
. input = { {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x0700 ,
. gpio2 = 0x0101 ,
2005-11-08 21:37:43 -08:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-04-16 15:20:36 -07:00
. gpio0 = 0x0700 ,
. gpio2 = 0x0101 ,
2005-11-08 21:37:43 -08:00
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1 ] = {
2005-07-07 17:58:36 -07:00
. name = " DViCO FusionHDTV DVB-T1 " ,
2005-04-16 15:20:36 -07:00
. tuner_type = TUNER_ABSENT , /* No analog tuner */
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x000027df ,
2006-06-06 15:51:38 -03:00
} , {
2005-04-16 15:20:36 -07:00
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x000027df ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_KWORLD_LTV883 ] = {
. name = " KWorld LTV883RF " ,
2005-06-23 22:05:03 -07:00
. tuner_type = TUNER_TNF_8831BGFF ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-11-08 21:37:43 -08:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x07f8 ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_DEBUG ,
. vmux = 0 ,
. gpio0 = 0x07f9 , // mono from tuner chip
2005-11-08 21:37:43 -08:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x000007fa ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x000007fa ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x000007f8 ,
} ,
2005-04-16 15:20:36 -07:00
} ,
2005-07-07 17:58:36 -07:00
[ CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q ] = {
. name = " DViCO FusionHDTV 3 Gold-Q " ,
2005-04-16 15:20:36 -07:00
. tuner_type = TUNER_MICROTUNE_4042FI5 ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
/*
GPIO [ 0 ] resets DT3302 DTV receiver
0 - reset asserted
1 - normal operation
GPIO [ 1 ] mutes analog audio output connector
0 - enable selected source
1 - mute
GPIO [ 2 ] selects source for analog audio output connector
0 - analog audio input connector on tab
1 - analog DAC output from CX23881 chip
GPIO [ 3 ] selects RF input connector on tuner module
0 - RF connector labeled CABLE
1 - RF connector labeled ANT
2005-07-07 17:58:36 -07:00
GPIO [ 4 ] selects high RF for QAM256 mode
0 - normal RF
1 - high RF
2005-04-16 15:20:36 -07:00
*/
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x0f0d ,
} , {
. type = CX88_VMUX_CABLE ,
. vmux = 0 ,
. gpio0 = 0x0f05 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x0f00 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x0f00 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-04-16 15:20:36 -07:00
} ,
2005-11-08 21:37:43 -08:00
[ CX88_BOARD_HAUPPAUGE_DVB_T1 ] = {
2005-06-23 22:05:03 -07:00
. name = " Hauppauge Nova-T DVB-T " ,
2005-04-16 15:20:36 -07:00
. tuner_type = TUNER_ABSENT ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
2005-11-08 21:37:43 -08:00
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-04-16 15:20:36 -07:00
} ,
2005-11-08 21:37:43 -08:00
[ CX88_BOARD_CONEXANT_DVB_T1 ] = {
2005-04-16 15:20:36 -07:00
. name = " Conexant DVB-T reference design " ,
. tuner_type = TUNER_ABSENT ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-11-08 21:37:43 -08:00
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_PROVIDEO_PV259 ] = {
. name = " Provideo PV259 " ,
. tuner_type = TUNER_PHILIPS_FQ1216ME ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-04-16 15:20:36 -07:00
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_BLACKBIRD ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS ] = {
2005-07-07 17:58:36 -07:00
. name = " DViCO FusionHDTV DVB-T Plus " ,
2005-04-16 15:20:36 -07:00
. tuner_type = TUNER_ABSENT , /* No analog tuner */
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x000027df ,
2006-06-06 15:51:38 -03:00
} , {
2005-04-16 15:20:36 -07:00
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x000027df ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_DNTV_LIVE_DVB_T ] = {
2005-11-08 21:37:43 -08:00
. name = " digitalnow DNTV Live! DVB-T " ,
2005-04-16 15:20:36 -07:00
. tuner_type = TUNER_ABSENT ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-11-08 21:37:43 -08:00
. input = { {
2005-04-16 15:20:36 -07:00
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x00000700 ,
. gpio2 = 0x00000101 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x00000700 ,
. gpio2 = 0x00000101 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_PCHDTV_HD3000 ] = {
. name = " pcHDTV HD3000 HDTV " ,
2006-04-10 09:40:37 -03:00
. tuner_type = TUNER_THOMSON_DTT761X ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-12-04 12:41:54 -02:00
. tda9887_conf = TDA9887_PRESENT ,
2007-07-31 23:06:50 -03:00
/* GPIO[2] = audio source for analog audio out connector
* 0 = analog audio input connector
* 1 = CX88 audio DACs
*
* GPIO [ 7 ] = input to CX88 ' s audio / chroma ADC
* 0 = FM 10.7 MHz IF
* 1 = Sound 4.5 MHz IF
*
* GPIO [ 1 , 5 , 6 ] = Oren 51132 pins 27 , 35 , 28 respectively
*
* GPIO [ 16 ] = Remote control input
*/
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x00008484 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x00008400 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x00008400 ,
} } ,
. radio = {
. type = CX88_RADIO ,
2007-07-31 23:06:50 -03:00
. gpio0 = 0x00008404 ,
2005-04-16 15:20:36 -07:00
} ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_HAUPPAUGE_ROSLYN ] = {
// entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu>
// GPIO values obtained from regspy, courtesy Sean Covel
2005-06-23 22:05:03 -07:00
. name = " Hauppauge WinTV 28xxx (Roslyn) models " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2006-01-09 15:25:17 -02:00
. gpio0 = 0xed1a ,
2005-04-16 15:20:36 -07:00
. gpio2 = 0x00ff ,
} , {
. type = CX88_VMUX_DEBUG ,
. vmux = 0 ,
2006-01-09 15:25:17 -02:00
. gpio0 = 0xff01 ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0xff02 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0xed92 ,
. gpio2 = 0x00ff ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0xed96 ,
. gpio2 = 0x00ff ,
} ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_BLACKBIRD ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_DIGITALLOGIC_MEC ] = {
. name = " Digital-Logic MICROSPACE Entertainment Center (MEC) " ,
2005-06-23 22:05:03 -07:00
. tuner_type = TUNER_PHILIPS_FM1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2005-06-23 22:05:03 -07:00
. gpio0 = 0x00009d80 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2005-06-23 22:05:03 -07:00
. gpio0 = 0x00009d76 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-04-16 15:20:36 -07:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-06-23 22:05:03 -07:00
. gpio0 = 0x00009d76 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-04-16 15:20:36 -07:00
} } ,
. radio = {
. type = CX88_RADIO ,
2005-06-23 22:05:03 -07:00
. gpio0 = 0x00009d00 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-04-16 15:20:36 -07:00
} ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_BLACKBIRD ,
2005-04-16 15:20:36 -07:00
} ,
[ CX88_BOARD_IODATA_GVBCTV7E ] = {
. name = " IODATA GV/BCTV7E " ,
. tuner_type = TUNER_PHILIPS_FQ1286 ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-04-16 15:20:36 -07:00
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 1 ,
. gpio1 = 0x0000e03f ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 2 ,
. gpio1 = 0x0000e07f ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 3 ,
. gpio1 = 0x0000e07f ,
} }
} ,
2005-06-23 22:04:53 -07:00
[ CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO ] = {
. name = " PixelView PlayTV Ultra Pro (Stereo) " ,
2005-06-23 22:05:03 -07:00
/* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */
. tuner_type = TUNER_PHILIPS_FM1216ME_MK3 ,
2005-07-15 03:56:28 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2009-03-29 08:26:01 -03:00
/* Some variants use a tda9874 and so need the tvaudio module. */
. audio_chip = V4L2_IDENT_TVAUDIO ,
2005-06-23 22:04:53 -07:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2005-06-23 22:05:03 -07:00
. gpio0 = 0xbf61 , /* internal decoder */
2005-06-23 22:04:53 -07:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2005-06-23 22:05:03 -07:00
. gpio0 = 0xbf63 ,
2005-06-23 22:04:53 -07:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-06-23 22:05:03 -07:00
. gpio0 = 0xbf63 ,
2005-06-23 22:04:53 -07:00
} } ,
. radio = {
2005-06-23 22:05:03 -07:00
. type = CX88_RADIO ,
. gpio0 = 0xbf60 ,
} ,
2005-06-23 22:04:53 -07:00
} ,
2005-11-08 21:37:43 -08:00
[ CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T ] = {
2005-07-07 17:58:36 -07:00
. name = " DViCO FusionHDTV 3 Gold-T " ,
2006-01-09 15:25:29 -02:00
. tuner_type = TUNER_THOMSON_DTT761X ,
2005-06-23 22:05:03 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-12-04 12:41:54 -02:00
. tda9887_conf = TDA9887_PRESENT ,
2005-07-07 17:58:36 -07:00
. input = { {
2005-11-08 21:37:43 -08:00
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x97ed ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x97e9 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x97e9 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-11-08 21:37:43 -08:00
} ,
[ CX88_BOARD_ADSTECH_DVB_T_PCI ] = {
. name = " ADS Tech Instant TV DVB-T PCI " ,
2005-07-07 17:58:36 -07:00
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
2005-11-08 21:37:43 -08:00
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2005-07-07 17:58:36 -07:00
. gpio0 = 0x0700 ,
. gpio2 = 0x0101 ,
2005-11-08 21:37:43 -08:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-07-07 17:58:36 -07:00
. gpio0 = 0x0700 ,
. gpio2 = 0x0101 ,
2005-11-08 21:37:43 -08:00
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-07-07 17:58:36 -07:00
} ,
2005-07-07 17:58:40 -07:00
[ CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1 ] = {
. name = " TerraTec Cinergy 1400 DVB-T " ,
. tuner_type = TUNER_ABSENT ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
2007-01-21 05:58:19 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 2 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-07-07 17:58:40 -07:00
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-07-07 17:58:40 -07:00
} ,
2005-07-31 22:34:46 -07:00
[ CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD ] = {
. name = " DViCO FusionHDTV 5 Gold " ,
2006-04-27 01:29:17 -03:00
. tuner_type = TUNER_LG_TDVS_H06XF , /* TDVS-H062F */
2005-07-31 22:34:46 -07:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
2005-09-09 13:03:41 -07:00
. tda9887_conf = TDA9887_PRESENT ,
2005-07-31 22:34:46 -07:00
. input = { {
2005-11-08 21:37:43 -08:00
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x87fd ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x87f9 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x87f9 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-07-31 22:34:46 -07:00
} ,
2005-11-08 21:36:15 -08:00
[ CX88_BOARD_AVERMEDIA_ULTRATV_MC_550 ] = {
. name = " AverMedia UltraTV Media Center PCI 550 " ,
. tuner_type = TUNER_PHILIPS_FM1236_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 0 ,
. gpio0 = 0x0000cd73 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-11-08 21:36:15 -08:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 1 ,
. gpio0 = 0x0000cd73 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-11-08 21:36:15 -08:00
} , {
. type = CX88_VMUX_TELEVISION ,
. vmux = 3 ,
. gpio0 = 0x0000cdb3 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-11-08 21:36:15 -08:00
} } ,
. radio = {
. type = CX88_RADIO ,
. vmux = 2 ,
. gpio0 = 0x0000cdf3 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2005-11-08 21:36:15 -08:00
} ,
2006-10-16 16:07:51 -03:00
. mpeg = CX88_MPEG_BLACKBIRD ,
2005-11-08 21:36:15 -08:00
} ,
2005-11-08 21:36:58 -08:00
[ CX88_BOARD_KWORLD_VSTREAM_EXPERT_DVD ] = {
/* Alexander Wold <awold@bigfoot.com> */
2005-11-08 21:37:43 -08:00
. name = " Kworld V-Stream Xpert DVD " ,
. tuner_type = UNSET ,
. input = { {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x03000000 ,
2005-11-08 21:36:58 -08:00
. gpio1 = 0x01000000 ,
. gpio2 = 0x02000000 ,
. gpio3 = 0x00100000 ,
2005-11-08 21:37:43 -08:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x03000000 ,
. gpio1 = 0x01000000 ,
. gpio2 = 0x02000000 ,
. gpio3 = 0x00100000 ,
} } ,
2005-11-08 21:36:58 -08:00
} ,
2005-11-08 21:37:04 -08:00
[ CX88_BOARD_ATI_HDTVWONDER ] = {
. name = " ATI HDTV Wonder " ,
. tuner_type = TUNER_PHILIPS_TUV1236D ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x00000ff7 ,
. gpio1 = 0x000000ff ,
. gpio2 = 0x00000001 ,
. gpio3 = 0x00000000 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x00000ffe ,
. gpio1 = 0x000000ff ,
. gpio2 = 0x00000001 ,
. gpio3 = 0x00000000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x00000ffe ,
. gpio1 = 0x000000ff ,
. gpio2 = 0x00000001 ,
. gpio3 = 0x00000000 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-11-08 21:37:04 -08:00
} ,
2005-11-08 21:37:22 -08:00
[ CX88_BOARD_WINFAST_DTV1000 ] = {
. name = " WinFast DTV1000-T " ,
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
2007-03-31 10:34:59 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2005-11-08 21:37:22 -08:00
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2005-11-08 21:37:22 -08:00
} ,
2005-11-08 21:38:34 -08:00
[ CX88_BOARD_AVERTV_303 ] = {
. name = " AVerTV 303 (M126) " ,
. tuner_type = TUNER_PHILIPS_FM1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x00ff ,
. gpio1 = 0xe09f ,
. gpio2 = 0x0010 ,
. gpio3 = 0x0000 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x00ff ,
. gpio1 = 0xe05f ,
. gpio2 = 0x0010 ,
. gpio3 = 0x0000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x00ff ,
. gpio1 = 0xe05f ,
. gpio2 = 0x0010 ,
. gpio3 = 0x0000 ,
} } ,
} ,
2006-01-09 15:25:02 -02:00
[ CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1 ] = {
. name = " Hauppauge Nova-S-Plus DVB-S " ,
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-01-09 15:25:02 -02:00
} ,
[ CX88_BOARD_HAUPPAUGE_NOVASE2_S1 ] = {
. name = " Hauppauge Nova-SE2 DVB-S " ,
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-01-09 15:25:02 -02:00
} ,
2006-01-09 15:25:02 -02:00
[ CX88_BOARD_KWORLD_DVBS_100 ] = {
. name = " KWorld DVB-S 100 " ,
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-01-09 15:25:02 -02:00
} ,
2006-01-09 15:25:12 -02:00
[ CX88_BOARD_HAUPPAUGE_HVR1100 ] = {
. name = " Hauppauge WinTV-HVR1100 DVB-T/Hybrid " ,
. tuner_type = TUNER_PHILIPS_FMD1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
} } ,
/* fixme: Add radio support */
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-01-09 15:25:12 -02:00
} ,
[ CX88_BOARD_HAUPPAUGE_HVR1100LP ] = {
. name = " Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) " ,
. tuner_type = TUNER_PHILIPS_FMD1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
} } ,
/* fixme: Add radio support */
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-01-09 15:25:12 -02:00
} ,
2006-01-09 15:25:35 -02:00
[ CX88_BOARD_DNTV_LIVE_DVB_T_PRO ] = {
. name = " digitalnow DNTV Live! DVB-T Pro " ,
. tuner_type = TUNER_PHILIPS_FMD1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
TDA9887_PORT2_ACTIVE ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0xf80808 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0xf80808 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0xf80808 ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0xf80808 ,
} ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-01-09 15:25:35 -02:00
} ,
2006-01-09 15:32:45 -02:00
[ CX88_BOARD_KWORLD_DVB_T_CX22702 ] = {
/* Kworld V-stream Xpert DVB-T with Thomson tuner */
/* DTT 7579 Conexant CX22702-19 Conexant CX2388x */
/* Manenti Marco <marco_manenti@colman.it> */
. name = " KWorld/VStream XPert DVB-T with cx22702 " ,
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x0700 ,
. gpio2 = 0x0101 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x0700 ,
. gpio2 = 0x0101 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-01-09 15:32:45 -02:00
} ,
2006-01-09 18:21:28 -02:00
[ CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL ] = {
. name = " DViCO FusionHDTV DVB-T Dual Digital " ,
. tuner_type = TUNER_ABSENT , /* No analog tuner */
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2006-08-10 03:22:21 -03:00
. gpio0 = 0x000067df ,
2006-01-09 18:21:28 -02:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2006-08-10 03:22:21 -03:00
. gpio0 = 0x000067df ,
2006-01-09 18:21:28 -02:00
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-01-09 18:21:28 -02:00
} ,
2006-02-07 06:49:14 -02:00
[ CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT ] = {
. name = " KWorld HardwareMpegTV XPert " ,
. tuner_type = TUNER_PHILIPS_TDA8290 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2006-02-27 00:07:58 -03:00
. gpio0 = 0x3de2 ,
2006-02-27 00:08:01 -03:00
. gpio2 = 0x00ff ,
2006-05-28 01:43:35 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x3de6 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2006-05-28 01:43:35 -03:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x3de6 ,
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2006-02-07 06:49:14 -02:00
} } ,
2006-02-27 00:07:58 -03:00
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x3de6 ,
2006-02-27 00:08:01 -03:00
. gpio2 = 0x00ff ,
2006-02-27 00:07:58 -03:00
} ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_BLACKBIRD ,
2006-02-07 06:49:14 -02:00
} ,
2006-02-28 08:34:59 -03:00
[ CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID ] = {
. name = " DViCO FusionHDTV DVB-T Hybrid " ,
2006-03-01 00:04:42 -03:00
. tuner_type = TUNER_THOMSON_FE6600 ,
2006-02-28 08:34:59 -03:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x0000a75f ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x0000a75b ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x0000a75b ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-02-28 08:34:59 -03:00
} ,
2006-04-07 03:24:54 -03:00
[ CX88_BOARD_PCHDTV_HD5500 ] = {
. name = " pcHDTV HD5500 HDTV " ,
2006-04-27 01:29:17 -03:00
. tuner_type = TUNER_LG_TDVS_H06XF , /* TDVS-H064F */
2006-04-07 03:24:54 -03:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x87fd ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x87f9 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x87f9 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-04-07 03:24:54 -03:00
} ,
2006-04-13 12:41:43 -03:00
[ CX88_BOARD_KWORLD_MCE200_DELUXE ] = {
/* FIXME: tested TV input only, disabled composite,
svideo and radio until they can be tested also . */
. name = " Kworld MCE 200 Deluxe " ,
. tuner_type = TUNER_TENA_9533_DI ,
. radio_type = UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x0000BDE6
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_BLACKBIRD ,
2006-04-13 12:41:43 -03:00
} ,
2006-05-09 18:27:48 -03:00
[ CX88_BOARD_PIXELVIEW_PLAYTV_P7000 ] = {
/* FIXME: SVideo, Composite and FM inputs are untested */
. name = " PixelView PlayTV P7000 " ,
. tuner_type = TUNER_PHILIPS_FM1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
TDA9887_PORT2_ACTIVE ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x5da6 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_BLACKBIRD ,
2006-05-09 18:27:48 -03:00
} ,
2006-06-08 17:36:17 -03:00
[ CX88_BOARD_NPGTECH_REALTV_TOP10FM ] = {
. name = " NPG Tech Real TV FM Top 10 " ,
. tuner_type = TUNER_TNF_5335MF , /* Actually a TNF9535 */
2006-05-22 07:44:02 -03:00
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x0788 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x078b ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2006-06-08 17:36:17 -03:00
. gpio0 = 0x078b ,
2006-05-22 07:44:02 -03:00
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x074a ,
} ,
} ,
2006-05-29 13:51:59 -03:00
[ CX88_BOARD_WINFAST_DTV2000H ] = {
. name = " WinFast DTV2000 H " ,
. tuner_type = TUNER_PHILIPS_FMD1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x00017304 ,
. gpio1 = 0x00008203 ,
. gpio2 = 0x00017304 ,
. gpio3 = 0x02000000 ,
2008-11-09 13:50:07 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x0001d701 ,
. gpio1 = 0x0000b207 ,
. gpio2 = 0x0001d701 ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_COMPOSITE2 ,
. vmux = 2 ,
. gpio0 = 0x0001d503 ,
. gpio1 = 0x0000b207 ,
. gpio2 = 0x0001d503 ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 3 ,
. gpio0 = 0x0001d701 ,
. gpio1 = 0x0000b207 ,
. gpio2 = 0x0001d701 ,
. gpio3 = 0x02000000 ,
2006-05-29 13:51:59 -03:00
} } ,
2008-11-09 13:50:07 -03:00
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x00015702 ,
. gpio1 = 0x0000f207 ,
. gpio2 = 0x00015702 ,
. gpio3 = 0x02000000 ,
} ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-05-29 13:51:59 -03:00
} ,
2009-08-10 22:15:54 -03:00
[ CX88_BOARD_WINFAST_DTV2000H_J ] = {
. name = " WinFast DTV2000 H rev. J " ,
. tuner_type = TUNER_PHILIPS_FMD1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x00017300 ,
. gpio1 = 0x00008207 ,
. gpio2 = 0x00000000 ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x00018300 ,
. gpio1 = 0x0000f207 ,
. gpio2 = 0x00017304 ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x00018301 ,
. gpio1 = 0x0000f207 ,
. gpio2 = 0x00017304 ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x00018301 ,
. gpio1 = 0x0000f207 ,
. gpio2 = 0x00017304 ,
. gpio3 = 0x02000000 ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x00015702 ,
. gpio1 = 0x0000f207 ,
. gpio2 = 0x00015702 ,
. gpio3 = 0x02000000 ,
} ,
. mpeg = CX88_MPEG_DVB ,
} ,
2006-06-29 20:29:33 -03:00
[ CX88_BOARD_GENIATECH_DVBS ] = {
. name = " Geniatech DVB-S " ,
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
} } ,
2006-09-25 14:09:10 -03:00
. mpeg = CX88_MPEG_DVB ,
2006-06-29 20:29:33 -03:00
} ,
2006-08-08 09:10:04 -03:00
[ CX88_BOARD_HAUPPAUGE_HVR3000 ] = {
. name = " Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T " ,
. tuner_type = TUNER_PHILIPS_FMD1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
2008-10-11 11:49:30 -03:00
. audio_chip = V4L2_IDENT_WM8775 ,
2006-08-08 09:10:04 -03:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x84bf ,
2008-10-15 14:12:30 -03:00
/* 1: TV Audio / FM Mono */
2008-10-11 11:49:30 -03:00
. audioroute = 1 ,
2006-08-08 09:10:04 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x84bf ,
2008-10-15 14:12:30 -03:00
/* 2: Line-In */
2008-10-11 11:49:30 -03:00
. audioroute = 2 ,
2006-08-08 09:10:04 -03:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x84bf ,
2008-10-15 14:12:30 -03:00
/* 2: Line-In */
2008-10-11 11:49:30 -03:00
. audioroute = 2 ,
2006-08-08 09:10:04 -03:00
} } ,
2008-10-11 11:57:59 -03:00
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x84bf ,
2008-10-15 14:12:30 -03:00
/* 4: FM Stereo (untested) */
. audioroute = 8 ,
2008-10-11 11:57:59 -03:00
} ,
2006-09-30 00:43:58 -03:00
. mpeg = CX88_MPEG_DVB ,
2008-10-11 11:05:50 -03:00
. num_frontends = 2 ,
2006-08-08 09:10:04 -03:00
} ,
2006-08-08 09:10:05 -03:00
[ CX88_BOARD_NORWOOD_MICRO ] = {
. name = " Norwood Micro TV Tuner " ,
. tuner_type = TUNER_TNF_5335MF ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x0709 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x070b ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x070b ,
} } ,
} ,
2006-10-16 16:07:51 -03:00
[ CX88_BOARD_TE_DTV_250_OEM_SWANN ] = {
. name = " Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM " ,
. tuner_type = TUNER_LG_PAL_NEW_TAPC ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x003fffff ,
. gpio1 = 0x00e00000 ,
. gpio2 = 0x003fffff ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x003fffff ,
. gpio1 = 0x00e00000 ,
. gpio2 = 0x003fffff ,
. gpio3 = 0x02000000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x003fffff ,
. gpio1 = 0x00e00000 ,
. gpio2 = 0x003fffff ,
. gpio3 = 0x02000000 ,
} } ,
} ,
2006-09-14 15:41:13 -03:00
[ CX88_BOARD_HAUPPAUGE_HVR1300 ] = {
. name = " Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder " ,
. tuner_type = TUNER_PHILIPS_FMD1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
2008-07-23 05:09:15 -03:00
. audio_chip = V4L2_IDENT_WM8775 ,
2008-09-22 01:48:13 -03:00
/*
* gpio0 as reported by Mike Crash < mike AT mikecrash . com >
*/
2006-09-14 15:41:13 -03:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2008-09-22 01:48:13 -03:00
. gpio0 = 0xef88 ,
2008-10-15 14:12:30 -03:00
/* 1: TV Audio / FM Mono */
2007-09-30 13:02:49 -03:00
. audioroute = 1 ,
2006-09-14 15:41:13 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2008-09-22 01:48:13 -03:00
. gpio0 = 0xef88 ,
2008-10-15 14:12:30 -03:00
/* 2: Line-In */
2007-09-30 13:02:49 -03:00
. audioroute = 2 ,
2006-09-14 15:41:13 -03:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2008-09-22 01:48:13 -03:00
. gpio0 = 0xef88 ,
2008-10-15 14:12:30 -03:00
/* 2: Line-In */
2007-09-30 13:02:49 -03:00
. audioroute = 2 ,
2006-09-14 15:41:13 -03:00
} } ,
2006-12-02 21:15:51 -02:00
. mpeg = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD ,
2008-04-05 16:45:57 -03:00
. radio = {
. type = CX88_RADIO ,
2008-09-22 01:48:13 -03:00
. gpio0 = 0xef88 ,
2008-10-15 14:12:30 -03:00
/* 4: FM Stereo (untested) */
. audioroute = 8 ,
2008-04-05 16:45:57 -03:00
} ,
2006-09-14 15:41:13 -03:00
} ,
2007-05-17 18:10:17 -03:00
[ CX88_BOARD_ADSTECH_PTV_390 ] = {
. name = " ADS Tech Instant Video PCI " ,
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DEBUG ,
. vmux = 3 ,
. gpio0 = 0x04ff ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x07fa ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x07fa ,
} } ,
} ,
2008-01-05 16:53:01 -03:00
[ CX88_BOARD_PINNACLE_PCTV_HD_800i ] = {
. name = " Pinnacle PCTV HD 800i " ,
. tuner_type = TUNER_XC5000 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x04fb ,
. gpio1 = 0x10ff ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x04fb ,
. gpio1 = 0x10ef ,
. audioroute = 1 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x04fb ,
. gpio1 = 0x10ef ,
. audioroute = 1 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-04-22 14:45:14 -03:00
[ CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO ] = {
2008-04-22 14:45:14 -03:00
. name = " DViCO FusionHDTV 5 PCI nano " ,
/* xc3008 tuner, digital only for now */
2008-04-22 14:45:14 -03:00
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x000027df , /* Unconfirmed */
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x000027df , /* Unconfirmed */
. audioroute = 1 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x000027df , /* Unconfirmed */
. audioroute = 1 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-04-22 14:45:15 -03:00
[ CX88_BOARD_PINNACLE_HYBRID_PCTV ] = {
2008-04-22 14:45:46 -03:00
. name = " Pinnacle Hybrid PCTV " ,
. tuner_type = TUNER_XC2028 ,
. tuner_addr = 0x61 ,
2008-09-05 14:33:54 -03:00
. radio_type = TUNER_XC2028 ,
. radio_addr = 0x61 ,
2008-04-22 14:45:46 -03:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2008-09-05 14:33:54 -03:00
. gpio0 = 0x004ff ,
. gpio1 = 0x010ff ,
. gpio2 = 0x00001 ,
2008-04-22 14:45:46 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2008-09-05 14:33:54 -03:00
. gpio0 = 0x004fb ,
. gpio1 = 0x010ef ,
. audioroute = 1 ,
2008-04-22 14:45:46 -03:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2008-09-05 14:33:54 -03:00
. gpio0 = 0x004fb ,
. gpio1 = 0x010ef ,
. audioroute = 1 ,
2008-04-22 14:45:46 -03:00
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x004ff ,
. gpio1 = 0x010ff ,
. gpio2 = 0x0ff ,
} ,
2008-09-05 14:33:54 -03:00
. mpeg = CX88_MPEG_DVB ,
2008-04-22 14:45:46 -03:00
} ,
2009-06-16 23:55:44 -03:00
/* Terry Wu <terrywu2009@gmail.com> */
/* TV Audio : set GPIO 2, 18, 19 value to 0, 1, 0 */
/* FM Audio : set GPIO 2, 18, 19 value to 0, 0, 0 */
/* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */
/* Mute Audio : set GPIO 2 value to 1 */
2008-04-22 14:45:46 -03:00
[ CX88_BOARD_WINFAST_TV2000_XP_GLOBAL ] = {
2009-06-16 23:55:44 -03:00
. name = " Leadtek TV2000 XP Global " ,
2008-04-22 14:45:46 -03:00
. tuner_type = TUNER_XC2028 ,
. tuner_addr = 0x61 ,
2009-06-16 23:55:44 -03:00
. radio_type = TUNER_XC2028 ,
. radio_addr = 0x61 ,
2008-04-22 14:45:46 -03:00
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2009-06-16 23:55:44 -03:00
. gpio0 = 0x0400 , /* pin 2 = 0 */
2008-04-22 14:45:46 -03:00
. gpio1 = 0x0000 ,
2009-06-16 23:55:44 -03:00
. gpio2 = 0x0C04 , /* pin 18 = 1, pin 19 = 0 */
. gpio3 = 0x0000 ,
2008-04-22 14:45:46 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2009-06-16 23:55:44 -03:00
. gpio0 = 0x0400 , /* pin 2 = 0 */
2008-04-22 14:45:46 -03:00
. gpio1 = 0x0000 ,
2009-06-16 23:55:44 -03:00
. gpio2 = 0x0C0C , /* pin 18 = 1, pin 19 = 1 */
. gpio3 = 0x0000 ,
2008-04-22 14:45:46 -03:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2009-06-16 23:55:44 -03:00
. gpio0 = 0x0400 , /* pin 2 = 0 */
. gpio1 = 0x0000 ,
. gpio2 = 0x0C0C , /* pin 18 = 1, pin 19 = 1 */
. gpio3 = 0x0000 ,
2008-04-22 14:45:46 -03:00
} } ,
. radio = {
. type = CX88_RADIO ,
2009-06-16 23:55:44 -03:00
. gpio0 = 0x0400 , /* pin 2 = 0 */
. gpio1 = 0x0000 ,
. gpio2 = 0x0C00 , /* pin 18 = 0, pin 19 = 0 */
. gpio3 = 0x0000 ,
2008-04-22 14:45:46 -03:00
} ,
} ,
[ CX88_BOARD_POWERCOLOR_REAL_ANGEL ] = {
2008-06-03 21:29:45 -03:00
. name = " PowerColor RA330 " , /* Long names may confuse LIRC. */
2008-04-22 14:45:46 -03:00
. tuner_type = TUNER_XC2028 ,
. tuner_addr = 0x61 ,
. input = { {
2008-06-03 21:29:45 -03:00
. type = CX88_VMUX_DEBUG ,
. vmux = 3 , /* Due to the way the cx88 driver is written, */
. gpio0 = 0x00ff , /* there is no way to deactivate audio pass- */
. gpio1 = 0xf39d , /* through without this entry. Furthermore, if */
. gpio3 = 0x0000 , /* the TV mux entry is first, you get audio */
} , { /* from the tuner on boot for a little while. */
2008-04-22 14:45:46 -03:00
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2008-04-08 19:54:49 -03:00
. gpio0 = 0x00ff ,
2008-04-22 14:45:46 -03:00
. gpio1 = 0xf35d ,
2008-04-08 19:54:49 -03:00
. gpio3 = 0x0000 ,
2008-04-22 14:45:46 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2008-04-08 19:54:49 -03:00
. gpio0 = 0x00ff ,
. gpio1 = 0xf37d ,
. gpio3 = 0x0000 ,
2008-04-22 14:45:46 -03:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x000ff ,
. gpio1 = 0x0f37d ,
. gpio3 = 0x00000 ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x000ff ,
. gpio1 = 0x0f35d ,
. gpio3 = 0x00000 ,
} ,
} ,
[ CX88_BOARD_GENIATECH_X8000_MT ] = {
2008-04-22 14:45:15 -03:00
/* Also PowerColor Real Angel 330 and Geniatech X800 OEM */
2008-04-22 14:45:46 -03:00
. name = " Geniatech X8000-MT DVBT " ,
. tuner_type = TUNER_XC2028 ,
. tuner_addr = 0x61 ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x00000000 ,
. gpio1 = 0x00e3e341 ,
. gpio2 = 0x00000000 ,
. gpio3 = 0x00000000 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x00000000 ,
. gpio1 = 0x00e3e361 ,
. gpio2 = 0x00000000 ,
. gpio3 = 0x00000000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x00000000 ,
. gpio1 = 0x00e3e361 ,
. gpio2 = 0x00000000 ,
. gpio3 = 0x00000000 ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x00000000 ,
. gpio1 = 0x00e3e341 ,
. gpio2 = 0x00000000 ,
. gpio3 = 0x00000000 ,
} ,
. mpeg = CX88_MPEG_DVB ,
} ,
[ CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO ] = {
. name = " DViCO FusionHDTV DVB-T PRO " ,
2008-10-11 12:44:38 -03:00
. tuner_type = TUNER_XC2028 ,
. tuner_addr = 0x61 ,
2008-04-22 14:45:46 -03:00
. radio_type = UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x000067df ,
2008-04-22 14:45:15 -03:00
} , {
2008-04-22 14:45:46 -03:00
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x000067df ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-04-22 14:45:34 -03:00
[ CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD ] = {
2008-04-22 14:45:35 -03:00
. name = " DViCO FusionHDTV 7 Gold " ,
2008-04-22 14:45:34 -03:00
. tuner_type = TUNER_XC5000 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
2008-04-22 14:45:35 -03:00
. gpio0 = 0x10df ,
2008-04-22 14:45:34 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
2008-04-22 14:45:35 -03:00
. gpio0 = 0x16d9 ,
2008-04-22 14:45:34 -03:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
2008-04-22 14:45:35 -03:00
. gpio0 = 0x16d9 ,
2008-04-22 14:45:34 -03:00
} } ,
2008-04-25 03:46:43 -03:00
. mpeg = CX88_MPEG_DVB ,
2008-04-22 14:45:34 -03:00
} ,
2008-04-22 14:46:00 -03:00
[ CX88_BOARD_PROLINK_PV_8000GT ] = {
. name = " Prolink Pixelview MPEG 8000GT " ,
. tuner_type = TUNER_XC2028 ,
. tuner_addr = 0x61 ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x0ff ,
. gpio2 = 0x0cfb ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio2 = 0x0cfb ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio2 = 0x0cfb ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio2 = 0x0cfb ,
} ,
} ,
2008-09-29 12:08:29 -03:00
[ CX88_BOARD_PROLINK_PV_GLOBAL_XTREME ] = {
. name = " Prolink Pixelview Global Extreme " ,
. tuner_type = TUNER_XC2028 ,
. tuner_addr = 0x61 ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x04fb ,
. gpio1 = 0x04080 ,
. gpio2 = 0x0cf7 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x04fb ,
. gpio1 = 0x04080 ,
. gpio2 = 0x0cfb ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x04fb ,
. gpio1 = 0x04080 ,
. gpio2 = 0x0cfb ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x04ff ,
. gpio1 = 0x04080 ,
. gpio2 = 0x0cf7 ,
} ,
} ,
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
/* Both radio, analog and ATSC work with this board.
However , for analog to work , s5h1409 gate should be open ,
otherwise , tuner - xc3028 won ' t be detected .
A proper fix require using the newer i2c methods to add
tuner - xc3028 without doing an i2c probe .
*/
[ CX88_BOARD_KWORLD_ATSC_120 ] = {
. name = " Kworld PlusTV HD PCI 120 (ATSC 120) " ,
. tuner_type = TUNER_XC2028 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x000000ff ,
. gpio1 = 0x0000f35d ,
. gpio2 = 0x00000000 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x000000ff ,
. gpio1 = 0x0000f37e ,
. gpio2 = 0x00000000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x000000ff ,
. gpio1 = 0x0000f37e ,
. gpio2 = 0x00000000 ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x000000ff ,
. gpio1 = 0x0000f35d ,
. gpio2 = 0x00000000 ,
} ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-09-04 01:17:33 -03:00
[ CX88_BOARD_HAUPPAUGE_HVR4000 ] = {
. name = " Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid " ,
. tuner_type = TUNER_PHILIPS_FMD1216ME_MK3 ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. tda9887_conf = TDA9887_PRESENT ,
2008-10-11 11:49:30 -03:00
. audio_chip = V4L2_IDENT_WM8775 ,
2008-09-04 01:17:33 -03:00
/*
* GPIO0 ( WINTV2000 )
*
* Analogue SAT DVB - T
* Antenna 0xc4bf 0xc4bb
* Composite 0xc4bf 0xc4bb
* S - Video 0xc4bf 0xc4bb
* Composite1 0xc4ff 0xc4fb
* S - Video1 0xc4ff 0xc4fb
2008-09-22 01:48:13 -03:00
*
* BIT VALUE FUNCTION GP { x } _IO
* 0 1 I : ?
* 1 1 I : ?
2008-10-11 11:57:59 -03:00
* 2 1 O : MPEG PORT 0 = DVB - T 1 = DVB - S
2008-09-22 01:48:13 -03:00
* 3 1 I : ?
* 4 1 I : ?
* 5 1 I : ?
* 6 0 O : INPUT SELECTOR 0 = INTERNAL 1 = EXPANSION
* 7 1 O : DVB - T DEMOD RESET LOW
*
* BIT VALUE FUNCTION GP { x } _OE
* 8 0 I
* 9 0 I
* a 1 O
* b 0 I
* c 0 I
* d 0 I
* e 1 O
* f 1 O
2008-10-15 14:12:30 -03:00
*
* WM8775 ADC
*
* 1 : TV Audio / FM Mono
* 2 : Line - In
* 3 : Line - In Expansion
* 4 : FM Stereo
2008-09-04 01:17:33 -03:00
*/
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0xc4bf ,
2008-10-15 14:12:30 -03:00
/* 1: TV Audio / FM Mono */
2008-10-11 11:49:30 -03:00
. audioroute = 1 ,
2008-09-04 01:17:33 -03:00
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0xc4bf ,
2008-10-15 14:12:30 -03:00
/* 2: Line-In */
2008-10-11 11:49:30 -03:00
. audioroute = 2 ,
2008-09-04 01:17:33 -03:00
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0xc4bf ,
2008-10-15 14:12:30 -03:00
/* 2: Line-In */
2008-10-11 11:49:30 -03:00
. audioroute = 2 ,
2008-09-04 01:17:33 -03:00
} } ,
2008-10-11 11:57:59 -03:00
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0xc4bf ,
2008-10-15 14:12:30 -03:00
/* 4: FM Stereo */
. audioroute = 8 ,
2008-10-11 11:57:59 -03:00
} ,
2008-09-04 01:17:33 -03:00
. mpeg = CX88_MPEG_DVB ,
2008-10-11 11:05:50 -03:00
. num_frontends = 2 ,
2008-09-04 01:17:33 -03:00
} ,
[ CX88_BOARD_HAUPPAUGE_HVR4000LITE ] = {
. name = " Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-09-23 15:43:57 -03:00
[ CX88_BOARD_TEVII_S420 ] = {
. name = " TeVii S420 DVB-S " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-09-04 17:24:14 -03:00
[ CX88_BOARD_TEVII_S460 ] = {
. name = " TeVii S460 DVB-S/S2 " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-09-17 11:30:21 -03:00
[ CX88_BOARD_OMICOM_SS4_PCI ] = {
. name = " Omicom SS4 DVB-S/S2 PCI " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-11-09 15:25:31 -03:00
[ CX88_BOARD_TBS_8910 ] = {
. name = " TBS 8910 DVB-S " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-09-17 11:58:33 -03:00
[ CX88_BOARD_TBS_8920 ] = {
. name = " TBS 8920 DVB-S/S2 " ,
. tuner_type = TUNER_ABSENT ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
2009-07-29 19:18:28 -03:00
. vmux = 0 ,
. gpio0 = 0x8080 ,
2008-09-17 11:58:33 -03:00
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-11-09 15:26:25 -03:00
[ CX88_BOARD_PROF_6200 ] = {
. name = " Prof 6200 DVB-S " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-10-08 06:48:08 -03:00
[ CX88_BOARD_PROF_7300 ] = {
. name = " PROF 7300 DVB-S/S2 " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2008-11-09 15:25:31 -03:00
[ CX88_BOARD_SATTRADE_ST4200 ] = {
. name = " SATTRADE ST4200 DVB-S/S2 " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
. input = { {
. type = CX88_VMUX_DVB ,
. vmux = 0 ,
} } ,
. mpeg = CX88_MPEG_DVB ,
} ,
2009-03-10 19:08:06 -03:00
[ CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII ] = {
. name = " Terratec Cinergy HT PCI MKII " ,
. tuner_type = TUNER_XC2028 ,
. tuner_addr = 0x61 ,
. radio_type = TUNER_XC2028 ,
. radio_addr = 0x61 ,
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x004ff ,
. gpio1 = 0x010ff ,
. gpio2 = 0x00001 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x004fb ,
. gpio1 = 0x010ef ,
. audioroute = 1 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x004fb ,
. gpio1 = 0x010ef ,
. audioroute = 1 ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x004ff ,
. gpio1 = 0x010ff ,
. gpio2 = 0x0ff ,
} ,
. mpeg = CX88_MPEG_DVB ,
} ,
2009-03-28 14:22:21 -03:00
[ CX88_BOARD_HAUPPAUGE_IRONLY ] = {
. name = " Hauppauge WinTV-IR Only " ,
. tuner_type = UNSET ,
. radio_type = UNSET ,
. tuner_addr = ADDR_UNSET ,
. radio_addr = ADDR_UNSET ,
} ,
2009-05-31 16:47:28 -03:00
[ CX88_BOARD_WINFAST_DTV1800H ] = {
. name = " Leadtek WinFast DTV1800 Hybrid " ,
. tuner_type = TUNER_XC2028 ,
. radio_type = TUNER_XC2028 ,
. tuner_addr = 0x61 ,
. radio_addr = 0x61 ,
/*
* GPIO setting
*
* 2 : mute ( 0 = off , 1 = on )
* 12 : tuner reset pin
* 13 : audio source ( 0 = tuner audio , 1 = line in )
* 14 : FM ( 0 = on , 1 = off ? ? ? )
*/
. input = { {
. type = CX88_VMUX_TELEVISION ,
. vmux = 0 ,
. gpio0 = 0x0400 , /* pin 2 = 0 */
. gpio1 = 0x6040 , /* pin 13 = 0, pin 14 = 1 */
. gpio2 = 0x0000 ,
} , {
. type = CX88_VMUX_COMPOSITE1 ,
. vmux = 1 ,
. gpio0 = 0x0400 , /* pin 2 = 0 */
. gpio1 = 0x6060 , /* pin 13 = 1, pin 14 = 1 */
. gpio2 = 0x0000 ,
} , {
. type = CX88_VMUX_SVIDEO ,
. vmux = 2 ,
. gpio0 = 0x0400 , /* pin 2 = 0 */
. gpio1 = 0x6060 , /* pin 13 = 1, pin 14 = 1 */
. gpio2 = 0x0000 ,
} } ,
. radio = {
. type = CX88_RADIO ,
. gpio0 = 0x0400 , /* pin 2 = 0 */
. gpio1 = 0x6000 , /* pin 13 = 0, pin 14 = 0 */
. gpio2 = 0x0000 ,
} ,
. mpeg = CX88_MPEG_DVB ,
} ,
2005-04-16 15:20:36 -07:00
} ;
/* ------------------------------------------------------------------ */
/* PCI subsystem IDs */
2007-08-15 14:41:58 -03:00
static const struct cx88_subid cx88_subids [ ] = {
2005-04-16 15:20:36 -07:00
{
. subvendor = 0x0070 ,
. subdevice = 0x3400 ,
. card = CX88_BOARD_HAUPPAUGE ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x3401 ,
. card = CX88_BOARD_HAUPPAUGE ,
} , {
. subvendor = 0x14c7 ,
. subdevice = 0x0106 ,
. card = CX88_BOARD_GDI ,
} , {
. subvendor = 0x14c7 ,
. subdevice = 0x0107 , /* with mpeg encoder */
. card = CX88_BOARD_GDI ,
} , {
. subvendor = PCI_VENDOR_ID_ATI ,
. subdevice = 0x00f8 ,
. card = CX88_BOARD_ATI_WONDER_PRO ,
2008-11-02 16:37:35 -03:00
} , {
. subvendor = PCI_VENDOR_ID_ATI ,
. subdevice = 0x00f9 ,
. card = CX88_BOARD_ATI_WONDER_PRO ,
} , {
2005-11-08 21:37:43 -08:00
. subvendor = 0x107d ,
. subdevice = 0x6611 ,
. card = CX88_BOARD_WINFAST2000XP_EXPERT ,
} , {
. subvendor = 0x107d ,
. subdevice = 0x6613 , /* NTSC */
. card = CX88_BOARD_WINFAST2000XP_EXPERT ,
} , {
. subvendor = 0x107d ,
. subdevice = 0x6620 ,
. card = CX88_BOARD_WINFAST_DV2000 ,
2005-04-16 15:20:36 -07:00
} , {
2005-11-08 21:37:43 -08:00
. subvendor = 0x107d ,
. subdevice = 0x663b ,
. card = CX88_BOARD_LEADTEK_PVR2000 ,
2005-04-16 15:20:36 -07:00
} , {
. subvendor = 0x107d ,
2006-09-16 19:09:38 -03:00
. subdevice = 0x663c ,
2005-11-08 21:37:43 -08:00
. card = CX88_BOARD_LEADTEK_PVR2000 ,
} , {
2005-04-16 15:20:36 -07:00
. subvendor = 0x1461 ,
. subdevice = 0x000b ,
2005-11-08 21:38:34 -08:00
. card = CX88_BOARD_AVERTV_STUDIO_303 ,
2005-04-16 15:20:36 -07:00
} , {
. subvendor = 0x1462 ,
. subdevice = 0x8606 ,
. card = CX88_BOARD_MSI_TVANYWHERE_MASTER ,
} , {
2005-11-08 21:37:43 -08:00
. subvendor = 0x10fc ,
. subdevice = 0xd003 ,
. card = CX88_BOARD_IODATA_GVVCP3PCI ,
2005-04-16 15:20:36 -07:00
} , {
2005-11-08 21:37:43 -08:00
. subvendor = 0x1043 ,
. subdevice = 0x4823 , /* with mpeg encoder */
. card = CX88_BOARD_ASUS_PVR_416 ,
2005-04-16 15:20:36 -07:00
} , {
. subvendor = 0x17de ,
. subdevice = 0x08a6 ,
. card = CX88_BOARD_KWORLD_DVB_T ,
} , {
. subvendor = 0x18ac ,
. subdevice = 0xd810 ,
2005-07-07 17:58:36 -07:00
. card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q ,
2005-06-23 22:04:43 -07:00
} , {
. subvendor = 0x18ac ,
. subdevice = 0xd820 ,
2005-06-23 22:04:55 -07:00
. card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T ,
2005-04-16 15:20:36 -07:00
} , {
2005-11-08 21:36:16 -08:00
. subvendor = 0x18ac ,
. subdevice = 0xdb00 ,
2005-04-16 15:20:36 -07:00
. card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1 ,
2005-11-08 21:37:43 -08:00
} , {
2005-04-16 15:20:36 -07:00
. subvendor = 0x0070 ,
. subdevice = 0x9002 ,
. card = CX88_BOARD_HAUPPAUGE_DVB_T1 ,
2005-11-08 21:37:43 -08:00
} , {
2005-04-16 15:20:36 -07:00
. subvendor = 0x14f1 ,
. subdevice = 0x0187 ,
. card = CX88_BOARD_CONEXANT_DVB_T1 ,
2005-11-08 21:37:43 -08:00
} , {
2005-04-16 15:20:36 -07:00
. subvendor = 0x1540 ,
. subdevice = 0x2580 ,
. card = CX88_BOARD_PROVIDEO_PV259 ,
} , {
2005-11-08 21:36:16 -08:00
. subvendor = 0x18ac ,
. subdevice = 0xdb10 ,
2005-04-16 15:20:36 -07:00
. card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS ,
} , {
2005-11-08 21:37:43 -08:00
. subvendor = 0x1554 ,
. subdevice = 0x4811 ,
. card = CX88_BOARD_PIXELVIEW ,
2005-04-16 15:20:36 -07:00
} , {
. subvendor = 0x7063 ,
. subdevice = 0x3000 , /* HD-3000 card */
. card = CX88_BOARD_PCHDTV_HD3000 ,
} , {
2005-11-08 21:36:16 -08:00
. subvendor = 0x17de ,
. subdevice = 0xa8a6 ,
2005-04-16 15:20:36 -07:00
. card = CX88_BOARD_DNTV_LIVE_DVB_T ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x2801 ,
. card = CX88_BOARD_HAUPPAUGE_ROSLYN ,
} , {
2005-11-08 21:36:16 -08:00
. subvendor = 0x14f1 ,
2005-04-16 15:20:36 -07:00
. subdevice = 0x0342 ,
. card = CX88_BOARD_DIGITALLOGIC_MEC ,
} , {
. subvendor = 0x10fc ,
. subdevice = 0xd035 ,
. card = CX88_BOARD_IODATA_GVBCTV7E ,
2005-07-07 17:58:36 -07:00
} , {
. subvendor = 0x1421 ,
. subdevice = 0x0334 ,
. card = CX88_BOARD_ADSTECH_DVB_T_PCI ,
2005-11-08 21:37:43 -08:00
} , {
2005-07-07 17:58:40 -07:00
. subvendor = 0x153b ,
. subdevice = 0x1166 ,
. card = CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1 ,
2005-11-08 21:37:43 -08:00
} , {
2005-07-31 22:34:46 -07:00
. subvendor = 0x18ac ,
. subdevice = 0xd500 ,
. card = CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD ,
2005-11-08 21:37:43 -08:00
} , {
2005-11-08 21:36:15 -08:00
. subvendor = 0x1461 ,
. subdevice = 0x8011 ,
. card = CX88_BOARD_AVERMEDIA_ULTRATV_MC_550 ,
2005-11-08 21:37:43 -08:00
} , {
2005-11-08 21:37:04 -08:00
. subvendor = PCI_VENDOR_ID_ATI ,
. subdevice = 0xa101 ,
. card = CX88_BOARD_ATI_HDTVWONDER ,
2005-11-08 21:37:43 -08:00
} , {
2005-11-08 21:37:22 -08:00
. subvendor = 0x107d ,
. subdevice = 0x665f ,
. card = CX88_BOARD_WINFAST_DTV1000 ,
2005-11-08 21:38:34 -08:00
} , {
. subvendor = 0x1461 ,
. subdevice = 0x000a ,
. card = CX88_BOARD_AVERTV_303 ,
2006-01-09 15:25:02 -02:00
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9200 ,
2006-01-09 15:25:02 -02:00
. card = CX88_BOARD_HAUPPAUGE_NOVASE2_S1 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9201 ,
2006-01-09 15:25:02 -02:00
. card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9202 ,
2006-01-09 15:25:02 -02:00
. card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1 ,
2006-01-09 15:25:02 -02:00
} , {
. subvendor = 0x17de ,
. subdevice = 0x08b2 ,
. card = CX88_BOARD_KWORLD_DVBS_100 ,
2006-01-09 15:25:12 -02:00
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9400 ,
. card = CX88_BOARD_HAUPPAUGE_HVR1100 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9402 ,
. card = CX88_BOARD_HAUPPAUGE_HVR1100 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9800 ,
. card = CX88_BOARD_HAUPPAUGE_HVR1100LP ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9802 ,
. card = CX88_BOARD_HAUPPAUGE_HVR1100LP ,
2006-01-09 15:25:13 -02:00
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9001 ,
. card = CX88_BOARD_HAUPPAUGE_DVB_T1 ,
2006-01-09 15:25:35 -02:00
} , {
. subvendor = 0x1822 ,
. subdevice = 0x0025 ,
. card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO ,
2006-01-09 15:32:45 -02:00
} , {
2006-01-09 18:21:39 -02:00
. subvendor = 0x17de ,
. subdevice = 0x08a1 ,
. card = CX88_BOARD_KWORLD_DVB_T_CX22702 ,
2006-01-09 18:21:28 -02:00
} , {
. subvendor = 0x18ac ,
. subdevice = 0xdb50 ,
. card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL ,
2006-01-17 03:50:23 -02:00
} , {
. subvendor = 0x18ac ,
. subdevice = 0xdb54 ,
. card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL ,
/* Re-branded DViCO: DigitalNow DVB-T Dual */
2006-01-11 22:52:28 -02:00
} , {
. subvendor = 0x18ac ,
. subdevice = 0xdb11 ,
. card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS ,
/* Re-branded DViCO: UltraView DVB-T Plus */
2008-04-22 14:45:15 -03:00
} , {
. subvendor = 0x18ac ,
. subdevice = 0xdb30 ,
. card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO ,
} , {
2006-02-07 06:49:14 -02:00
. subvendor = 0x17de ,
. subdevice = 0x0840 ,
2007-03-11 12:52:48 -03:00
. card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT ,
} , {
. subvendor = 0x1421 ,
. subdevice = 0x0305 ,
2006-02-07 06:49:14 -02:00
. card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT ,
2006-02-28 08:34:59 -03:00
} , {
. subvendor = 0x18ac ,
. subdevice = 0xdb40 ,
. card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID ,
} , {
. subvendor = 0x18ac ,
. subdevice = 0xdb44 ,
. card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID ,
2006-04-07 02:21:31 -03:00
} , {
. subvendor = 0x7063 ,
. subdevice = 0x5500 ,
. card = CX88_BOARD_PCHDTV_HD5500 ,
2006-04-13 12:41:43 -03:00
} , {
. subvendor = 0x17de ,
. subdevice = 0x0841 ,
. card = CX88_BOARD_KWORLD_MCE200_DELUXE ,
2006-05-22 10:32:05 -03:00
} , {
. subvendor = 0x1822 ,
. subdevice = 0x0019 ,
. card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO ,
2006-05-09 18:27:48 -03:00
} , {
. subvendor = 0x1554 ,
. subdevice = 0x4813 ,
. card = CX88_BOARD_PIXELVIEW_PLAYTV_P7000 ,
2006-05-22 07:44:02 -03:00
} , {
. subvendor = 0x14f1 ,
. subdevice = 0x0842 ,
2006-06-08 17:36:17 -03:00
. card = CX88_BOARD_NPGTECH_REALTV_TOP10FM ,
2006-05-29 13:51:59 -03:00
} , {
. subvendor = 0x107d ,
. subdevice = 0x665e ,
. card = CX88_BOARD_WINFAST_DTV2000H ,
2009-08-10 22:15:54 -03:00
} , {
. subvendor = 0x107d ,
. subdevice = 0x6f2b ,
. card = CX88_BOARD_WINFAST_DTV2000H_J ,
2006-06-21 16:04:33 -03:00
} , {
. subvendor = 0x18ac ,
. subdevice = 0xd800 , /* FusionHDTV 3 Gold (original revision) */
. card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q ,
2006-06-29 20:29:33 -03:00
} , {
. subvendor = 0x14f1 ,
. subdevice = 0x0084 ,
. card = CX88_BOARD_GENIATECH_DVBS ,
2006-08-08 09:10:04 -03:00
} , {
. subvendor = 0x0070 ,
. subdevice = 0x1404 ,
. card = CX88_BOARD_HAUPPAUGE_HVR3000 ,
2006-08-08 09:10:04 -03:00
} , {
. subvendor = 0x1461 ,
. subdevice = 0xc111 , /* AverMedia M150-D */
/* This board is known to work with the ASUS PVR416 config */
. card = CX88_BOARD_ASUS_PVR_416 ,
2006-08-08 09:10:05 -03:00
} , {
. subvendor = 0xc180 ,
. subdevice = 0xc980 ,
. card = CX88_BOARD_TE_DTV_250_OEM_SWANN ,
2006-09-14 15:41:13 -03:00
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9600 ,
. card = CX88_BOARD_HAUPPAUGE_HVR1300 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9601 ,
. card = CX88_BOARD_HAUPPAUGE_HVR1300 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9602 ,
. card = CX88_BOARD_HAUPPAUGE_HVR1300 ,
2006-09-15 15:41:23 -03:00
} , {
. subvendor = 0x107d ,
. subdevice = 0x6632 ,
. card = CX88_BOARD_LEADTEK_PVR2000 ,
2006-09-25 14:14:24 -03:00
} , {
. subvendor = 0x12ab ,
. subdevice = 0x2300 , /* Club3D Zap TV2100 */
. card = CX88_BOARD_KWORLD_DVB_T_CX22702 ,
2006-09-29 22:37:07 -03:00
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9000 ,
. card = CX88_BOARD_HAUPPAUGE_DVB_T1 ,
2006-09-30 00:43:58 -03:00
} , {
. subvendor = 0x0070 ,
. subdevice = 0x1400 ,
. card = CX88_BOARD_HAUPPAUGE_HVR3000 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x1401 ,
. card = CX88_BOARD_HAUPPAUGE_HVR3000 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x1402 ,
. card = CX88_BOARD_HAUPPAUGE_HVR3000 ,
2007-03-11 12:48:04 -03:00
} , {
. subvendor = 0x1421 ,
. subdevice = 0x0341 , /* ADS Tech InstantTV DVB-S */
. card = CX88_BOARD_KWORLD_DVBS_100 ,
2007-05-17 18:10:17 -03:00
} , {
. subvendor = 0x1421 ,
. subdevice = 0x0390 ,
. card = CX88_BOARD_ADSTECH_PTV_390 ,
2008-01-05 16:53:01 -03:00
} , {
. subvendor = 0x11bd ,
. subdevice = 0x0051 ,
. card = CX88_BOARD_PINNACLE_PCTV_HD_800i ,
2008-04-22 14:45:14 -03:00
} , {
. subvendor = 0x18ac ,
. subdevice = 0xd530 ,
. card = CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO ,
2008-04-22 14:45:15 -03:00
} , {
. subvendor = 0x12ab ,
. subdevice = 0x1788 ,
. card = CX88_BOARD_PINNACLE_HYBRID_PCTV ,
} , {
. subvendor = 0x14f1 ,
. subdevice = 0xea3d ,
. card = CX88_BOARD_POWERCOLOR_REAL_ANGEL ,
} , {
. subvendor = 0x107d ,
. subdevice = 0x6f18 ,
. card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL ,
} , {
. subvendor = 0x14f1 ,
. subdevice = 0x8852 ,
. card = CX88_BOARD_GENIATECH_X8000_MT ,
2008-04-22 14:46:00 -03:00
} , {
2008-04-22 14:45:34 -03:00
. subvendor = 0x18ac ,
. subdevice = 0xd610 ,
. card = CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD ,
2008-04-22 14:46:00 -03:00
} , {
. subvendor = 0x1554 ,
. subdevice = 0x4935 ,
. card = CX88_BOARD_PROLINK_PV_8000GT ,
2008-09-29 12:08:29 -03:00
} , {
. subvendor = 0x1554 ,
. subdevice = 0x4976 ,
. card = CX88_BOARD_PROLINK_PV_GLOBAL_XTREME ,
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
} , {
. subvendor = 0x17de ,
. subdevice = 0x08c1 ,
. card = CX88_BOARD_KWORLD_ATSC_120 ,
2008-09-04 01:17:33 -03:00
} , {
. subvendor = 0x0070 ,
. subdevice = 0x6900 ,
. card = CX88_BOARD_HAUPPAUGE_HVR4000 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x6904 ,
. card = CX88_BOARD_HAUPPAUGE_HVR4000 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x6902 ,
. card = CX88_BOARD_HAUPPAUGE_HVR4000 ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x6905 ,
. card = CX88_BOARD_HAUPPAUGE_HVR4000LITE ,
} , {
. subvendor = 0x0070 ,
. subdevice = 0x6906 ,
. card = CX88_BOARD_HAUPPAUGE_HVR4000LITE ,
2008-09-04 17:24:14 -03:00
} , {
2008-09-23 15:43:57 -03:00
. subvendor = 0xd420 ,
. subdevice = 0x9022 ,
. card = CX88_BOARD_TEVII_S420 ,
} , {
. subvendor = 0xd460 ,
2008-09-04 17:24:14 -03:00
. subdevice = 0x9022 ,
. card = CX88_BOARD_TEVII_S460 ,
2008-09-17 11:30:21 -03:00
} , {
. subvendor = 0xA044 ,
. subdevice = 0x2011 ,
. card = CX88_BOARD_OMICOM_SS4_PCI ,
2008-11-09 15:25:31 -03:00
} , {
. subvendor = 0x8910 ,
. subdevice = 0x8888 ,
. card = CX88_BOARD_TBS_8910 ,
2008-09-17 11:58:33 -03:00
} , {
. subvendor = 0x8920 ,
. subdevice = 0x8888 ,
. card = CX88_BOARD_TBS_8920 ,
2008-11-09 15:26:25 -03:00
} , {
. subvendor = 0xb022 ,
. subdevice = 0x3022 ,
. card = CX88_BOARD_PROF_6200 ,
2008-10-08 06:48:08 -03:00
} , {
. subvendor = 0xB033 ,
. subdevice = 0x3033 ,
. card = CX88_BOARD_PROF_7300 ,
2008-11-09 15:25:31 -03:00
} , {
. subvendor = 0xb200 ,
. subdevice = 0x4200 ,
. card = CX88_BOARD_SATTRADE_ST4200 ,
2009-03-10 19:08:06 -03:00
} , {
. subvendor = 0x153b ,
. subdevice = 0x1177 ,
. card = CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII ,
2009-03-28 14:22:21 -03:00
} , {
. subvendor = 0x0070 ,
. subdevice = 0x9290 ,
. card = CX88_BOARD_HAUPPAUGE_IRONLY ,
2009-05-31 16:47:28 -03:00
} , {
. subvendor = 0x107d ,
. subdevice = 0x6654 ,
. card = CX88_BOARD_WINFAST_DTV1800H ,
2009-06-16 23:55:44 -03:00
} , {
/* PVR2000 PAL Model [107d:6630] */
. subvendor = 0x107d ,
. subdevice = 0x6630 ,
. card = CX88_BOARD_LEADTEK_PVR2000 ,
} , {
/* PVR2000 PAL Model [107d:6638] */
. subvendor = 0x107d ,
. subdevice = 0x6638 ,
. card = CX88_BOARD_LEADTEK_PVR2000 ,
} , {
/* PVR2000 NTSC Model [107d:6631] */
. subvendor = 0x107d ,
. subdevice = 0x6631 ,
. card = CX88_BOARD_LEADTEK_PVR2000 ,
} , {
/* PVR2000 NTSC Model [107d:6637] */
. subvendor = 0x107d ,
. subdevice = 0x6637 ,
. card = CX88_BOARD_LEADTEK_PVR2000 ,
} , {
/* PVR2000 NTSC Model [107d:663d] */
. subvendor = 0x107d ,
. subdevice = 0x663d ,
. card = CX88_BOARD_LEADTEK_PVR2000 ,
} , {
/* DV2000 NTSC Model [107d:6621] */
. subvendor = 0x107d ,
. subdevice = 0x6621 ,
. card = CX88_BOARD_WINFAST_DV2000 ,
} , {
/* TV2000 XP Global [107d:6618] */
. subvendor = 0x107d ,
. subdevice = 0x6618 ,
. card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL ,
2008-04-22 14:46:00 -03:00
} ,
2005-04-16 15:20:36 -07:00
} ;
/* ----------------------------------------------------------------------- */
/* some leadtek specific stuff */
2006-12-23 14:11:03 -03:00
static void leadtek_eeprom ( struct cx88_core * core , u8 * eeprom_data )
2005-04-16 15:20:36 -07:00
{
if ( eeprom_data [ 4 ] ! = 0x7d | |
eeprom_data [ 5 ] ! = 0x10 | |
eeprom_data [ 7 ] ! = 0x66 ) {
2008-04-22 14:45:29 -03:00
warn_printk ( core , " Leadtek eeprom invalid. \n " ) ;
2005-04-16 15:20:36 -07:00
return ;
}
2009-06-16 23:55:44 -03:00
/* Terry Wu <terrywu2009@gmail.com> */
switch ( eeprom_data [ 6 ] ) {
case 0x13 : /* SSID 6613 for TV2000 XP Expert NTSC Model */
case 0x21 : /* SSID 6621 for DV2000 NTSC Model */
case 0x31 : /* SSID 6631 for PVR2000 NTSC Model */
case 0x37 : /* SSID 6637 for PVR2000 NTSC Model */
case 0x3d : /* SSID 6637 for PVR2000 NTSC Model */
core - > board . tuner_type = TUNER_PHILIPS_FM1236_MK3 ;
break ;
default :
core - > board . tuner_type = TUNER_PHILIPS_FM1216ME_MK3 ;
break ;
}
2005-04-16 15:20:36 -07:00
2008-04-22 14:45:29 -03:00
info_printk ( core , " Leadtek Winfast 2000XP Expert config: "
" tuner=%d, eeprom[0]=0x%02x \n " ,
core - > board . tuner_type , eeprom_data [ 0 ] ) ;
2005-04-16 15:20:36 -07:00
}
static void hauppauge_eeprom ( struct cx88_core * core , u8 * eeprom_data )
{
struct tveeprom tv ;
2005-09-09 13:04:05 -07:00
tveeprom_hauppauge_analog ( & core - > i2c_client , & tv , eeprom_data ) ;
2007-08-15 14:41:57 -03:00
core - > board . tuner_type = tv . tuner_type ;
2006-01-09 15:25:17 -02:00
core - > tuner_formats = tv . tuner_formats ;
2007-08-15 14:41:57 -03:00
core - > board . radio . type = tv . has_radio ? CX88_RADIO : 0 ;
2005-04-16 15:20:36 -07:00
/* Make sure we support the board model */
2005-12-01 00:51:27 -08:00
switch ( tv . model )
{
2006-09-30 00:43:58 -03:00
case 14009 : /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in) */
case 14019 : /* WinTV-HVR3000 (Retail, IR Blaster, b/panel video, 3.5mm audio in) */
case 14029 : /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge) */
case 14109 : /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - low profile) */
case 14129 : /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge - LP) */
case 14559 : /* WinTV-HVR3000 (OEM, no IR, b/panel video, 3.5mm audio in) */
2006-08-08 09:10:04 -03:00
case 14569 : /* WinTV-HVR3000 (OEM, no IR, no back panel video) */
2006-09-30 00:43:58 -03:00
case 14659 : /* WinTV-HVR3000 (OEM, no IR, b/panel video, RCA audio in - Low profile) */
case 14669 : /* WinTV-HVR3000 (OEM, no IR, no b/panel video - Low profile) */
2006-01-09 15:25:17 -02:00
case 28552 : /* WinTV-PVR 'Roslyn' (No IR) */
2006-01-23 17:11:07 -02:00
case 34519 : /* WinTV-PCI-FM */
2008-09-04 01:17:33 -03:00
case 69009 :
/* WinTV-HVR4000 (DVBS/S2/T, Video and IR, back panel inputs) */
case 69100 : /* WinTV-HVR4000LITE (DVBS/S2, IR) */
case 69500 : /* WinTV-HVR4000LITE (DVBS/S2, No IR) */
case 69559 :
/* WinTV-HVR4000 (DVBS/S2/T, Video no IR, back panel inputs) */
case 69569 : /* WinTV-HVR4000 (DVBS/S2/T, Video no IR) */
2005-12-01 00:51:26 -08:00
case 90002 : /* Nova-T-PCI (9002) */
2005-12-01 00:51:41 -08:00
case 92001 : /* Nova-S-Plus (Video and IR) */
case 92002 : /* Nova-S-Plus (Video and IR) */
case 90003 : /* Nova-T-PCI (9002 No RF out) */
2005-12-01 00:51:26 -08:00
case 90500 : /* Nova-T-PCI (oem) */
case 90501 : /* Nova-T-PCI (oem/IR) */
2005-12-01 00:51:27 -08:00
case 92000 : /* Nova-SE2 (OEM, No Video or IR) */
2009-03-28 14:22:21 -03:00
case 92900 : /* WinTV-IROnly (No analog or digital Video inputs) */
2006-01-09 15:25:12 -02:00
case 94009 : /* WinTV-HVR1100 (Video and IR Retail) */
case 94501 : /* WinTV-HVR1100 (Video and IR OEM) */
2006-09-14 15:41:13 -03:00
case 96009 : /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX) */
case 96019 : /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX/TX) */
case 96559 : /* WinTV-HVR1300 (PAL Video, MPEG Video no IR) */
case 96569 : /* WinTV-HVR1300 () */
case 96659 : /* WinTV-HVR1300 () */
2006-01-09 15:25:12 -02:00
case 98559 : /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */
2005-04-16 15:20:36 -07:00
/* known */
break ;
default :
2008-04-22 14:45:29 -03:00
warn_printk ( core , " warning: unknown hauppauge model #%d \n " ,
tv . model ) ;
2005-04-16 15:20:36 -07:00
break ;
}
2008-04-22 14:45:29 -03:00
info_printk ( core , " hauppauge eeprom: model=%d \n " , tv . model ) ;
2005-04-16 15:20:36 -07:00
}
/* ----------------------------------------------------------------------- */
/* some GDI (was: Modular Technology) specific stuff */
static struct {
int id ;
int fm ;
char * name ;
} gdi_tuner [ ] = {
[ 0x01 ] = { . id = TUNER_ABSENT ,
. name = " NTSC_M " } ,
[ 0x02 ] = { . id = TUNER_ABSENT ,
. name = " PAL_B " } ,
[ 0x03 ] = { . id = TUNER_ABSENT ,
. name = " PAL_I " } ,
[ 0x04 ] = { . id = TUNER_ABSENT ,
. name = " PAL_D " } ,
[ 0x05 ] = { . id = TUNER_ABSENT ,
. name = " SECAM " } ,
[ 0x10 ] = { . id = TUNER_ABSENT ,
. fm = 1 ,
. name = " TEMIC_4049 " } ,
[ 0x11 ] = { . id = TUNER_TEMIC_4136FY5 ,
. name = " TEMIC_4136 " } ,
[ 0x12 ] = { . id = TUNER_ABSENT ,
. name = " TEMIC_4146 " } ,
[ 0x20 ] = { . id = TUNER_PHILIPS_FQ1216ME ,
. fm = 1 ,
. name = " PHILIPS_FQ1216_MK3 " } ,
[ 0x21 ] = { . id = TUNER_ABSENT , . fm = 1 ,
. name = " PHILIPS_FQ1236_MK3 " } ,
[ 0x22 ] = { . id = TUNER_ABSENT ,
. name = " PHILIPS_FI1236_MK3 " } ,
[ 0x23 ] = { . id = TUNER_ABSENT ,
. name = " PHILIPS_FI1216_MK3 " } ,
} ;
static void gdi_eeprom ( struct cx88_core * core , u8 * eeprom_data )
{
char * name = ( eeprom_data [ 0x0d ] < ARRAY_SIZE ( gdi_tuner ) )
? gdi_tuner [ eeprom_data [ 0x0d ] ] . name : NULL ;
2008-04-22 14:45:29 -03:00
info_printk ( core , " GDI: tuner=%s \n " , name ? name : " unknown " ) ;
2005-04-16 15:20:36 -07:00
if ( NULL = = name )
return ;
2007-08-15 14:41:57 -03:00
core - > board . tuner_type = gdi_tuner [ eeprom_data [ 0x0d ] ] . id ;
core - > board . radio . type = gdi_tuner [ eeprom_data [ 0x0d ] ] . fm ?
CX88_RADIO : 0 ;
2005-04-16 15:20:36 -07:00
}
2008-04-22 14:45:15 -03:00
/* ------------------------------------------------------------------- */
/* some Divco specific stuff */
2008-04-22 14:46:10 -03:00
static int cx88_dvico_xc2028_callback ( struct cx88_core * core ,
int command , int arg )
2008-04-22 14:45:15 -03:00
{
switch ( command ) {
case XC2028_TUNER_RESET :
2008-09-12 13:31:45 -03:00
switch ( core - > boardnr ) {
case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO :
/* GPIO-4 xc3028 tuner */
cx_set ( MO_GP0_IO , 0x00001000 ) ;
cx_clear ( MO_GP0_IO , 0x00000010 ) ;
msleep ( 100 ) ;
cx_set ( MO_GP0_IO , 0x00000010 ) ;
msleep ( 100 ) ;
break ;
default :
cx_write ( MO_GP0_IO , 0x101000 ) ;
mdelay ( 5 ) ;
cx_set ( MO_GP0_IO , 0x101010 ) ;
}
2008-04-22 14:45:15 -03:00
break ;
default :
return - EINVAL ;
}
return 0 ;
}
2008-04-22 14:45:15 -03:00
/* ----------------------------------------------------------------------- */
/* some Geniatech specific stuff */
2008-04-22 14:46:10 -03:00
static int cx88_xc3028_geniatech_tuner_callback ( struct cx88_core * core ,
int command , int mode )
2008-04-22 14:45:15 -03:00
{
switch ( command ) {
case XC2028_TUNER_RESET :
switch ( INPUT ( core - > input ) . type ) {
case CX88_RADIO :
2008-04-22 14:45:28 -03:00
break ;
2008-04-22 14:45:15 -03:00
case CX88_VMUX_DVB :
cx_write ( MO_GP1_IO , 0x030302 ) ;
mdelay ( 50 ) ;
2008-04-22 14:45:28 -03:00
break ;
2008-04-22 14:45:15 -03:00
default :
cx_write ( MO_GP1_IO , 0x030301 ) ;
mdelay ( 50 ) ;
2008-04-22 14:45:28 -03:00
}
cx_write ( MO_GP1_IO , 0x101010 ) ;
mdelay ( 50 ) ;
cx_write ( MO_GP1_IO , 0x101000 ) ;
mdelay ( 50 ) ;
cx_write ( MO_GP1_IO , 0x101010 ) ;
mdelay ( 50 ) ;
return 0 ;
2008-04-22 14:45:15 -03:00
}
return - EINVAL ;
}
2009-05-31 16:47:28 -03:00
static int cx88_xc3028_winfast1800h_callback ( struct cx88_core * core ,
int command , int arg )
{
switch ( command ) {
case XC2028_TUNER_RESET :
/* GPIO 12 (xc3028 tuner reset) */
cx_set ( MO_GP1_IO , 0x1010 ) ;
mdelay ( 50 ) ;
cx_clear ( MO_GP1_IO , 0x10 ) ;
mdelay ( 50 ) ;
cx_set ( MO_GP1_IO , 0x10 ) ;
mdelay ( 50 ) ;
return 0 ;
}
return - EINVAL ;
}
2008-04-22 14:46:00 -03:00
/* ------------------------------------------------------------------- */
/* some Divco specific stuff */
2008-04-22 14:46:10 -03:00
static int cx88_pv_8000gt_callback ( struct cx88_core * core ,
int command , int arg )
2008-04-22 14:46:00 -03:00
{
switch ( command ) {
case XC2028_TUNER_RESET :
cx_write ( MO_GP2_IO , 0xcf7 ) ;
mdelay ( 50 ) ;
cx_write ( MO_GP2_IO , 0xef5 ) ;
mdelay ( 50 ) ;
cx_write ( MO_GP2_IO , 0xcf7 ) ;
break ;
default :
return - EINVAL ;
}
return 0 ;
}
2006-02-28 08:34:59 -03:00
/* ----------------------------------------------------------------------- */
/* some DViCO specific stuff */
static void dvico_fusionhdtv_hybrid_init ( struct cx88_core * core )
{
struct i2c_msg msg = { . addr = 0x45 , . flags = 0 } ;
int i , err ;
2006-02-28 20:23:11 -03:00
static u8 init_bufs [ 13 ] [ 5 ] = {
2006-02-28 08:34:59 -03:00
{ 0x10 , 0x00 , 0x20 , 0x01 , 0x03 } ,
{ 0x10 , 0x10 , 0x01 , 0x00 , 0x21 } ,
{ 0x10 , 0x10 , 0x10 , 0x00 , 0xCA } ,
{ 0x10 , 0x10 , 0x12 , 0x00 , 0x08 } ,
{ 0x10 , 0x10 , 0x13 , 0x00 , 0x0A } ,
{ 0x10 , 0x10 , 0x16 , 0x01 , 0xC0 } ,
{ 0x10 , 0x10 , 0x22 , 0x01 , 0x3D } ,
{ 0x10 , 0x10 , 0x73 , 0x01 , 0x2E } ,
{ 0x10 , 0x10 , 0x72 , 0x00 , 0xC5 } ,
{ 0x10 , 0x10 , 0x71 , 0x01 , 0x97 } ,
{ 0x10 , 0x10 , 0x70 , 0x00 , 0x0F } ,
{ 0x10 , 0x10 , 0xB0 , 0x00 , 0x01 } ,
{ 0x03 , 0x0C } ,
} ;
2007-03-28 22:37:26 -03:00
for ( i = 0 ; i < ARRAY_SIZE ( init_bufs ) ; i + + ) {
2006-02-28 08:34:59 -03:00
msg . buf = init_bufs [ i ] ;
msg . len = ( i ! = 12 ? 5 : 2 ) ;
err = i2c_transfer ( & core - > i2c_adap , & msg , 1 ) ;
if ( err ! = 1 ) {
2008-04-22 14:45:29 -03:00
warn_printk ( core , " dvico_fusionhdtv_hybrid_init buf %d "
" failed (err = %d)! \n " , i , err ) ;
2006-02-28 08:34:59 -03:00
return ;
}
}
}
2008-04-22 14:46:10 -03:00
static int cx88_xc2028_tuner_callback ( struct cx88_core * core ,
int command , int arg )
2008-04-22 14:45:14 -03:00
{
2008-04-22 14:45:15 -03:00
/* Board-specific callbacks */
switch ( core - > boardnr ) {
case CX88_BOARD_POWERCOLOR_REAL_ANGEL :
case CX88_BOARD_GENIATECH_X8000_MT :
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
case CX88_BOARD_KWORLD_ATSC_120 :
2008-04-22 14:46:10 -03:00
return cx88_xc3028_geniatech_tuner_callback ( core ,
command , arg ) ;
2008-04-22 14:46:00 -03:00
case CX88_BOARD_PROLINK_PV_8000GT :
2008-09-29 12:08:29 -03:00
case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME :
2008-04-22 14:46:10 -03:00
return cx88_pv_8000gt_callback ( core , command , arg ) ;
2008-04-22 14:45:15 -03:00
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO :
2008-09-12 13:31:45 -03:00
case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO :
2008-04-22 14:46:10 -03:00
return cx88_dvico_xc2028_callback ( core , command , arg ) ;
2009-06-16 23:55:44 -03:00
case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL :
2009-05-31 16:47:28 -03:00
case CX88_BOARD_WINFAST_DTV1800H :
return cx88_xc3028_winfast1800h_callback ( core , command , arg ) ;
2008-04-22 14:45:15 -03:00
}
2008-04-22 14:45:14 -03:00
switch ( command ) {
case XC2028_TUNER_RESET :
switch ( INPUT ( core - > input ) . type ) {
case CX88_RADIO :
2008-04-22 14:45:29 -03:00
info_printk ( core , " setting GPIO to radio! \n " ) ;
2008-04-22 14:45:14 -03:00
cx_write ( MO_GP0_IO , 0x4ff ) ;
mdelay ( 250 ) ;
cx_write ( MO_GP2_IO , 0xff ) ;
mdelay ( 250 ) ;
2008-04-22 14:45:28 -03:00
break ;
2008-04-22 14:45:14 -03:00
case CX88_VMUX_DVB : /* Digital TV*/
default : /* Analog TV */
2008-04-22 14:45:29 -03:00
info_printk ( core , " setting GPIO to TV! \n " ) ;
2008-04-22 14:45:28 -03:00
break ;
2008-04-22 14:45:14 -03:00
}
2008-04-22 14:45:28 -03:00
cx_write ( MO_GP1_IO , 0x101010 ) ;
mdelay ( 250 ) ;
cx_write ( MO_GP1_IO , 0x101000 ) ;
mdelay ( 250 ) ;
cx_write ( MO_GP1_IO , 0x101010 ) ;
mdelay ( 250 ) ;
return 0 ;
2008-04-22 14:45:14 -03:00
}
return - EINVAL ;
}
2008-01-05 16:53:01 -03:00
/* ----------------------------------------------------------------------- */
/* Tuner callback function. Currently only needed for the Pinnacle *
* PCTV HD 800 i with an xc5000 sillicon tuner . This is used for both *
* analog tuner attach ( tuner - core . c ) and dvb tuner attach ( cx88 - dvb . c ) */
2008-04-22 14:46:10 -03:00
static int cx88_xc5000_tuner_callback ( struct cx88_core * core ,
int command , int arg )
2008-01-05 16:53:01 -03:00
{
2008-04-22 14:45:14 -03:00
switch ( core - > boardnr ) {
2008-01-05 16:53:01 -03:00
case CX88_BOARD_PINNACLE_PCTV_HD_800i :
2008-04-22 14:45:14 -03:00
if ( command = = 0 ) { /* This is the reset command from xc5000 */
2009-05-14 21:50:36 -03:00
/* djh - According to the engineer at PCTV Systems,
the xc5000 reset pin is supposed to be on GPIO12 .
However , despite three nights of effort , pulling
that GPIO low didn ' t reset the xc5000 . While
pulling MO_SRST_IO low does reset the xc5000 , this
also resets in the s5h1409 being reset as well .
This causes tuning to always fail since the internal
state of the s5h1409 does not match the driver ' s
state . Given that the only two conditions in which
the driver performs a reset is during firmware load
and powering down the chip , I am taking out the
reset . We know that the chip is being reset
when the cx88 comes online , and not being able to
do power management for this board is worse than
not having any tuning at all . */
2008-01-05 16:53:01 -03:00
return 0 ;
2008-04-22 14:45:14 -03:00
} else {
2008-04-22 14:45:29 -03:00
err_printk ( core , " xc5000: unknown tuner "
" callback command. \n " ) ;
2008-01-05 16:53:01 -03:00
return - EINVAL ;
}
break ;
2008-04-22 14:45:34 -03:00
case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD :
if ( command = = 0 ) { /* This is the reset command from xc5000 */
cx_clear ( MO_GP0_IO , 0x00000010 ) ;
msleep ( 10 ) ;
cx_set ( MO_GP0_IO , 0x00000010 ) ;
return 0 ;
} else {
printk ( KERN_ERR
" xc5000: unknown tuner callback command. \n " ) ;
return - EINVAL ;
}
break ;
2008-01-05 16:53:01 -03:00
}
return 0 ; /* Should never be here */
}
2008-04-22 14:45:14 -03:00
2008-09-12 13:31:45 -03:00
int cx88_tuner_callback ( void * priv , int component , int command , int arg )
2008-04-22 14:45:14 -03:00
{
struct i2c_algo_bit_data * i2c_algo = priv ;
2008-04-22 14:46:10 -03:00
struct cx88_core * core ;
if ( ! i2c_algo ) {
printk ( KERN_ERR " cx88: Error - i2c private data undefined. \n " ) ;
return - EINVAL ;
}
core = i2c_algo - > data ;
if ( ! core ) {
printk ( KERN_ERR " cx88: Error - device struct undefined. \n " ) ;
return - EINVAL ;
}
2008-04-22 14:45:14 -03:00
2008-09-12 13:31:45 -03:00
if ( component ! = DVB_FRONTEND_COMPONENT_TUNER )
return - EINVAL ;
2008-04-22 14:45:14 -03:00
switch ( core - > board . tuner_type ) {
case TUNER_XC2028 :
2008-04-22 14:45:29 -03:00
info_printk ( core , " Calling XC2028/3028 callback \n " ) ;
2008-04-22 14:46:10 -03:00
return cx88_xc2028_tuner_callback ( core , command , arg ) ;
2008-04-22 14:45:14 -03:00
case TUNER_XC5000 :
2008-04-22 14:45:29 -03:00
info_printk ( core , " Calling XC5000 callback \n " ) ;
2008-04-22 14:46:10 -03:00
return cx88_xc5000_tuner_callback ( core , command , arg ) ;
2008-04-22 14:45:14 -03:00
}
2008-04-22 14:45:29 -03:00
err_printk ( core , " Error: Calling callback for tuner %d \n " ,
core - > board . tuner_type ) ;
2008-04-22 14:45:14 -03:00
return - EINVAL ;
}
2008-01-05 16:53:01 -03:00
EXPORT_SYMBOL ( cx88_tuner_callback ) ;
2005-04-16 15:20:36 -07:00
/* ----------------------------------------------------------------------- */
2007-08-15 14:41:58 -03:00
static void cx88_card_list ( struct cx88_core * core , struct pci_dev * pci )
2005-04-16 15:20:36 -07:00
{
int i ;
if ( 0 = = pci - > subsystem_vendor & &
0 = = pci - > subsystem_device ) {
2008-04-22 14:45:29 -03:00
printk ( KERN_ERR
" %s: Your board has no valid PCI Subsystem ID and thus can't \n "
2005-04-16 15:20:36 -07:00
" %s: be autodetected. Please pass card=<n> insmod option to \n "
" %s: workaround that. Redirect complaints to the vendor of \n "
" %s: the TV card. Best regards, \n "
" %s: -- tux \n " ,
core - > name , core - > name , core - > name , core - > name , core - > name ) ;
} else {
2008-04-22 14:45:29 -03:00
printk ( KERN_ERR
" %s: Your board isn't known (yet) to the driver. You can \n "
2005-04-16 15:20:36 -07:00
" %s: try to pick one of the existing card configs via \n "
" %s: card=<n> insmod option. Updating to the latest \n "
" %s: version might help as well. \n " ,
core - > name , core - > name , core - > name , core - > name ) ;
}
2008-04-22 14:45:29 -03:00
err_printk ( core , " Here is a list of valid choices for the card=<n> "
" insmod option: \n " ) ;
2007-08-15 14:41:58 -03:00
for ( i = 0 ; i < ARRAY_SIZE ( cx88_boards ) ; i + + )
2008-04-22 14:45:29 -03:00
printk ( KERN_ERR " %s: card=%d -> %s \n " ,
2005-04-16 15:20:36 -07:00
core - > name , i , cx88_boards [ i ] . name ) ;
}
2007-08-15 14:41:58 -03:00
static void cx88_card_setup_pre_i2c ( struct cx88_core * core )
2006-09-14 15:41:13 -03:00
{
2007-08-15 14:41:57 -03:00
switch ( core - > boardnr ) {
2006-09-14 15:41:13 -03:00
case CX88_BOARD_HAUPPAUGE_HVR1300 :
2008-09-22 01:48:13 -03:00
/*
* Bring the 702 demod up before i2c scanning / attach or devices are hidden
* We leave here with the 702 on the bus
*
* " reset the IR receiver on GPIO[3] "
* Reported by Mike Crash < mike AT mikecrash . com >
*/
cx_write ( MO_GP0_IO , 0x0000ef88 ) ;
2006-09-14 15:41:13 -03:00
udelay ( 1000 ) ;
2008-09-22 01:48:13 -03:00
cx_clear ( MO_GP0_IO , 0x00000088 ) ;
2006-09-14 15:41:13 -03:00
udelay ( 50 ) ;
2008-09-22 01:48:13 -03:00
cx_set ( MO_GP0_IO , 0x00000088 ) ; /* 702 out of reset */
2006-09-14 15:41:13 -03:00
udelay ( 1000 ) ;
break ;
2008-04-22 14:46:00 -03:00
2008-09-29 12:08:29 -03:00
case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME :
2008-04-22 14:46:00 -03:00
case CX88_BOARD_PROLINK_PV_8000GT :
cx_write ( MO_GP2_IO , 0xcf7 ) ;
mdelay ( 50 ) ;
cx_write ( MO_GP2_IO , 0xef5 ) ;
mdelay ( 50 ) ;
cx_write ( MO_GP2_IO , 0xcf7 ) ;
msleep ( 10 ) ;
break ;
2008-09-22 01:48:13 -03:00
case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD :
2008-04-22 14:45:34 -03:00
/* Enable the xc5000 tuner */
cx_set ( MO_GP0_IO , 0x00001010 ) ;
break ;
2008-09-22 01:48:13 -03:00
case CX88_BOARD_HAUPPAUGE_HVR3000 :
2008-09-04 01:17:33 -03:00
case CX88_BOARD_HAUPPAUGE_HVR4000 :
2008-09-22 01:48:13 -03:00
/* Init GPIO */
cx_write ( MO_GP0_IO , core - > board . input [ 0 ] . gpio0 ) ;
2008-09-04 01:17:33 -03:00
udelay ( 1000 ) ;
2008-10-11 11:35:56 -03:00
cx_clear ( MO_GP0_IO , 0x00000080 ) ;
udelay ( 50 ) ;
cx_set ( MO_GP0_IO , 0x00000080 ) ; /* 702 out of reset */
udelay ( 1000 ) ;
2008-09-22 01:48:13 -03:00
break ;
2009-05-31 16:47:28 -03:00
2009-06-16 23:55:44 -03:00
case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL :
2009-05-31 16:47:28 -03:00
case CX88_BOARD_WINFAST_DTV1800H :
/* GPIO 12 (xc3028 tuner reset) */
cx_set ( MO_GP1_IO , 0x1010 ) ;
mdelay ( 50 ) ;
cx_clear ( MO_GP1_IO , 0x10 ) ;
mdelay ( 50 ) ;
cx_set ( MO_GP1_IO , 0x10 ) ;
mdelay ( 50 ) ;
break ;
2006-09-14 15:41:13 -03:00
}
}
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
/*
* Sets board - dependent xc3028 configuration
*/
void cx88_setup_xc3028 ( struct cx88_core * core , struct xc2028_ctrl * ctl )
{
memset ( ctl , 0 , sizeof ( * ctl ) ) ;
ctl - > fname = XC2028_DEFAULT_FIRMWARE ;
ctl - > max_len = 64 ;
switch ( core - > boardnr ) {
case CX88_BOARD_POWERCOLOR_REAL_ANGEL :
2008-06-03 21:29:45 -03:00
/* Now works with firmware version 2.7 */
if ( core - > i2c_algo . udelay < 16 )
core - > i2c_algo . udelay = 16 ;
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
break ;
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO :
2009-05-31 16:47:28 -03:00
case CX88_BOARD_WINFAST_DTV1800H :
2008-10-11 12:44:38 -03:00
ctl - > demod = XC3028_FE_ZARLINK456 ;
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
break ;
case CX88_BOARD_KWORLD_ATSC_120 :
case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO :
ctl - > demod = XC3028_FE_OREN538 ;
break ;
2009-08-03 22:52:59 -03:00
case CX88_BOARD_GENIATECH_X8000_MT :
/* FIXME: For this board, the xc3028 never recovers after being
powered down ( the reset GPIO probably is not set properly ) .
We don ' t have access to the hardware so we cannot determine
which GPIO is used for xc3028 , so just disable power xc3028
power management for now */
ctl - > disable_power_mgmt = 1 ;
break ;
2009-06-16 23:55:44 -03:00
case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL :
2008-09-29 12:08:29 -03:00
case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME :
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
case CX88_BOARD_PROLINK_PV_8000GT :
/*
2008-09-29 12:08:29 -03:00
* Those boards uses non - MTS firmware
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
*/
break ;
2008-09-05 14:33:54 -03:00
case CX88_BOARD_PINNACLE_HYBRID_PCTV :
2009-03-10 19:08:06 -03:00
case CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII :
2008-09-05 14:33:54 -03:00
ctl - > demod = XC3028_FE_ZARLINK456 ;
ctl - > mts = 1 ;
break ;
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
default :
ctl - > demod = XC3028_FE_OREN538 ;
ctl - > mts = 1 ;
}
}
EXPORT_SYMBOL_GPL ( cx88_setup_xc3028 ) ;
2007-08-15 14:41:58 -03:00
static void cx88_card_setup ( struct cx88_core * core )
2005-04-16 15:20:36 -07:00
{
2005-12-01 00:51:27 -08:00
static u8 eeprom [ 256 ] ;
2008-04-26 11:55:09 -03:00
struct tuner_setup tun_setup ;
unsigned int mode_mask = T_RADIO |
T_ANALOG_TV |
T_DIGITAL_TV ;
memset ( & tun_setup , 0 , sizeof ( tun_setup ) ) ;
2005-04-16 15:20:36 -07:00
if ( 0 = = core - > i2c_rc ) {
core - > i2c_client . addr = 0xa0 > > 1 ;
2008-04-26 11:55:09 -03:00
tveeprom_read ( & core - > i2c_client , eeprom , sizeof ( eeprom ) ) ;
2005-04-16 15:20:36 -07:00
}
2007-08-15 14:41:57 -03:00
switch ( core - > boardnr ) {
2005-04-16 15:20:36 -07:00
case CX88_BOARD_HAUPPAUGE :
case CX88_BOARD_HAUPPAUGE_ROSLYN :
if ( 0 = = core - > i2c_rc )
2008-04-26 11:55:09 -03:00
hauppauge_eeprom ( core , eeprom + 8 ) ;
2005-04-16 15:20:36 -07:00
break ;
case CX88_BOARD_GDI :
if ( 0 = = core - > i2c_rc )
2008-04-26 11:55:09 -03:00
gdi_eeprom ( core , eeprom ) ;
2005-04-16 15:20:36 -07:00
break ;
2009-06-16 23:55:44 -03:00
case CX88_BOARD_LEADTEK_PVR2000 :
case CX88_BOARD_WINFAST_DV2000 :
2005-04-16 15:20:36 -07:00
case CX88_BOARD_WINFAST2000XP_EXPERT :
if ( 0 = = core - > i2c_rc )
2008-04-26 11:55:09 -03:00
leadtek_eeprom ( core , eeprom ) ;
2005-04-16 15:20:36 -07:00
break ;
2006-01-09 15:25:02 -02:00
case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1 :
case CX88_BOARD_HAUPPAUGE_NOVASE2_S1 :
2005-04-16 15:20:36 -07:00
case CX88_BOARD_HAUPPAUGE_DVB_T1 :
2006-01-09 15:25:12 -02:00
case CX88_BOARD_HAUPPAUGE_HVR1100 :
case CX88_BOARD_HAUPPAUGE_HVR1100LP :
2006-08-08 09:10:04 -03:00
case CX88_BOARD_HAUPPAUGE_HVR3000 :
2006-09-14 15:41:13 -03:00
case CX88_BOARD_HAUPPAUGE_HVR1300 :
2008-09-04 01:17:33 -03:00
case CX88_BOARD_HAUPPAUGE_HVR4000 :
case CX88_BOARD_HAUPPAUGE_HVR4000LITE :
2009-03-28 14:22:21 -03:00
case CX88_BOARD_HAUPPAUGE_IRONLY :
2005-04-16 15:20:36 -07:00
if ( 0 = = core - > i2c_rc )
2008-04-26 11:55:09 -03:00
hauppauge_eeprom ( core , eeprom ) ;
2005-04-16 15:20:36 -07:00
break ;
2006-01-09 15:25:02 -02:00
case CX88_BOARD_KWORLD_DVBS_100 :
cx_write ( MO_GP0_IO , 0x000007f8 ) ;
cx_write ( MO_GP1_IO , 0x00000001 ) ;
break ;
2008-04-22 14:45:15 -03:00
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO :
/* GPIO0:0 is hooked to demod reset */
/* GPIO0:4 is hooked to xc3028 reset */
cx_write ( MO_GP0_IO , 0x00111100 ) ;
msleep ( 1 ) ;
cx_write ( MO_GP0_IO , 0x00111111 ) ;
break ;
2006-08-10 03:22:21 -03:00
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL :
/* GPIO0:6 is hooked to FX2 reset pin */
cx_set ( MO_GP0_IO , 0x00004040 ) ;
cx_clear ( MO_GP0_IO , 0x00000040 ) ;
msleep ( 1000 ) ;
cx_set ( MO_GP0_IO , 0x00004040 ) ;
/* FALLTHROUGH */
2005-04-16 15:20:36 -07:00
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1 :
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS :
2006-02-28 08:34:59 -03:00
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID :
2005-04-16 15:20:36 -07:00
/* GPIO0:0 is hooked to mt352 reset pin */
cx_set ( MO_GP0_IO , 0x00000101 ) ;
cx_clear ( MO_GP0_IO , 0x00000001 ) ;
msleep ( 1 ) ;
cx_set ( MO_GP0_IO , 0x00000101 ) ;
2006-02-28 08:34:59 -03:00
if ( 0 = = core - > i2c_rc & &
2007-08-15 14:41:57 -03:00
core - > boardnr = = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID )
2006-02-28 08:34:59 -03:00
dvico_fusionhdtv_hybrid_init ( core ) ;
2005-04-16 15:20:36 -07:00
break ;
case CX88_BOARD_KWORLD_DVB_T :
case CX88_BOARD_DNTV_LIVE_DVB_T :
cx_set ( MO_GP0_IO , 0x00000707 ) ;
cx_set ( MO_GP2_IO , 0x00000101 ) ;
cx_clear ( MO_GP2_IO , 0x00000001 ) ;
msleep ( 1 ) ;
cx_clear ( MO_GP0_IO , 0x00000007 ) ;
cx_set ( MO_GP2_IO , 0x00000101 ) ;
break ;
2006-01-09 15:25:35 -02:00
case CX88_BOARD_DNTV_LIVE_DVB_T_PRO :
cx_write ( MO_GP0_IO , 0x00080808 ) ;
break ;
2005-11-08 21:37:04 -08:00
case CX88_BOARD_ATI_HDTVWONDER :
if ( 0 = = core - > i2c_rc ) {
/* enable tuner */
int i ;
2007-03-28 22:37:26 -03:00
static const u8 buffer [ ] [ 2 ] = {
{ 0x10 , 0x12 } ,
{ 0x13 , 0x04 } ,
{ 0x16 , 0x00 } ,
{ 0x14 , 0x04 } ,
{ 0x17 , 0x00 }
} ;
2005-11-08 21:37:04 -08:00
core - > i2c_client . addr = 0x0a ;
2007-03-28 22:37:26 -03:00
for ( i = 0 ; i < ARRAY_SIZE ( buffer ) ; i + + )
if ( 2 ! = i2c_master_send ( & core - > i2c_client ,
buffer [ i ] , 2 ) )
2008-04-22 14:45:29 -03:00
warn_printk ( core , " Unable to enable "
" tuner(%i). \n " , i ) ;
2005-11-08 21:37:04 -08:00
}
break ;
2007-10-19 06:59:33 -03:00
case CX88_BOARD_MSI_TVANYWHERE_MASTER :
{
struct v4l2_priv_tun_config tea5767_cfg ;
struct tea5767_ctrl ctl ;
memset ( & ctl , 0 , sizeof ( ctl ) ) ;
ctl . high_cut = 1 ;
ctl . st_noise = 1 ;
ctl . deemph_75 = 1 ;
ctl . xtal_freq = TEA5767_HIGH_LO_13MHz ;
tea5767_cfg . tuner = TUNER_TEA5767 ;
tea5767_cfg . priv = & ctl ;
2009-03-29 08:26:01 -03:00
call_all ( core , tuner , s_config , & tea5767_cfg ) ;
2008-09-04 17:24:14 -03:00
break ;
2007-10-19 06:59:33 -03:00
}
2008-09-23 15:43:57 -03:00
case CX88_BOARD_TEVII_S420 :
2008-09-04 17:24:14 -03:00
case CX88_BOARD_TEVII_S460 :
2008-09-17 11:30:21 -03:00
case CX88_BOARD_OMICOM_SS4_PCI :
2008-11-09 15:25:31 -03:00
case CX88_BOARD_TBS_8910 :
2008-09-17 11:58:33 -03:00
case CX88_BOARD_TBS_8920 :
2008-11-09 15:26:25 -03:00
case CX88_BOARD_PROF_6200 :
2008-10-08 06:48:08 -03:00
case CX88_BOARD_PROF_7300 :
2008-11-09 15:25:31 -03:00
case CX88_BOARD_SATTRADE_ST4200 :
2009-07-29 19:18:28 -03:00
cx_write ( MO_GP0_IO , 0x8000 ) ;
msleep ( 100 ) ;
2008-09-17 11:58:33 -03:00
cx_write ( MO_SRST_IO , 0 ) ;
2009-07-29 19:18:28 -03:00
msleep ( 10 ) ;
cx_write ( MO_GP0_IO , 0x8080 ) ;
2008-09-17 11:58:33 -03:00
msleep ( 100 ) ;
cx_write ( MO_SRST_IO , 1 ) ;
msleep ( 100 ) ;
break ;
2008-04-26 11:55:09 -03:00
} /*end switch() */
/* Setup tuners */
if ( ( core - > board . radio_type ! = UNSET ) ) {
tun_setup . mode_mask = T_RADIO ;
tun_setup . type = core - > board . radio_type ;
tun_setup . addr = core - > board . radio_addr ;
tun_setup . tuner_callback = cx88_tuner_callback ;
2009-03-29 08:26:01 -03:00
call_all ( core , tuner , s_type_addr , & tun_setup ) ;
2008-04-26 11:55:09 -03:00
mode_mask & = ~ T_RADIO ;
}
if ( core - > board . tuner_type ! = TUNER_ABSENT ) {
tun_setup . mode_mask = mode_mask ;
tun_setup . type = core - > board . tuner_type ;
tun_setup . addr = core - > board . tuner_addr ;
tun_setup . tuner_callback = cx88_tuner_callback ;
2009-03-29 08:26:01 -03:00
call_all ( core , tuner , s_type_addr , & tun_setup ) ;
2008-04-26 11:55:09 -03:00
}
if ( core - > board . tda9887_conf ) {
struct v4l2_priv_tun_config tda9887_cfg ;
tda9887_cfg . tuner = TUNER_TDA9887 ;
tda9887_cfg . priv = & core - > board . tda9887_conf ;
2009-03-29 08:26:01 -03:00
call_all ( core , tuner , s_config , & tda9887_cfg ) ;
2005-04-16 15:20:36 -07:00
}
2008-04-22 14:45:14 -03:00
if ( core - > board . tuner_type = = TUNER_XC2028 ) {
struct v4l2_priv_tun_config xc2028_cfg ;
struct xc2028_ctrl ctl ;
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
/* Fills device-dependent initialization parameters */
cx88_setup_xc3028 ( core , & ctl ) ;
2008-04-22 14:45:14 -03:00
V4L/DVB (7448): Add support for Kworld ATSC 120
This board has a s5h1409 demod, plus a xc30x8 tuner (probably, xc3018).
This patch adds proper support for radio, video, s-video, composite and ATSC.
However, support for radio and video depends on having s5h1409 i2c gate open,
otherwise, xc30x8 chip won't be visible.
For a better support, some rework is needed on cx88 driver, to allow adding
xc30x8 to i2c bus without sending i2c 0 byte reading to 0xc2 address.
Thanks to Vanessa Ezekowitz <vanessaezekowitz@gmail.com> for helping to figure
out the proper parameters for s5h1409 and the GPIO pins used by each
configuration.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-03-27 23:18:30 -03:00
/* Sends parameters to xc2028/3028 tuner */
memset ( & xc2028_cfg , 0 , sizeof ( xc2028_cfg ) ) ;
2008-04-22 14:45:14 -03:00
xc2028_cfg . tuner = TUNER_XC2028 ;
xc2028_cfg . priv = & ctl ;
2008-04-22 14:45:30 -03:00
info_printk ( core , " Asking xc2028/3028 to load firmware %s \n " ,
ctl . fname ) ;
2009-03-29 08:26:01 -03:00
call_all ( core , tuner , s_config , & xc2028_cfg ) ;
2008-04-22 14:45:14 -03:00
}
2009-04-01 03:49:59 -03:00
call_all ( core , tuner , s_standby ) ;
2005-04-16 15:20:36 -07:00
}
/* ------------------------------------------------------------------ */
2007-08-15 14:41:58 -03:00
static int cx88_pci_quirks ( const char * name , struct pci_dev * pci )
{
unsigned int lat = UNSET ;
u8 ctrl = 0 ;
u8 value ;
/* check pci quirks */
if ( pci_pci_problems & PCIPCI_TRITON ) {
printk ( KERN_INFO " %s: quirk: PCIPCI_TRITON -- set TBFX \n " ,
name ) ;
ctrl | = CX88X_EN_TBFX ;
}
if ( pci_pci_problems & PCIPCI_NATOMA ) {
printk ( KERN_INFO " %s: quirk: PCIPCI_NATOMA -- set TBFX \n " ,
name ) ;
ctrl | = CX88X_EN_TBFX ;
}
if ( pci_pci_problems & PCIPCI_VIAETBF ) {
printk ( KERN_INFO " %s: quirk: PCIPCI_VIAETBF -- set TBFX \n " ,
name ) ;
ctrl | = CX88X_EN_TBFX ;
}
if ( pci_pci_problems & PCIPCI_VSFX ) {
printk ( KERN_INFO " %s: quirk: PCIPCI_VSFX -- set VSFX \n " ,
name ) ;
ctrl | = CX88X_EN_VSFX ;
}
# ifdef PCIPCI_ALIMAGIK
if ( pci_pci_problems & PCIPCI_ALIMAGIK ) {
printk ( KERN_INFO " %s: quirk: PCIPCI_ALIMAGIK -- latency fixup \n " ,
name ) ;
lat = 0x0A ;
}
# endif
/* check insmod options */
if ( UNSET ! = latency )
lat = latency ;
/* apply stuff */
if ( ctrl ) {
pci_read_config_byte ( pci , CX88X_DEVCTRL , & value ) ;
value | = ctrl ;
pci_write_config_byte ( pci , CX88X_DEVCTRL , value ) ;
}
if ( UNSET ! = lat ) {
printk ( KERN_INFO " %s: setting pci latency timer to %d \n " ,
name , latency ) ;
pci_write_config_byte ( pci , PCI_LATENCY_TIMER , latency ) ;
}
return 0 ;
}
int cx88_get_resources ( const struct cx88_core * core , struct pci_dev * pci )
{
if ( request_mem_region ( pci_resource_start ( pci , 0 ) ,
pci_resource_len ( pci , 0 ) ,
core - > name ) )
return 0 ;
printk ( KERN_ERR
" %s/%d: Can't get MMIO memory @ 0x%llx, subsystem: %04x:%04x \n " ,
core - > name , PCI_FUNC ( pci - > devfn ) ,
( unsigned long long ) pci_resource_start ( pci , 0 ) ,
pci - > subsystem_vendor , pci - > subsystem_device ) ;
return - EBUSY ;
}
/* Allocate and initialize the cx88 core struct. One should hold the
* devlist mutex before calling this . */
struct cx88_core * cx88_core_create ( struct pci_dev * pci , int nr )
{
struct cx88_core * core ;
int i ;
core = kzalloc ( sizeof ( * core ) , GFP_KERNEL ) ;
2009-03-26 17:44:38 -03:00
if ( core = = NULL )
return NULL ;
2007-08-15 14:41:58 -03:00
atomic_inc ( & core - > refcount ) ;
core - > pci_bus = pci - > bus - > number ;
core - > pci_slot = PCI_SLOT ( pci - > devfn ) ;
2007-08-18 06:57:55 -03:00
core - > pci_irqmask = PCI_INT_RISC_RD_BERRINT | PCI_INT_RISC_WR_BERRINT |
PCI_INT_BRDG_BERRINT | PCI_INT_SRC_DMA_BERRINT |
PCI_INT_DST_DMA_BERRINT | PCI_INT_IPB_DMA_BERRINT ;
2007-08-15 14:41:58 -03:00
mutex_init ( & core - > lock ) ;
core - > nr = nr ;
sprintf ( core - > name , " cx88[%d] " , core - > nr ) ;
2009-03-14 12:40:51 -03:00
strcpy ( core - > v4l2_dev . name , core - > name ) ;
if ( v4l2_device_register ( NULL , & core - > v4l2_dev ) ) {
kfree ( core ) ;
return NULL ;
}
2007-08-15 14:41:58 -03:00
if ( 0 ! = cx88_get_resources ( core , pci ) ) {
2009-03-14 12:40:51 -03:00
v4l2_device_unregister ( & core - > v4l2_dev ) ;
2007-08-15 14:41:58 -03:00
kfree ( core ) ;
return NULL ;
}
/* PCI stuff */
cx88_pci_quirks ( core - > name , pci ) ;
core - > lmmio = ioremap ( pci_resource_start ( pci , 0 ) ,
pci_resource_len ( pci , 0 ) ) ;
core - > bmmio = ( u8 __iomem * ) core - > lmmio ;
2009-03-26 17:44:38 -03:00
if ( core - > lmmio = = NULL ) {
kfree ( core ) ;
return NULL ;
}
2007-08-15 14:41:58 -03:00
/* board config */
core - > boardnr = UNSET ;
if ( card [ core - > nr ] < ARRAY_SIZE ( cx88_boards ) )
core - > boardnr = card [ core - > nr ] ;
for ( i = 0 ; UNSET = = core - > boardnr & & i < ARRAY_SIZE ( cx88_subids ) ; i + + )
if ( pci - > subsystem_vendor = = cx88_subids [ i ] . subvendor & &
pci - > subsystem_device = = cx88_subids [ i ] . subdevice )
core - > boardnr = cx88_subids [ i ] . card ;
if ( UNSET = = core - > boardnr ) {
core - > boardnr = CX88_BOARD_UNKNOWN ;
cx88_card_list ( core , pci ) ;
}
memcpy ( & core - > board , & cx88_boards [ core - > boardnr ] , sizeof ( core - > board ) ) ;
2008-10-21 10:43:10 -03:00
if ( ! core - > board . num_frontends & & ( core - > board . mpeg & CX88_MPEG_DVB ) )
core - > board . num_frontends = 1 ;
2008-10-11 11:05:50 -03:00
info_printk ( core , " subsystem: %04x:%04x, board: %s [card=%d,%s], frontend(s): %d \n " ,
2008-04-22 14:45:29 -03:00
pci - > subsystem_vendor , pci - > subsystem_device , core - > board . name ,
2007-08-15 14:41:58 -03:00
core - > boardnr , card [ core - > nr ] = = core - > boardnr ?
2008-10-11 11:05:50 -03:00
" insmod option " : " autodetected " ,
core - > board . num_frontends ) ;
2007-08-15 14:41:58 -03:00
if ( tuner [ core - > nr ] ! = UNSET )
core - > board . tuner_type = tuner [ core - > nr ] ;
if ( radio [ core - > nr ] ! = UNSET )
core - > board . radio_type = radio [ core - > nr ] ;
2008-04-22 14:45:29 -03:00
info_printk ( core , " TV tuner type %d, Radio tuner type %d \n " ,
core - > board . tuner_type , core - > board . radio_type ) ;
2007-08-15 14:41:58 -03:00
/* init hardware */
cx88_reset ( core ) ;
cx88_card_setup_pre_i2c ( core ) ;
cx88_i2c_init ( core , pci ) ;
2008-02-19 16:22:25 -03:00
/* load tuner module, if needed */
2009-03-29 08:26:01 -03:00
if ( TUNER_ABSENT ! = core - > board . tuner_type ) {
2009-03-29 17:47:30 -03:00
/* Ignore 0x6b and 0x6f on cx88 boards.
* FusionHDTV5 RT Gold has an ir receiver at 0x6b
* and an RTC at 0x6f which can get corrupted if probed . */
static const unsigned short tv_addrs [ ] = {
0x42 , 0x43 , 0x4a , 0x4b , /* tda8290 */
0x60 , 0x61 , 0x62 , 0x63 , 0x64 , 0x65 , 0x66 , 0x67 ,
0x68 , 0x69 , 0x6a , 0x6c , 0x6d , 0x6e ,
I2C_CLIENT_END
} ;
2009-03-29 08:26:01 -03:00
int has_demod = ( core - > board . tda9887_conf & TDA9887_PRESENT ) ;
/* I don't trust the radio_type as is stored in the card
definitions , so we just probe for it .
The radio_type is sometimes missing , or set to UNSET but
later code configures a tea5767 .
*/
2009-04-01 03:57:53 -03:00
v4l2_i2c_new_probed_subdev ( & core - > v4l2_dev , & core - > i2c_adap ,
" tuner " , " tuner " ,
2009-03-29 08:26:01 -03:00
v4l2_i2c_tuner_addrs ( ADDRS_RADIO ) ) ;
if ( has_demod )
2009-04-01 03:57:53 -03:00
v4l2_i2c_new_probed_subdev ( & core - > v4l2_dev ,
& core - > i2c_adap , " tuner " , " tuner " ,
v4l2_i2c_tuner_addrs ( ADDRS_DEMOD ) ) ;
2009-03-29 08:26:01 -03:00
if ( core - > board . tuner_addr = = ADDR_UNSET ) {
2009-04-01 03:57:53 -03:00
v4l2_i2c_new_probed_subdev ( & core - > v4l2_dev ,
& core - > i2c_adap , " tuner " , " tuner " ,
has_demod ? tv_addrs + 4 : tv_addrs ) ;
2009-03-29 08:26:01 -03:00
} else {
2009-04-01 03:57:53 -03:00
v4l2_i2c_new_subdev ( & core - > v4l2_dev , & core - > i2c_adap ,
2009-03-29 08:26:01 -03:00
" tuner " , " tuner " , core - > board . tuner_addr ) ;
}
}
2008-02-19 16:22:25 -03:00
2007-08-15 14:41:58 -03:00
cx88_card_setup ( core ) ;
cx88_ir_init ( core , pci ) ;
return core ;
}