1. i2c platform_device设备注册
static struct resource nuc970_i2c0_resource[] = {
[0] = {
.start = NUC970_PA_I2C0,
.end = NUC970_PA_I2C0 + NUC970_SZ_I2C0 - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_I2C0,
.end = IRQ_I2C0,
.flags = IORESOURCE_IRQ,
}
};
static struct nuc970_platform_i2c nuc970_i2c0_data = {
.bus_num = 0,
.bus_freq = 100000,
};
struct platform_device nuc970_device_i2c0 = {
.name = "nuc970-i2c0",
.id = -1,
.num_resources = ARRAY_SIZE(nuc970_i2c0_resource),
.resource = nuc970_i2c0_resource,
.dev = {
.platform_data = &nuc970_i2c0_data,
}
};
platform_add_devices(nuc970_device_i2c0, 1);2. i2c platform_driver驱动注册
static struct platform_driver nuc970_i2c0_driver = {
.probe = nuc970_i2c0_probe,
.remove = nuc970_i2c0_remove,
.driver = {
.name = "nuc970-i2c0",
.owner = THIS_MODULE,
},
};
module_platform_driver(nuc970_i2c0_driver);3. 注册i2c配置信息到全局链表上
static struct i2c_board_info __initdata nuc970_i2c_clients0[] =
{
{I2C_BOARD_INFO("fm24cl16bg", 0x50),}, //i2c-0总线上
};
static struct i2c_board_info __initdata nuc970_i2c_clients1[] =
{
{I2C_BOARD_INFO("rx8025", 0x32),}, //i2c-1总线上
};
#ifdef CONFIG_I2C_BUS_NUC970_P0
i2c_register_board_info(0, nuc970_i2c_clients0, sizeof(nuc970_i2c_clients0)/sizeof(struct i2c_board_info)); //注册到总线0上
#endif
#ifdef CONFIG_I2C_BUS_NUC970_P1
i2c_register_board_info(1, nuc970_i2c_clients1, sizeof(nuc970_i2c_clients1)/sizeof(struct i2c_board_info)); //注册到总线1上
#endif4. 铁电或RTC注册(根据at24_ids结构体内部成员名称进行匹配)
static const struct i2c_device_id at24_ids[] = {
{ "fm24cl16bg", AT24_DEVICE_MAGIC(16384 / 8, 0) },
};
static struct i2c_driver at24_driver = {
.driver = {
.name = "at24",
.owner = THIS_MODULE,
},
.probe = at24_probe,
.remove = at24_remove,
.id_table = at24_ids,
};
static int __init at24_init(void)
{
if (!io_limit) {
pr_err("at24: io_limit must not be 0!\n");
return -EINVAL;
}
FRM_WP_INIT();
io_limit = rounddown_pow_of_two(io_limit);
printk("%s init ok.\n", version_string);
return i2c_add_driver(&at24_driver);
}
module_init(at24_init);
本文详细介绍了NUC970平台上的I2C设备驱动实现过程,包括设备注册、驱动注册、配置信息注册及铁电或RTC设备的具体注册步骤。通过对这些步骤的讲解,为读者提供了深入理解I2C设备驱动开发的方法。
1307

被折叠的 条评论
为什么被折叠?



