Re: i2c-gpio performance issue w/MPC8xx @ 50 MHz

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

 



Hi Eran,

On Tue, 19 Apr 2011 23:53:11 +0300, Eran Duchan wrote:
> Hey list
> 
> I needed to bit bang I2C on an ancient MPC875 running at a blazing 50
> MHz. I started by initializing the generic i2c-gpio bus but quickly
> found it could not bit bang @ 100 kHz. The most I was able to get it
> was ~50 kHz by setting udelay to 0 and patching around i2c-gpio.c to
> make sure it doesn't modify this value.
> 
> I then implemented a bus driver of my own, based on i2c-gpio. The only
> difference was that it simply implemented set/get sda/scl by directly
> writing to hardware. Using this I was able to reach around 150 kHz.
> 
> 1) Any comments on the above? Could I have done something differently?

Apparently the gpio layer is adding a delay somehow. You should ask
Grant Likely (gpio subsystem maintainer) and Haavard Skinnemoen (author
and maintainer of the i2c-gpio driver) about it. I Cc'd both. They
should know where in i2c-gpio or the gpio layer an extra delay may be
introduced.

> 2) I thought perhaps a thin adapter could be implemented that exported
> a platform data structure holding callbacks: set sda/scl dir/val, get
> sda/scl. By registering such a bus driver and supplying these
> callbacks in the platform module, one could avoid having to
> re-implement a bus driver like I did. Comments?

What you are proposing is turning i2c-algo-bit into a platform driver
instead of the basic library it is at the moment. When the code was
written, the platform "bus" didn't even exist so it wasn't an option.
While I don't expect all users of i2c-algo-bit to be converted to such
a platform driver, it may indeed be useful in some cases, so I have no
objection.

That being said, if you use GPIOs, it would certainly be better to find
out whether the extra delay you've been observing could be removed.
Properly requesting the GPIOs you need is definitely cleaner than
accessing the I/O port (or whatever) directly. Direct access can be
unreliable if other code is using GPIOs nearby.

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


[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux