[media] cx88: add support for TeVii S464 PCI card
The card uses ds3000 demod from Montage. Signed-off-by: Igor M. Liplianin <liplianin@me.by> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
		
					parent
					
						
							
								dcc8a12223
							
						
					
				
			
			
				commit
				
					
						0cb73639cf
					
				
			
		
					 6 changed files with 46 additions and 0 deletions
				
			
		|  | @ -982,6 +982,8 @@ static int ds3000_set_frontend(struct dvb_frontend *fe, | ||||||
| 
 | 
 | ||||||
| 	dprintk("%s() ", __func__); | 	dprintk("%s() ", __func__); | ||||||
| 
 | 
 | ||||||
|  | 	if (state->config->set_ts_params) | ||||||
|  | 		state->config->set_ts_params(fe, 0); | ||||||
| 	/* Tune */ | 	/* Tune */ | ||||||
| 	/* unknown */ | 	/* unknown */ | ||||||
| 	ds3000_tuner_writereg(state, 0x07, 0x02); | 	ds3000_tuner_writereg(state, 0x07, 0x02); | ||||||
|  |  | ||||||
|  | @ -28,6 +28,8 @@ struct ds3000_config { | ||||||
| 	/* the demodulator's i2c address */ | 	/* the demodulator's i2c address */ | ||||||
| 	u8 demod_address; | 	u8 demod_address; | ||||||
| 	u8 ci_mode; | 	u8 ci_mode; | ||||||
|  | 	/* Set device param to start dma */ | ||||||
|  | 	int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #if defined(CONFIG_DVB_DS3000) || \ | #if defined(CONFIG_DVB_DS3000) || \ | ||||||
|  |  | ||||||
|  | @ -1953,6 +1953,18 @@ static const struct cx88_board cx88_boards[] = { | ||||||
| 		} }, | 		} }, | ||||||
| 		.mpeg           = CX88_MPEG_DVB, | 		.mpeg           = CX88_MPEG_DVB, | ||||||
| 	}, | 	}, | ||||||
|  | 	[CX88_BOARD_TEVII_S464] = { | ||||||
|  | 		.name           = "TeVii S464 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, | ||||||
|  | 	}, | ||||||
| 	[CX88_BOARD_OMICOM_SS4_PCI] = { | 	[CX88_BOARD_OMICOM_SS4_PCI] = { | ||||||
| 		.name           = "Omicom SS4 DVB-S/S2 PCI", | 		.name           = "Omicom SS4 DVB-S/S2 PCI", | ||||||
| 		.tuner_type     = UNSET, | 		.tuner_type     = UNSET, | ||||||
|  | @ -2528,6 +2540,10 @@ static const struct cx88_subid cx88_subids[] = { | ||||||
| 		.subvendor = 0xd460, | 		.subvendor = 0xd460, | ||||||
| 		.subdevice = 0x9022, | 		.subdevice = 0x9022, | ||||||
| 		.card      = CX88_BOARD_TEVII_S460, | 		.card      = CX88_BOARD_TEVII_S460, | ||||||
|  | 	}, { | ||||||
|  | 		.subvendor = 0xd464, | ||||||
|  | 		.subdevice = 0x9022, | ||||||
|  | 		.card      = CX88_BOARD_TEVII_S464, | ||||||
| 	}, { | 	}, { | ||||||
| 		.subvendor = 0xA044, | 		.subvendor = 0xA044, | ||||||
| 		.subdevice = 0x2011, | 		.subdevice = 0x2011, | ||||||
|  | @ -3286,6 +3302,7 @@ static void cx88_card_setup(struct cx88_core *core) | ||||||
| 	} | 	} | ||||||
| 	case  CX88_BOARD_TEVII_S420: | 	case  CX88_BOARD_TEVII_S420: | ||||||
| 	case  CX88_BOARD_TEVII_S460: | 	case  CX88_BOARD_TEVII_S460: | ||||||
|  | 	case  CX88_BOARD_TEVII_S464: | ||||||
| 	case  CX88_BOARD_OMICOM_SS4_PCI: | 	case  CX88_BOARD_OMICOM_SS4_PCI: | ||||||
| 	case  CX88_BOARD_TBS_8910: | 	case  CX88_BOARD_TBS_8910: | ||||||
| 	case  CX88_BOARD_TBS_8920: | 	case  CX88_BOARD_TBS_8920: | ||||||
|  |  | ||||||
|  | @ -57,6 +57,7 @@ | ||||||
| #include "stb6100.h" | #include "stb6100.h" | ||||||
| #include "stb6100_proc.h" | #include "stb6100_proc.h" | ||||||
| #include "mb86a16.h" | #include "mb86a16.h" | ||||||
|  | #include "ds3000.h" | ||||||
| 
 | 
 | ||||||
| MODULE_DESCRIPTION("driver for cx2388x based DVB cards"); | MODULE_DESCRIPTION("driver for cx2388x based DVB cards"); | ||||||
| MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>"); | MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>"); | ||||||
|  | @ -648,6 +649,20 @@ static const struct cx24116_config tevii_s460_config = { | ||||||
| 	.reset_device  = cx24116_reset_device, | 	.reset_device  = cx24116_reset_device, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static int ds3000_set_ts_param(struct dvb_frontend *fe, | ||||||
|  | 	int is_punctured) | ||||||
|  | { | ||||||
|  | 	struct cx8802_dev *dev = fe->dvb->priv; | ||||||
|  | 	dev->ts_gen_cntrl = 4; | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static struct ds3000_config tevii_ds3000_config = { | ||||||
|  | 	.demod_address = 0x68, | ||||||
|  | 	.set_ts_params = ds3000_set_ts_param, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static const struct stv0900_config prof_7301_stv0900_config = { | static const struct stv0900_config prof_7301_stv0900_config = { | ||||||
| 	.demod_address = 0x6a, | 	.demod_address = 0x6a, | ||||||
| /*	demod_mode = 0,*/ | /*	demod_mode = 0,*/ | ||||||
|  | @ -1381,6 +1396,14 @@ static int dvb_register(struct cx8802_dev *dev) | ||||||
| 		if (fe0->dvb.frontend != NULL) | 		if (fe0->dvb.frontend != NULL) | ||||||
| 			fe0->dvb.frontend->ops.set_voltage = tevii_dvbs_set_voltage; | 			fe0->dvb.frontend->ops.set_voltage = tevii_dvbs_set_voltage; | ||||||
| 		break; | 		break; | ||||||
|  | 	case CX88_BOARD_TEVII_S464: | ||||||
|  | 		fe0->dvb.frontend = dvb_attach(ds3000_attach, | ||||||
|  | 						&tevii_ds3000_config, | ||||||
|  | 						&core->i2c_adap); | ||||||
|  | 		if (fe0->dvb.frontend != NULL) | ||||||
|  | 			fe0->dvb.frontend->ops.set_voltage = | ||||||
|  | 							tevii_dvbs_set_voltage; | ||||||
|  | 		break; | ||||||
| 	case CX88_BOARD_OMICOM_SS4_PCI: | 	case CX88_BOARD_OMICOM_SS4_PCI: | ||||||
| 	case CX88_BOARD_TBS_8920: | 	case CX88_BOARD_TBS_8920: | ||||||
| 	case CX88_BOARD_PROF_7300: | 	case CX88_BOARD_PROF_7300: | ||||||
|  |  | ||||||
|  | @ -373,6 +373,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | ||||||
| 		ir_codes = RC_MAP_TBS_NEC; | 		ir_codes = RC_MAP_TBS_NEC; | ||||||
| 		ir->sampling = 0xff00; /* address */ | 		ir->sampling = 0xff00; /* address */ | ||||||
| 		break; | 		break; | ||||||
|  | 	case CX88_BOARD_TEVII_S464: | ||||||
| 	case CX88_BOARD_TEVII_S460: | 	case CX88_BOARD_TEVII_S460: | ||||||
| 	case CX88_BOARD_TEVII_S420: | 	case CX88_BOARD_TEVII_S420: | ||||||
| 		ir_codes = RC_MAP_TEVII_NEC; | 		ir_codes = RC_MAP_TEVII_NEC; | ||||||
|  |  | ||||||
|  | @ -241,6 +241,7 @@ extern const struct sram_channel const cx88_sram_channels[]; | ||||||
| #define CX88_BOARD_PROF_7301               83 | #define CX88_BOARD_PROF_7301               83 | ||||||
| #define CX88_BOARD_SAMSUNG_SMT_7020        84 | #define CX88_BOARD_SAMSUNG_SMT_7020        84 | ||||||
| #define CX88_BOARD_TWINHAN_VP1027_DVBS     85 | #define CX88_BOARD_TWINHAN_VP1027_DVBS     85 | ||||||
|  | #define CX88_BOARD_TEVII_S464              86 | ||||||
| 
 | 
 | ||||||
| enum cx88_itype { | enum cx88_itype { | ||||||
| 	CX88_VMUX_COMPOSITE1 = 1, | 	CX88_VMUX_COMPOSITE1 = 1, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Igor M. Liplianin
				Igor M. Liplianin