天嵌 ARM开发社区

 找回密码
 注册
查看: 2631|回复: 1

基于TQ2440的I2C驱动移植

[复制链接]
ksws0061595 发表于 2013-1-29 16:31:25 | 显示全部楼层 |阅读模式
针对TQ2440上面I2C接有一个AT24C02A,在此学习I2C驱动。
开发板:TQ2440
内核版本:kernel-2.6.25.8 (开发板自带的经过配置的源码)
1、make menuconfig
Device Drivers->I2C support ->i2c device interface 有<M>变为<*>,即编译进内核,静态加载。
2、在arch/arm/mach-s3c2440/mach-smdk2440.c中添加以下代码:
static struct i2c_board_info i2c_devs0[] __initdata=
{
{I2C_BOARD_INFO("24c02",0x50),},
};
并且在函数static void __init smdk2440_machine_init(void)内部添加:
i2c_register_board_info(0,i2c_devs0,ARRAY_SIZE(i2c_devs0));
3、具体的AT24驱动 at24.c和at24.h分别放入对应的文件夹。
4、arch/arm/plat-s3c24xx/devs.c  文件无改动,在此贴上与I2C有关的代码:
/* I2C */
static struct resource s3c_i2c_resource[] = {
[0] = {
  .start = S3C24XX_PA_IIC,
  .end   = S3C24XX_PA_IIC + S3C24XX_SZ_IIC - 1,
  .flags = IORESOURCE_MEM,
},
[1] = {
  .start = IRQ_IIC,
  .end   = IRQ_IIC,
  .flags = IORESOURCE_IRQ,
}
};
struct platform_device s3c_device_i2c = {
.name    = "s3c2410-i2c",
.id    = -1,
.num_resources   = ARRAY_SIZE(s3c_i2c_resource),
.resource   = s3c_i2c_resource,
};
EXPORT_SYMBOL(s3c_device_i2c);

然后编译内核,下载进开发板,启动终端。
1、cd /dev
ls
如下:
i2c-1               tty17               tty51 (只列了I2C)
2、/sys/class/i2c-adapter/i2c-1   文件夹下 无at24c02a设备。
不知道问题出在哪里??
先写上个人理解,以便抛砖引玉。
1、struct platform_device s3c_device_i2c.id初始化为-1,应该是/dev 和/sys/class/i2c-adapter/下I2C的节点ID,对应于
i2c-1;
i2c_register_board_info(0,i2c_devs0,ARRAY_SIZE(i2c_devs0));
的第一个参数是0,应该是挂载到I2C 0适配器下。
希望研究过这方面东西的朋友能不吝赐教,感激不尽。
nettui 发表于 2013-6-21 21:10:24 | 显示全部楼层
你好,问题解决了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-6-24 04:00 , Processed in 2.042885 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表