On 2012-09-19 18:45, Mauro Carvalho Chehab wrote:
Em 19-09-2012 10:01, Anders Thomson escreveu:
> On 2012-09-18 11:53, Mauro Carvalho Chehab wrote:
>> Em 16-09-2012 05:48, Anders Thomson escreveu:
>> > It doesn't make any difference though :-( I still have the layer of noise...
>>
>> That's weird. Hmm... perhaps priv->cfg.config is being initialized
>> latter. Maybe you can then do, instead:
>>
>> return -EREMOTEIO;
>> }
>>
>> + priv->cfg.switch_addr = priv->i2c_props.addr;
>> if ((data == 0x83) || (data == 0x84)) {
>> priv->ver |= TDA18271;
>> tda829x_tda18271_config.config = priv->cfg.config;
>>
>>
> No dice:
> $ git diff | cat
> diff --git a/drivers/media/common/tuners/tda8290.c b/drivers/media/common/tuners/tda8290.c
> index 8c48521..16d7ff7 100644
> --- a/drivers/media/common/tuners/tda8290.c
> +++ b/drivers/media/common/tuners/tda8290.c
> @@ -627,6 +627,9 @@ static int tda829x_find_tuner(struct dvb_frontend *fe)
> return -EREMOTEIO;
> }
>
> + tuner_info("ANDERS: old priv->cfg.switch_addr %x\n", priv->cfg.switch_addr);
> + priv->cfg.switch_addr = priv->i2c_props.addr;
> + tuner_info("ANDERS: new priv->cfg.switch_addr %x\n", priv->cfg.switch_addr);
> if ((data == 0x83) || (data == 0x84)) {
> priv->ver |= TDA18271;
> tda829x_tda18271_config.config = priv->cfg.config;
> @@ -640,7 +643,6 @@ static int tda829x_find_tuner(struct dvb_frontend *fe)
>
> dvb_attach(tda827x_attach, fe, priv->tda827x_addr,
> priv->i2c_props.adap,&priv->cfg);
> - priv->cfg.switch_addr = priv->i2c_props.addr;
> }
> if (fe->ops.tuner_ops.init)
> fe->ops.tuner_ops.init(fe);
> anders@tv /usr/src/linux $ dmesg | grep ANDERS
> [ 5.667022] tda829x 4-004b: ANDERS: old priv->cfg.switch_addr 0
> [ 5.667025] tda829x 4-004b: ANDERS: new priv->cfg.switch_addr 4b
switch_addr got properly filled here.
Well, it got filled with 4b, but that it not what is needed. Recall my
own patch:
# cat /TV_CARD.diff
diff --git a/drivers/media/common/tuners/tda8290.c
b/drivers/media/common/tuners/tda8290.c
index 064d14c..498cc7b 100644
--- a/drivers/media/common/tuners/tda8290.c
+++ b/drivers/media/common/tuners/tda8290.c
@@ -635,7 +635,11 @@ static int tda829x_find_tuner(struct dvb_frontend *fe)
dvb_attach(tda827x_attach, fe, priv->tda827x_addr,
priv->i2c_props.adap, &priv->cfg);
+ tuner_info("ANDERS: setting switch_addr. was 0x%02x, new
0x%02x\n",priv->cfg.switch_addr,priv->i2c_props.addr);
priv->cfg.switch_addr = priv->i2c_props.addr;
+ priv->cfg.switch_addr = 0xc2 / 2;
+ tuner_info("ANDERS: new 0x%02x\n",priv->cfg.switch_addr);
+
}
if (fe->ops.tuner_ops.init)
fe->ops.tuner_ops.init(fe);
It needs to be filled with 0xc2 / 2. I'm not sure where I got that
expression from, but it is the sum of my efforts tracing code changes
around 2.6.26.
>
> Whereas to work, I need:
> anders@tv /usr/src/linux $ grep ANDERS /3.3.8-d.patched
> [ 6.565254] tda829x 5-004b: ANDERS: setting switch_addr. was 0x00, new 0x4b
What looks weird here is that the device number changed from 4 to 5.
I have a webcam permanently on USB, so it ends up as two v4l2 devices
(with device enumeration changing between boots)
Do you have more than one board on your machine?
> [ 6.565265] tda829x 5-004b: ANDERS: new 0x61
The 0x61 address should be filled already by the existing code, otherwise
you wouldn't be able to switch from one channel to another one.
If you're in doubt, you could add an extra printk at the initialization code,
in order to see what's happening there.
Not sure I follow here. Which code should set the ox61 address? I'd be
more than happy to add printks. Where? I recall getting lost in how this
stuff uses the i2c code in the past.
--
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