| 
 | 
 
针对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适配器下。 
希望研究过这方面东西的朋友能不吝赐教,感激不尽。 
 |   
 
 
 
 |