ARM Linux 内核gpio模拟I2C

来源:互联网 发布:python 贴吧自动签到 编辑:程序博客网 时间:2024/05/20 00:13

例子1

1,kernel\arch\arm\mach-pxa\board-test.c 增加

/* i2c */
static struct i2c_gpio_platform_data i2c_bus_data = {
 .sda_pin = VIPER_RTC_I2C_SDA_GPIO,
 .scl_pin = VIPER_RTC_I2C_SCL_GPIO,
 .udelay  = 10,
 .timeout = 100,
};

 

static struct platform_device i2c_bus_device = {
 .name  = "i2c-gpio",
 .id  = 1, /* pxa2xx-i2c is bus 0, so start at 1 */
 .dev = {
  .platform_data = &i2c_bus_data,
 }
};

 

static struct i2c_board_info __initdata viper_i2c_devices[] = {
 {
  I2C_BOARD_INFO("ds1338", 0x68),
 },
};

第一个结构体中sda_pin和scl_pin是开发板上对应的gpio口(data线和clock线),udelay是与具体芯片时钟相关的参数,需要参考具体的datasheet。下面的两个open_drain是表明两个管脚是否是开漏电路,如果是则填1,否则填0。下面一个机构体中需要注意name应该填写i2c-gpio,另外id要注意设定为2,因为系统当中已经有两个I2C设备了。

添加上需要的头文件:#include <linux/i2c-gpio.h>。在头文件devices.h中添加上设备结构体的声明,extern struct platform_device gpio_device_i2c;

然后将gpio_device_i2c放在board-XXXX.c的数组devices中,形式请参考该数组中其他的设备。  

static struct platform_device *viper_devs[] __initdata = {
 &smc91x_device,
 &i2c_bus_device,    ///////////////////////////////////////////
 &serial_device,
 &isp116x_device,
 &viper_mtd_devices[0],
 &viper_mtd_devices[1],
 &viper_backlight_device,
};


 

 static void __init viper_init(void)

 i2c_register_board_info(1, ARRAY_AND_SIZE(viper_i2c_devices));


;

}


 

然后再用i2c_register_board_info对其进行注册:  

i2c_register_board_info(2, i2c_gpio_devices, ARRAY_SIZE(i2c_gpio_devices));  

这样就完成了模拟步骤,可以直接用系统的I2C相关的注册等方法对设备进行注册和读写操作。 


例子2

static struct i2c_gpio_platform_data ep93xx_i2c_data = {
 .sda_pin  = EP93XX_GPIO_LINE_EEDAT,
 .sda_is_open_drain = 0,
 .scl_pin  = EP93XX_GPIO_LINE_EECLK,
 .scl_is_open_drain = 0,
 .udelay   = 2,
};

static struct platform_device ep93xx_i2c_device = {
 .name   = "i2c-gpio",
 .id   = 0,
 .dev.platform_data = &ep93xx_i2c_data,
};

void __init ep93xx_register_i2c(struct i2c_board_info *devices, int num)
{
 i2c_register_board_info(0, devices, num);
 platform_device_register(&ep93xx_i2c_device);
}

 


本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-03/33762p3.htm

 

 

原创粉丝点击