Re: [PATCH v4 16/47] [media] tuner-xc2028: use DVBv5 parameters on set_params()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02-01-2012 17:32, Gianluca Gennari wrote:
> Il 24/12/2011 16:50, Mauro Carvalho Chehab ha scritto:
>> Instead of using DVBv3 parameters, rely on DVBv5 parameters to
>> set the tuner.
>>
>> Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>
>> ---
>>  drivers/media/common/tuners/tuner-xc2028.c |   83 ++++++++++++----------------
>>  1 files changed, 36 insertions(+), 47 deletions(-)
>>
>> diff --git a/drivers/media/common/tuners/tuner-xc2028.c b/drivers/media/common/tuners/tuner-xc2028.c
>> index e531267..8c0dc6a1 100644
>> --- a/drivers/media/common/tuners/tuner-xc2028.c
>> +++ b/drivers/media/common/tuners/tuner-xc2028.c
>> @@ -1087,65 +1087,26 @@ static int xc2028_set_analog_freq(struct dvb_frontend *fe,
>>  static int xc2028_set_params(struct dvb_frontend *fe,
>>  			     struct dvb_frontend_parameters *p)
>>  {
>> +	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
>> +	u32 delsys = c->delivery_system;
>> +	u32 bw = c->bandwidth_hz;
>>  	struct xc2028_data *priv = fe->tuner_priv;
>>  	unsigned int       type=0;
>> -	fe_bandwidth_t     bw = BANDWIDTH_8_MHZ;
>>  	u16                demod = 0;
>>  
>>  	tuner_dbg("%s called\n", __func__);
>>  
>> -	switch(fe->ops.info.type) {
>> -	case FE_OFDM:
>> -		bw = p->u.ofdm.bandwidth;
>> +	switch (delsys) {
>> +	case SYS_DVBT:
>> +	case SYS_DVBT2:
>>  		/*
>>  		 * The only countries with 6MHz seem to be Taiwan/Uruguay.
>>  		 * Both seem to require QAM firmware for OFDM decoding
>>  		 * Tested in Taiwan by Terry Wu <terrywu2009@xxxxxxxxx>
>>  		 */
>> -		if (bw == BANDWIDTH_6_MHZ)
>> +		if (bw <= 6000000)
>>  			type |= QAM;
>> -		break;
>> -	case FE_ATSC:
>> -		bw = BANDWIDTH_6_MHZ;
>> -		/* The only ATSC firmware (at least on v2.7) is D2633 */
>> -		type |= ATSC | D2633;
>> -		break;
>> -	/* DVB-S and pure QAM (FE_QAM) are not supported */
>> -	default:
>> -		return -EINVAL;
>> -	}
>> -
>> -	switch (bw) {
>> -	case BANDWIDTH_8_MHZ:
>> -		if (p->frequency < 470000000)
>> -			priv->ctrl.vhfbw7 = 0;
>> -		else
>> -			priv->ctrl.uhfbw8 = 1;
>> -		type |= (priv->ctrl.vhfbw7 && priv->ctrl.uhfbw8) ? DTV78 : DTV8;
>> -		type |= F8MHZ;
>> -		break;
>> -	case BANDWIDTH_7_MHZ:
>> -		if (p->frequency < 470000000)
>> -			priv->ctrl.vhfbw7 = 1;
>> -		else
>> -			priv->ctrl.uhfbw8 = 0;
>> -		type |= (priv->ctrl.vhfbw7 && priv->ctrl.uhfbw8) ? DTV78 : DTV7;
>> -		type |= F8MHZ;
>> -		break;
>> -	case BANDWIDTH_6_MHZ:
>> -		type |= DTV6;
>> -		priv->ctrl.vhfbw7 = 0;
>> -		priv->ctrl.uhfbw8 = 0;
>> -		break;
>> -	default:
>> -		tuner_err("error: bandwidth not supported.\n");
>> -	};
>>  
>> -	/*
>> -	  Selects between D2633 or D2620 firmware.
>> -	  It doesn't make sense for ATSC, since it should be D2633 on all cases
>> -	 */
>> -	if (fe->ops.info.type != FE_ATSC) {
>>  		switch (priv->ctrl.type) {
>>  		case XC2028_D2633:
>>  			type |= D2633;
>> @@ -1161,6 +1122,34 @@ static int xc2028_set_params(struct dvb_frontend *fe,
>>  			else
>>  				type |= D2620;
>>  		}
>> +		break;
>> +	case SYS_ATSC:
>> +		/* The only ATSC firmware (at least on v2.7) is D2633 */
>> +		type |= ATSC | D2633;
>> +		break;
>> +	/* DVB-S and pure QAM (FE_QAM) are not supported */
>> +	default:
>> +		return -EINVAL;
>> +	}
>> +
>> +	if (bw <= 6000000) {
>> +		type |= DTV6;
>> +		priv->ctrl.vhfbw7 = 0;
>> +		priv->ctrl.uhfbw8 = 0;
>> +	} else if (bw <= 7000000) {
>> +		if (c->frequency < 470000000)
>> +			priv->ctrl.vhfbw7 = 1;
>> +		else
>> +			priv->ctrl.uhfbw8 = 0;
>> +		type |= (priv->ctrl.vhfbw7 && priv->ctrl.uhfbw8) ? DTV78 : DTV7;
>> +		type |= F8MHZ;
>> +	} else {
>> +		if (c->frequency < 470000000)
>> +			priv->ctrl.vhfbw7 = 0;
>> +		else
>> +			priv->ctrl.uhfbw8 = 1;
>> +		type |= (priv->ctrl.vhfbw7 && priv->ctrl.uhfbw8) ? DTV78 : DTV8;
>> +		type |= F8MHZ;
>>  	}
>>  
>>  	/* All S-code tables need a 200kHz shift */
>> @@ -1185,7 +1174,7 @@ static int xc2028_set_params(struct dvb_frontend *fe,
>>  		 */
>>  	}
>>  
>> -	return generic_set_freq(fe, p->frequency,
>> +	return generic_set_freq(fe, c->frequency,
>>  				V4L2_TUNER_DIGITAL_TV, type, 0, demod);
>>  }
>>  
> 
> Hi Mauro,
> I've tested the new media_build tree with the DVBv5 modifications on my
> Terratec Cinergy Hybrid T USB XS (0ccd:0042).
> 
> The card works fine, but there is small issue: with the old code the
> BASE firmware was loaded only 1 time, now it seems to be loaded each
> time a new frequency is tuned (forcing reload of the other firmwares too).
> 
> This is a log of the firmware loads after some channel surfing:
> 
> OLD CODE:
> 
> [ 8701.753768] xc2028 0-0061: Loading firmware for type=BASE F8MHZ MTS
> (7), id 0000000000000000.
> [ 8702.804153] xc2028 0-0061: Loading firmware for type=D2633 DTV7 (90),
> id 0000000000000000.
> [ 8702.819274] xc2028 0-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78
> DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
> [ 8758.361730] xc2028 0-0061: Loading firmware for type=D2633 DTV78
> (110), id 0000000000000000.
> [ 8758.376951] xc2028 0-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78
> DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
> 
> (note that the first frequency was in VHF band, then I switched to a new
> frequency in UHF band, so the DTV78 firmware was loaded)
> 
> NEW CODE:
> 
> [19398.450453] xc2028 0-0061: Loading firmware for type=BASE F8MHZ MTS
> (7), id 0000000000000000.
> [19399.563210] xc2028 0-0061: Loading firmware for type=D2633 DTV8
> (210), id 0000000000000000.
> [19399.579467] xc2028 0-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78
> DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
> [19458.001144] xc2028 0-0061: Loading firmware for type=BASE F8MHZ MTS
> (7), id 0000000000000000.
> [19459.084473] xc2028 0-0061: Loading firmware for type=D2633 DTV8
> (210), id 0000000000000000.
> [19459.100183] xc2028 0-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78
> DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
> [19471.695347] xc2028 0-0061: Loading firmware for type=BASE F8MHZ MTS
> (7), id 0000000000000000.
> [19472.763449] xc2028 0-0061: Loading firmware for type=D2633 DTV8
> (210), id 0000000000000000.
> [19472.780660] xc2028 0-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78
> DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
> [19497.928003] xc2028 0-0061: Loading firmware for type=BASE F8MHZ MTS
> (7), id 0000000000000000.
> [19498.999729] xc2028 0-0061: Loading firmware for type=D2633 DTV8
> (210), id 0000000000000000.
> [19499.015212] xc2028 0-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78
> DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
> [19510.258833] xc2028 0-0061: Loading firmware for type=BASE F8MHZ MTS
> (7), id 0000000000000000.
> [19511.346135] xc2028 0-0061: Loading firmware for type=D2633 DTV78
> (110), id 0000000000000000.
> [19511.361506] xc2028 0-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78
> DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
> [19523.956877] xc2028 0-0061: Loading firmware for type=BASE F8MHZ MTS
> (7), id 0000000000000000.
> [19525.028394] xc2028 0-0061: Loading firmware for type=D2633 DTV78
> (110), id 0000000000000000.
> [19525.044622] xc2028 0-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78
> DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
> [19538.526806] xc2028 0-0061: Loading firmware for type=BASE F8MHZ MTS
> (7), id 0000000000000000.
> [19539.602083] xc2028 0-0061: Loading firmware for type=D2633 DTV78
> (110), id 0000000000000000.
> [19539.617613] xc2028 0-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78
> DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
> 
> (here I started with a UHF frequency, but each time a new frequency is
> requested all firmwares are loaded anyway, starting from the BASE one).

Weird. This patch preserves the logic that decides what firmware should be
used.

That's said, maybe the driver should just use DTV78 firmwwares on all cases.

On what Country do you live?


> 
> Best regards,
> Gianluca Gennari
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux