2012年8月30日 星期四

i2c_register_board_info & i2c_board_info



你可以在 /sys/bus/i2c/devices/ 下看到下面兩個
0-0049
0-0068
表示你的i2c bus 有這兩個 device.

要如何註冊呢?
i2c_register_board_info() 便可以將你要的裝置加入 i2c bus .

1.      先建立 i2c_board_info, 填入你的 device address .
static struct i2c_board_info __initdata ts02_i2c[] =
{
        {
                I2C_BOARD_INFO("lm75a", 0x49),
        },
        {
                I2C_BOARD_INFO("ds1338", 0x68),
        }
};

2.      i2c_register_board_info(0, ts02_i2c, ARRAY_SIZE(ts02_i2c));
這樣就可以了, 當然 driver menuconfig 要記得勾選.

開機後, 你可以看到下面資訊表示註冊成功.
i2c /dev entries driver
rtc-ds1307 0-0068: rtc core: registered ds1338 as rtc0
rtc-ds1307 0-0068: 56 bytes nvram
i2c-gpio i2c-gpio.0: using pins 36 (SDA) and 37 (SCL)
lm75 0-0049: hwmon1: sensor 'lm75a'

    要注意的是 I2C_BOARD_INFO("ds1338", 0x68) 裡的 “ds1338” 需要和 id_table 相同, 不然會有問題.
    #define I2C_BOARD_INFO(dev_type, dev_addr) \
  .type = dev_type, .addr = (dev_addr)
所以
        {
                I2C_BOARD_INFO("ds1338", 0x68),
        }
也可以改成
        {
                .type        = "ds1338",
                .addr        = 0x68,
        }


Refernence:

沒有留言:

張貼留言