[linux-dvb] Pinnacle PCTV (Dazzle) 300i maybe i2c problems with newer code?

Hartmut Hackmann hartmut.hackmann at t-online.de
Thu Jan 12 00:48:49 CET 2006


Hi, Tim

Tim Small wrote:
> Hartmut Hackmann wrote:
> 
>> I know the I2C bus and have saa7134 documentation. But i have no 
>> experience
>> with the MT352. The errata sheet does not mention a I2C bug. But the lost
>> arbitration is interesting. Assuming there is only one master on the bus,
> 
> 
> I have had a quick look at the 7134 I2C driver - I might not have time 
> to do more work on it soon, so I thought I'd better share a couple of 
> possible problems that I've noticed:
> 
> I haven't checked this against the 7134 datasheet, but:
> 
> Line 258 :                  if (!(msgs[i].flags & I2C_M_NOSTART) || 0 == 
> i) {
> 
> Seems to say that "START", "ADDRESS" should only be sent on the first 
> message of an i2c transaction (0 == i), this would seem to disagree with 
> Documentation/i2c/i2c_protocol (maybe the 7134 does something clever 
> automatically, I didn't check).
> 
That's correct. A transaction continues until a stop or a new start condition
is transferred. Gaps between transaction fragments don't matter.

> Also, the transfer is not restarted in a lost arbitration condition (not 
> sure if this is a bug or not - maybe it's the job of the client driver 
> to do this - I'm not sure)
> 
Indeed. But an arbiration loss can only occur when there is more than one
master on the bus. This normally is not the case. But if the MT352 can
act as a master, this is a problem. If you turn i2c_debug on, do you see
arbitration losses?

> The first problem might possibly cause trouble if the 352 driver 
> switched to using multi-message i2c transactions, rather than single 
> message
> 
I haven't read the doc yet, what is this?

>> this indicates that there either is wild oscillation or a protocol 
>> problem
>> with the MT352 resp. the card. Did somebody try to slow down the bus?
> 
> 
> The 7134 only seems to support 100kHz, or 400kHz operation.  I haven't 
> yet verified that the driver is always using 100kHz mode at the moment 
> tho', or seen if there is a way to to force the i2c hardware to wait 
> around.  I'll try and do some more on this in the next couple of days.
> 
Yep i meanwhile found this myself, it runs at 100kHz.

BTW: I inserted a msleep between 2 transactions some months ago to ensure
a sufficient time between stop and next start condition. you might try
to replace the msleep by a 10usec udelay...

Best regards
    Hartmut



More information about the linux-dvb mailing list