mirror of
				https://github.com/DigitalDevices/dddvb.git
				synced 2025-03-01 10:35:23 +00:00 
			
		
		
		
	cine s2 v7 has TS lines crossed
This commit is contained in:
		| @@ -1223,14 +1223,7 @@ static int tuner_attach_stv6110(struct ddb_input *input, int type) | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| static struct stv0910_cfg stv0910 = { | static struct stv0910_cfg stv0910_p = { | ||||||
| 	.adr      = 0x6c, |  | ||||||
| 	.parallel = 1, |  | ||||||
| 	.rptlvl   = 4, |  | ||||||
| 	.clk      = 30000000, |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| static struct stv0910_cfg stv0910_aa = { |  | ||||||
| 	.adr      = 0x68, | 	.adr      = 0x68, | ||||||
| 	.parallel = 1, | 	.parallel = 1, | ||||||
| 	.rptlvl   = 4, | 	.rptlvl   = 4, | ||||||
| @@ -1241,11 +1234,16 @@ static int demod_attach_stv0910(struct ddb_input *input, int type) | |||||||
| { | { | ||||||
| 	struct i2c_adapter *i2c = &input->port->i2c->adap; | 	struct i2c_adapter *i2c = &input->port->i2c->adap; | ||||||
| 	struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1]; | 	struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1]; | ||||||
|  | 	struct stv0910_cfg cfg = stv0910_p; | ||||||
|  |  | ||||||
| 	dvb->fe = dvb_attach(stv0910_attach, i2c, &stv0910_aa, (input->nr & 1)); | 	if (type) | ||||||
| 	if (!dvb->fe) | 		cfg.parallel = 2; | ||||||
|  | 	dvb->fe = dvb_attach(stv0910_attach, i2c, &cfg, (input->nr & 1)); | ||||||
|  | 	if (!dvb->fe) { | ||||||
|  | 		cfg.adr = 0x6c; | ||||||
| 		dvb->fe = dvb_attach(stv0910_attach, i2c, | 		dvb->fe = dvb_attach(stv0910_attach, i2c, | ||||||
| 				     &stv0910, (input->nr & 1)); | 				     &cfg, (input->nr & 1)); | ||||||
|  | 	} | ||||||
| 	if (!dvb->fe) { | 	if (!dvb->fe) { | ||||||
| 		pr_err("No STV0910 found!\n"); | 		pr_err("No STV0910 found!\n"); | ||||||
| 		return -ENODEV; | 		return -ENODEV; | ||||||
| @@ -1910,12 +1908,18 @@ static int dvb_input_attach(struct ddb_input *input) | |||||||
| 		if (tuner_attach_stv6111(input, 0) < 0) | 		if (tuner_attach_stv6111(input, 0) < 0) | ||||||
| 			return -ENODEV; | 			return -ENODEV; | ||||||
| 		break; | 		break; | ||||||
| 	case DDB_TUNER_DVBS_STV0910_P: | 	case DDB_TUNER_DVBS_STV0910_PR: | ||||||
| 		if (demod_attach_stv0910(input, 1) < 0) | 		if (demod_attach_stv0910(input, 1) < 0) | ||||||
| 			return -ENODEV; | 			return -ENODEV; | ||||||
| 		if (tuner_attach_stv6111(input, 1) < 0) | 		if (tuner_attach_stv6111(input, 1) < 0) | ||||||
| 			return -ENODEV; | 			return -ENODEV; | ||||||
| 		break; | 		break; | ||||||
|  | 	case DDB_TUNER_DVBS_STV0910_P: | ||||||
|  | 		if (demod_attach_stv0910(input, 0) < 0) | ||||||
|  | 			return -ENODEV; | ||||||
|  | 		if (tuner_attach_stv6111(input, 1) < 0) | ||||||
|  | 			return -ENODEV; | ||||||
|  | 		break; | ||||||
| #ifdef CONFIG_DVB_DRXK | #ifdef CONFIG_DVB_DRXK | ||||||
| 	case DDB_TUNER_DVBCT_TR: | 	case DDB_TUNER_DVBCT_TR: | ||||||
| 		if (demod_attach_drxk(input) < 0) | 		if (demod_attach_drxk(input) < 0) | ||||||
| @@ -1933,7 +1937,9 @@ static int dvb_input_attach(struct ddb_input *input) | |||||||
| 	case DDB_TUNER_DVBCT2_SONY_P: | 	case DDB_TUNER_DVBCT2_SONY_P: | ||||||
| 	case DDB_TUNER_DVBC2T2_SONY_P: | 	case DDB_TUNER_DVBC2T2_SONY_P: | ||||||
| 	case DDB_TUNER_ISDBT_SONY_P: | 	case DDB_TUNER_ISDBT_SONY_P: | ||||||
| 		if (!input->port->dev->link[input->port->lnr].info->serial)  | 		if (input->port->dev->link[input->port->lnr].info->ts_quirks & TS_QUIRK_SERIAL)  | ||||||
|  | 			par = 0; | ||||||
|  | 		else | ||||||
| 			par = 1; | 			par = 1; | ||||||
| 	case DDB_TUNER_DVBCT2_SONY: | 	case DDB_TUNER_DVBCT2_SONY: | ||||||
| 	case DDB_TUNER_DVBC2T2_SONY: | 	case DDB_TUNER_DVBC2T2_SONY: | ||||||
| @@ -2292,12 +2298,17 @@ static void ddb_port_probe(struct ddb_port *port) | |||||||
| 	} else if (port_has_stv0900_aa(port, &id)) { | 	} else if (port_has_stv0900_aa(port, &id)) { | ||||||
| 		port->name = "DUAL DVB-S2"; | 		port->name = "DUAL DVB-S2"; | ||||||
| 		port->class = DDB_PORT_TUNER; | 		port->class = DDB_PORT_TUNER; | ||||||
| 		port->type = DDB_TUNER_DVBS_ST_AA; | 		if (id == 0x51) { | ||||||
| 		port->type_name = "DVBS_ST_AA"; | 			if (port->nr == 0 && | ||||||
| 		if (id == 0x51) | 			    dev->link[l].info->ts_quirks & TS_QUIRK_REVERSED) | ||||||
| 			port->type = DDB_TUNER_DVBS_STV0910_P; | 				port->type = DDB_TUNER_DVBS_STV0910_PR; | ||||||
| 		else | 			else | ||||||
|  | 				port->type = DDB_TUNER_DVBS_STV0910_P; | ||||||
|  | 			port->type_name = "DVBS_ST_0910"; | ||||||
|  | 		} else { | ||||||
| 			port->type = DDB_TUNER_DVBS_ST_AA; | 			port->type = DDB_TUNER_DVBS_ST_AA; | ||||||
|  | 			port->type_name = "DVBS_ST_AA"; | ||||||
|  | 		} | ||||||
| 		ddbwritel(dev, I2C_SPEED_100, port->i2c->regs + I2C_TIMING); | 		ddbwritel(dev, I2C_SPEED_100, port->i2c->regs + I2C_TIMING); | ||||||
| 	} else if (port_has_drxks(port)) { | 	} else if (port_has_drxks(port)) { | ||||||
| 		port->name = "DUAL DVB-C/T"; | 		port->name = "DUAL DVB-C/T"; | ||||||
| @@ -4541,7 +4552,7 @@ static struct ddb_info octopus_ct_gtl = { | |||||||
| 	.i2c_mask = 0x0f, | 	.i2c_mask = 0x0f, | ||||||
| 	.board_control = 0xff, | 	.board_control = 0xff, | ||||||
| 	.board_control_2 = 0xf00, | 	.board_control_2 = 0xf00, | ||||||
| 	.serial   = 1, | 	.ts_quirks = TS_QUIRK_SERIAL, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -63,6 +63,7 @@ static void __devexit ddb_remove(struct pci_dev *pdev) | |||||||
| { | { | ||||||
| 	struct ddb *dev = (struct ddb *) pci_get_drvdata(pdev); | 	struct ddb *dev = (struct ddb *) pci_get_drvdata(pdev); | ||||||
|  |  | ||||||
|  | 	ddb_device_destroy(dev); | ||||||
| 	ddb_nsd_detach(dev); | 	ddb_nsd_detach(dev); | ||||||
| 	ddb_ports_detach(dev); | 	ddb_ports_detach(dev); | ||||||
| 	ddb_i2c_release(dev); | 	ddb_i2c_release(dev); | ||||||
| @@ -70,6 +71,7 @@ static void __devexit ddb_remove(struct pci_dev *pdev) | |||||||
| 	if (dev->link[0].info->ns_num) | 	if (dev->link[0].info->ns_num) | ||||||
| 		ddbwritel(dev, 0, ETHER_CONTROL); | 		ddbwritel(dev, 0, ETHER_CONTROL); | ||||||
| 	ddbwritel(dev, 0, INTERRUPT_ENABLE); | 	ddbwritel(dev, 0, INTERRUPT_ENABLE); | ||||||
|  |  | ||||||
| 	ddbwritel(dev, 0, MSI1_ENABLE); | 	ddbwritel(dev, 0, MSI1_ENABLE); | ||||||
| 	if (dev->msi == 2) | 	if (dev->msi == 2) | ||||||
| 		free_irq(dev->pdev->irq + 1, dev); | 		free_irq(dev->pdev->irq + 1, dev); | ||||||
| @@ -80,7 +82,6 @@ static void __devexit ddb_remove(struct pci_dev *pdev) | |||||||
| #endif | #endif | ||||||
| 	ddb_ports_release(dev); | 	ddb_ports_release(dev); | ||||||
| 	ddb_buffers_free(dev); | 	ddb_buffers_free(dev); | ||||||
| 	ddb_device_destroy(dev); |  | ||||||
|  |  | ||||||
| 	ddb_unmap(dev); | 	ddb_unmap(dev); | ||||||
| 	pci_set_drvdata(pdev, 0); | 	pci_set_drvdata(pdev, 0); | ||||||
| @@ -359,6 +360,7 @@ static struct ddb_info ddb_v7 = { | |||||||
| 	.i2c_mask = 0x0f, | 	.i2c_mask = 0x0f, | ||||||
| 	.board_control   = 2, | 	.board_control   = 2, | ||||||
| 	.board_control_2 = 4, | 	.board_control_2 = 4, | ||||||
|  | 	.ts_quirks = TS_QUIRK_REVERSED, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| static struct ddb_info ddb_ctv7 = { | static struct ddb_info ddb_ctv7 = { | ||||||
| @@ -432,7 +434,7 @@ static struct ddb_info ddb_ct_8 = { | |||||||
| 	.i2c_mask = 0x0f, | 	.i2c_mask = 0x0f, | ||||||
| 	.board_control   = 0x0ff, | 	.board_control   = 0x0ff, | ||||||
| 	.board_control_2 = 0xf00, | 	.board_control_2 = 0xf00, | ||||||
| 	.serial   = 1, | 	.ts_quirks = TS_QUIRK_SERIAL, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| static struct ddb_info ddb_mod = { | static struct ddb_info ddb_mod = { | ||||||
|   | |||||||
| @@ -160,7 +160,9 @@ struct ddb_info { | |||||||
| 	u8    ns_num; | 	u8    ns_num; | ||||||
| 	u8    mdio_num; | 	u8    mdio_num; | ||||||
| 	u8    con_clock; /* use a continuous clock */ | 	u8    con_clock; /* use a continuous clock */ | ||||||
| 	u8    serial;    /* override to serial transfer */ | 	u8    ts_quirks; | ||||||
|  | #define TS_QUIRK_SERIAL   1 | ||||||
|  | #define TS_QUIRK_REVERSED 2 | ||||||
| 	struct ddb_regmap *regmap; | 	struct ddb_regmap *regmap; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| @@ -290,6 +292,7 @@ struct ddb_port { | |||||||
| #define DDB_TUNER_MXL5XX         11 | #define DDB_TUNER_MXL5XX         11 | ||||||
| #define DDB_CI_EXTERNAL_XO2      12 | #define DDB_CI_EXTERNAL_XO2      12 | ||||||
| #define DDB_CI_EXTERNAL_XO2_B    13 | #define DDB_CI_EXTERNAL_XO2_B    13 | ||||||
|  | #define DDB_TUNER_DVBS_STV0910_PR 14 | ||||||
|  |  | ||||||
| #define DDB_TUNER_XO2            32 | #define DDB_TUNER_XO2            32 | ||||||
| #define DDB_TUNER_DVBS_STV0910   (DDB_TUNER_XO2 + 0) | #define DDB_TUNER_DVBS_STV0910   (DDB_TUNER_XO2 + 0) | ||||||
|   | |||||||
| @@ -114,15 +114,15 @@ static int __exit octonet_remove(struct platform_device *pdev) | |||||||
| 	dev = platform_get_drvdata(pdev); | 	dev = platform_get_drvdata(pdev); | ||||||
|  |  | ||||||
| 	ddb_device_destroy(dev); | 	ddb_device_destroy(dev); | ||||||
|  |  | ||||||
| 	ddb_nsd_detach(dev); | 	ddb_nsd_detach(dev); | ||||||
| 	ddb_ports_detach(dev); | 	ddb_ports_detach(dev); | ||||||
| 	ddb_i2c_release(dev); | 	ddb_i2c_release(dev); | ||||||
|  |  | ||||||
| 	ddbwritel(dev, 0, ETHER_CONTROL); | 	if (dev->link[0].info->ns_num) | ||||||
|  | 		ddbwritel(dev, 0, ETHER_CONTROL); | ||||||
| 	ddbwritel(dev, 0, INTERRUPT_ENABLE); | 	ddbwritel(dev, 0, INTERRUPT_ENABLE); | ||||||
| 	free_irq(platform_get_irq(dev->pfdev, 0), dev); |  | ||||||
|  |  | ||||||
|  | 	free_irq(platform_get_irq(dev->pfdev, 0), dev); | ||||||
| 	ddb_ports_release(dev); | 	ddb_ports_release(dev); | ||||||
| 	octonet_unmap(dev); | 	octonet_unmap(dev); | ||||||
| 	platform_set_drvdata(pdev, 0); | 	platform_set_drvdata(pdev, 0); | ||||||
|   | |||||||
| @@ -1898,7 +1898,7 @@ static struct dvb_frontend_ops common_ops_2843 = { | |||||||
| 			FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | | 			FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | | ||||||
| 			FE_CAN_TRANSMISSION_MODE_AUTO | | 			FE_CAN_TRANSMISSION_MODE_AUTO | | ||||||
| 			FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO | | 			FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO | | ||||||
| 			FE_CAN_RECOVER | FE_CAN_MUTE_TS | 			FE_CAN_RECOVER | FE_CAN_MUTE_TS | FE_CAN_2G_MODULATION | ||||||
| 	}, | 	}, | ||||||
| 	.release = release, | 	.release = release, | ||||||
| 	.sleep = sleep, | 	.sleep = sleep, | ||||||
| @@ -1936,7 +1936,7 @@ static struct dvb_frontend_ops common_ops_2837 = { | |||||||
| 			FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | | 			FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | | ||||||
| 			FE_CAN_TRANSMISSION_MODE_AUTO | | 			FE_CAN_TRANSMISSION_MODE_AUTO | | ||||||
| 			FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO | | 			FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO | | ||||||
| 			FE_CAN_RECOVER | FE_CAN_MUTE_TS | 			FE_CAN_RECOVER | FE_CAN_MUTE_TS | FE_CAN_2G_MODULATION | ||||||
| 	}, | 	}, | ||||||
| 	.release = release, | 	.release = release, | ||||||
| 	.sleep = sleep, | 	.sleep = sleep, | ||||||
| @@ -1966,13 +1966,13 @@ static struct dvb_frontend_ops common_ops_2838 = { | |||||||
| 		.frequency_max = 865000000, | 		.frequency_max = 865000000, | ||||||
| 		.symbol_rate_min = 870000, | 		.symbol_rate_min = 870000, | ||||||
| 		.symbol_rate_max = 11700000, | 		.symbol_rate_max = 11700000, | ||||||
| 		.caps = FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO | | 		.caps = FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO | | ||||||
| 			FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | | 			FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | | ||||||
| 			FE_CAN_FEC_4_5 | | 			FE_CAN_FEC_4_5 | | ||||||
| 			FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | | 			FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | | ||||||
| 			FE_CAN_TRANSMISSION_MODE_AUTO | | 			FE_CAN_TRANSMISSION_MODE_AUTO | | ||||||
| 			FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO | | 			FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO | | ||||||
| 			FE_CAN_RECOVER | FE_CAN_MUTE_TS | 			FE_CAN_RECOVER | FE_CAN_MUTE_TS | FE_CAN_2G_MODULATION | ||||||
| 	}, | 	}, | ||||||
| 	.release = release, | 	.release = release, | ||||||
| 	.sleep = sleep, | 	.sleep = sleep, | ||||||
|   | |||||||
| @@ -103,6 +103,7 @@ struct stv { | |||||||
| 	u16                  regoff; | 	u16                  regoff; | ||||||
| 	u8                   i2crpt; | 	u8                   i2crpt; | ||||||
| 	u8                   tscfgh; | 	u8                   tscfgh; | ||||||
|  | 	u8                   tsgeneral; | ||||||
| 	u8                   tsspeed; | 	u8                   tsspeed; | ||||||
| 	unsigned long        tune_time; | 	unsigned long        tune_time; | ||||||
|  |  | ||||||
| @@ -932,7 +933,7 @@ static int probe(struct stv *state) | |||||||
|  |  | ||||||
| 	if (id != 0x51) | 	if (id != 0x51) | ||||||
| 		return -EINVAL; | 		return -EINVAL; | ||||||
| 	pr_info("stv0910: found STV0910 id=0x%02x\n", id); | 	/* pr_info("stv0910: found STV0910 id=0x%02x\n", id); */ | ||||||
|  |  | ||||||
| 	 /* Configure the I2C repeater to off */ | 	 /* Configure the I2C repeater to off */ | ||||||
| 	write_reg(state, RSTV0910_P1_I2CRPT, 0x24); | 	write_reg(state, RSTV0910_P1_I2CRPT, 0x24); | ||||||
| @@ -944,7 +945,7 @@ static int probe(struct stv *state) | |||||||
| 	write_reg(state, RSTV0910_OUTCFG,    0x00);  /* OUTCFG */ | 	write_reg(state, RSTV0910_OUTCFG,    0x00);  /* OUTCFG */ | ||||||
| 	write_reg(state, RSTV0910_PADCFG,    0x05);  /* RF AGC Pads Dev = 05 */ | 	write_reg(state, RSTV0910_PADCFG,    0x05);  /* RF AGC Pads Dev = 05 */ | ||||||
| 	write_reg(state, RSTV0910_SYNTCTRL,  0x02);  /* SYNTCTRL */ | 	write_reg(state, RSTV0910_SYNTCTRL,  0x02);  /* SYNTCTRL */ | ||||||
| 	write_reg(state, RSTV0910_TSGENERAL, 0x00);  /* TSGENERAL */ | 	write_reg(state, RSTV0910_TSGENERAL, state->tsgeneral);  /* TSGENERAL */ | ||||||
| 	write_reg(state, RSTV0910_CFGEXT,    0x02);  /* CFGEXT */ | 	write_reg(state, RSTV0910_CFGEXT,    0x02);  /* CFGEXT */ | ||||||
| 	write_reg(state, RSTV0910_GENCFG,    0x15);  /* GENCFG */ | 	write_reg(state, RSTV0910_GENCFG,    0x15);  /* GENCFG */ | ||||||
|  |  | ||||||
| @@ -1359,6 +1360,7 @@ struct dvb_frontend *stv0910_attach(struct i2c_adapter *i2c, | |||||||
| 		return NULL; | 		return NULL; | ||||||
|  |  | ||||||
| 	state->tscfgh = 0x20 | (cfg->parallel ? 0 : 0x40); | 	state->tscfgh = 0x20 | (cfg->parallel ? 0 : 0x40); | ||||||
|  | 	state->tsgeneral = (cfg->parallel == 2) ? 0x02 : 0x00; | ||||||
| 	state->i2crpt = 0x0A | ((cfg->rptlvl & 0x07) << 4); | 	state->i2crpt = 0x0A | ((cfg->rptlvl & 0x07) << 4); | ||||||
| 	state->tsspeed = 0x40; | 	state->tsspeed = 0x40; | ||||||
| 	state->nr = nr; | 	state->nr = nr; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user