2.6.33中关于at91sam9260的i2c controller驱动的问题

在为at91sam9260移植2.6.33内核的I2C时,直接用driver/bus/i2c-at91.c这个iic的adapter驱动是不能用的,而且在makemenuconfig时,在devicedriver/i2c菜单下是看不到它的选项的。这是为什么呢?

可以通过看driver/i2c/buses/Kconfig看到,对于I2C_AT91项选的依赖多了一个BROKEN这个选项,如下:

280 config I2C_AT91

281         tristate"Atmel AT91 I2C Two-Wire interface (TWI)"

282         depends onARCH_AT91 && EXPERIMENTAL&&BROKEN

283         help

284           Thissupports the use of the I2C interface on Atmel AT91

285          processors.

286

287           Thisdriver is BROKEN because the controller which it uses

288           willeasily trigger RX overrun and TX underrun errors.  Using

289           low I2Cclock rates may partially work around those issues

290           on somesystems.  Another serious problem is thatthere is no

291          documented way to issue repeated START conditions, as needed

292           tosupport combined I2C messages.  Use thei2c-gpio driver

293           unlessyour system can cope with those limitations.

而这个broken是在init/Kconfig下定义的,如下:

57 config BROKEN

58         bool

59

60 config BROKEN_ON_SMP

61         bool

62         depends onBROKEN || !SMP

63         default y
在这里broken是一个bool值,同时它没有一个显示的菜单名,所以在makemenuconfig时,我们是看不到它的选项的,所以它也就没有打开,一直为n。

这就说明,在2.6.33中at91sam9260的i2c的驱动i2c-at91.c是不能用的,同时可以通过I2C_AT91下的comments也可以看到:

This driver is BROKEN because the controller which it uses willeasily trigger RX overrun and TX underrun errors.  Using  lowI2C clock rates may partially work around those issues on some systems.  Another serious problem is that there is no  documented way to issue repeated STARTconditions, as needed  to supportcombined I2C messages.  Use the i2c-gpiodriver  unless your system can cope withthose limitations.

   此驱动程序被破坏,因为它使用的控制器很容易会触发溢出RX和TX欠载错误。在某些系统上,使用低 时钟速率可能部分地解决这些问题。另一个严重的问题是,有没有记录的方式发出重复的起始条件,需要支持结合I2C消息。请使用I2C-GPIO驱动程序,除非您的系统可以应付这些限制。

所以我们在2.6.33的内核中,对于at91sam9260的i2c  controller的驱动我们用i2c-gpio.c,用gpio来模拟。

      364 config I2C_GPIO

    365         tristate "GPIO-based bitbangingI2C"

    366         depends on GENERIC_GPIO

    367         select I2C_ALGOBIT

    368         help

    369           This is a very simple bitbanging I2Cdriver utilizing the

370           arch-neutral GPIO API to control theSCL and SDA lines.


至于为什么这样,暂时不管,我用了i2c-at91.c的驱动,是有问题,在接收时会超时。

 

你可能感兴趣的:(controller)