You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							94 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							94 lines
						
					
					
						
							3.0 KiB
						
					
					
				| From 4bbe1b749c6f01a7a2648714f195802517e138ed Mon Sep 17 00:00:00 2001 | |
| From: Athanasios Oikonomou <athoik@gmail.com> | |
| Date: Sat, 5 Mar 2016 00:32:57 +0200 | |
| Subject: [PATCH] STV: Add PLS support | |
| 
 | |
| 
 | |
| diff --git a/drivers/media/dvb-frontends/stv0900_core.c b/drivers/media/dvb-frontends/stv0900_core.c | |
| index fe31dd5..3a5df06 100644 | |
| --- a/drivers/media/dvb-frontends/stv0900_core.c | |
| +++ b/drivers/media/dvb-frontends/stv0900_core.c | |
| @@ -1554,12 +1554,25 @@ static int stv0900_status(struct stv0900_internal *intp, | |
|  	return locked; | |
|  } | |
|   | |
| +static int stv0900_set_pls(struct stv0900_internal *intp, | |
| +				enum fe_stv0900_demod_num demod, u8 pls_mode, u32 pls_code) | |
| +{ | |
| +	enum fe_stv0900_error error = STV0900_NO_ERROR; | |
| + | |
| +	dprintk("Set PLS code %d (mode %d)", pls_code, pls_mode); | |
| +	stv0900_write_reg(intp, PLROOT2, (pls_mode<<2) | (pls_code>>16)); | |
| +	stv0900_write_reg(intp, PLROOT1, pls_code>>8); | |
| +	stv0900_write_reg(intp, PLROOT0, pls_code); | |
| + | |
| +	return error; | |
| +} | |
| + | |
|  static int stv0900_set_mis(struct stv0900_internal *intp, | |
|  				enum fe_stv0900_demod_num demod, int mis) | |
|  { | |
|  	dprintk("%s\n", __func__); | |
|   | |
| -	if (mis < 0 || mis > 255) { | |
| +	if (mis == NO_STREAM_ID_FILTER) { | |
|  		dprintk("Disable MIS filtering\n"); | |
|  		stv0900_write_bits(intp, FILTER_EN, 0); | |
|  	} else { | |
| @@ -1593,6 +1606,7 @@ static enum dvbfe_search stv0900_search(struct dvb_frontend *fe) | |
|  	if (state->config->set_ts_params) | |
|  		state->config->set_ts_params(fe, 0); | |
|   | |
| +	stv0900_set_pls(intp, demod, (c->stream_id>>26) & 0x3, (c->stream_id>>8) & 0x3FFFF); | |
|  	stv0900_set_mis(intp, demod, c->stream_id); | |
|   | |
|  	p_result.locked = FALSE; | |
| diff --git a/drivers/media/dvb-frontends/stv090x.c b/drivers/media/dvb-frontends/stv090x.c | |
| index ce99b9d..264c4b8 100644 | |
| --- a/drivers/media/dvb-frontends/stv090x.c | |
| +++ b/drivers/media/dvb-frontends/stv090x.c | |
| @@ -3429,18 +3429,40 @@ err: | |
|  	return -1; | |
|  } | |
|   | |
| +static int stv090x_set_pls(struct stv090x_state *state, u8 pls_mode, u32 pls_code) | |
| +{ | |
| +	if (pls_mode == 0 && pls_code == 0) | |
| +		pls_code = 1; | |
| +	pls_mode &= 0x03; | |
| +	pls_code &= 0x3FFFF; | |
| + | |
| +	dprintk(FE_DEBUG, 1, "Set PLS code %d (mode %d)", pls_code, pls_mode); | |
| +	if (STV090x_WRITE_DEMOD(state, PLROOT2, (pls_mode<<2) | (pls_code>>16)) < 0) | |
| +		goto err; | |
| +	if (STV090x_WRITE_DEMOD(state, PLROOT1, pls_code>>8) < 0) | |
| +		goto err; | |
| +	if (STV090x_WRITE_DEMOD(state, PLROOT0, pls_code) < 0) | |
| +		goto err; | |
| +	return 0; | |
| +err: | |
| +	dprintk(FE_ERROR, 1, "I/O error"); | |
| +	return -1; | |
| +} | |
| + | |
|  static int stv090x_set_mis(struct stv090x_state *state, int mis) | |
|  { | |
|  	u32 reg; | |
|   | |
| -	if (mis < 0 || mis > 255) { | |
| +	if (mis == NO_STREAM_ID_FILTER) { | |
|  		dprintk(FE_DEBUG, 1, "Disable MIS filtering"); | |
| +		stv090x_set_pls(state, 0, 0); | |
|  		reg = STV090x_READ_DEMOD(state, PDELCTRL1); | |
|  		STV090x_SETFIELD_Px(reg, FILTER_EN_FIELD, 0x00); | |
|  		if (STV090x_WRITE_DEMOD(state, PDELCTRL1, reg) < 0) | |
|  			goto err; | |
|  	} else { | |
|  		dprintk(FE_DEBUG, 1, "Enable MIS filtering - %d", mis); | |
| +		stv090x_set_pls(state, (mis>>26) & 0x3, (mis>>8) & 0x3FFFF); | |
|  		reg = STV090x_READ_DEMOD(state, PDELCTRL1); | |
|  		STV090x_SETFIELD_Px(reg, FILTER_EN_FIELD, 0x01); | |
|  		if (STV090x_WRITE_DEMOD(state, PDELCTRL1, reg) < 0) | |
| --  | |
| 2.1.4 | |
| 
 | |
| 
 |