Re: [PATCH 2/4] Modifications to the driver mb86a20s

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

 



Em 13-05-2011 04:08, Manoel PN escreveu:
> This patch implements mb86a20s_read_snr and adds mb86a20s_read_ber and mb86a20s_read_ucblocks both without practical utility but that programs as dvbsnoop need.

Same as the prev. patch: break into 75 columns max, and you don't need
to use "This patch".
> 
> Signed-off-by: Manoel Pinheiro <pinusdtv@xxxxxxxxxxx>
> 
 
> diff --git a/drivers/media/dvb/frontends/mb86a20s.c b/drivers/media/dvb/frontends/mb86a20s.c
> index 0f867a5..0de4abf 100644
> --- a/drivers/media/dvb/frontends/mb86a20s.c
> +++ b/drivers/media/dvb/frontends/mb86a20s.c
> @@ -411,6 +411,56 @@ err:
>  	return rc;
>  }
>  
> +static int mb86a20s_read_snr(struct dvb_frontend *fe, u16 *snr)
> +{
> +	struct mb86a20s_state *state = fe->demodulator_priv;
> +	int i, cnr, val, val2;
> +
> +	for (i = 0; i < 30; i++) {
> +		if (mb86a20s_readreg(state, 0x0a) >= 2)
> +			val = mb86a20s_readreg(state, 0x45); /* read cnr_flag */
> +		else
> +			val = -1;
> +		if (val > 0 && ((val >> 6) & 1) != 0) {
> +			val2 = mb86a20s_readreg(state, 0x46);
> +			val = mb86a20s_readreg(state, 0x47);
> +			if (val2 >=0 && val >= 0) {
> +				cnr = (val2 << 0x08) | val;
> +				if (cnr > 0x4cc0) cnr = 0x4cc0;
> +				val = ((0x4cc0 - cnr) * 10000) / 0x4cc0;
> +				val2 = (65535 * val) / 10000;
> +				*snr = (u16)val2;
> +				dprintk("snr=%i, cnr=%i, val=%i\n", val2, cnr, val);
> +				/* reset cnr_counter */
> +				val = mb86a20s_readreg(state, 0x45);
> +				if (val >= 0)
> +				{
> +					mb86a20s_writereg(state, 0x45, val | 0x10);
> +					msleep(5);
> +					mb86a20s_writereg(state, 0x45, val & 0x6f); /* FIXME: or 0xef ? */
> +				}
> +				return 0;
> +			}
> +		}
> +		msleep(30);
> +	}
> +	*snr = 0;
> +	dprintk("no signal!\n");
> +	return 0;
> +}



> +static int mb86a20s_read_ber(struct dvb_frontend *fe, u32 *ber)
> +{
> +	*ber = 0;
> +	return 0;
> +}
> +
> +static int mb86a20s_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
> +{
> +	*ucblocks = 0;
> +	return 0;
> +}

As you're providing just a stub function there, without an actual implementation,
the better is to add a FIXME note about that, explaining why you had to add such
function, like:

/*
 * FIXME: read_ucblocks callback is needed, as dvbsnoop uses it.
 * However, we currently don't know how to actually implement it.
 * So add a function that just returns 0 instead.
 */

This way, somebody else with enough information may later implement.

I don't like very much the idea of adding those two stub functions just to
play with dvbsnoop. If dvbsnoop should be working fine without this function,
a patch to dvbsnoop should be sending instead, to proper handle the error
messages generated when a function is not enabled.  If otherwise it doesn't
work properly, then you have no choice but to add a real code for it into the
Kernel driver.

> +
>  static int mb86a20s_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
>  {
>  	struct mb86a20s_state *state = fe->demodulator_priv;
> @@ -627,6 +677,9 @@ static struct dvb_frontend_ops mb86a20s_ops = {
>  	.release = mb86a20s_release,
>  
>  	.init = mb86a20s_initfe,
> +	.read_snr = mb86a20s_read_snr,
> +	.read_ber = mb86a20s_read_ber,
> +	.read_ucblocks = mb86a20s_read_ucblocks,
>  	.set_frontend = mb86a20s_set_frontend,
>  	.get_frontend = mb86a20s_get_frontend,
>  	.read_status = mb86a20s_read_status,

--
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