修改在文件/arch/arm/freescale/mach-mx5/mx53_loco.c
A,在此文件中添加头文件 #include <linux/i2c-gpio.h>
B,根据自己的板,选择没有使用的GPIO口:
#define GPIO_I2C4_SDA_3_28 (2*32+28)
#define GPIO_I2C4_SCL_3_21 (2*32+21)
C,在mx53_loco_pads[]中添加这两个GPIO口的定义宏:
MX53_PAD_EIM_D28__GPIO3_28,
MX53_PAD_EIM_D21__GPIO3_21,
D,添加如下代码:
/*GPIO_I2C*/
static struct platform_device mxc_gpio_i2c_device =
{
.name = "i2c-gpio", //这里一定是i2c-gpio不能是别的
.id = 3,
};
static struct i2c_gpio_platform_data mxc_gpio_i2c_data =
{
.sda_pin = GPIO_I2C4_SDA_3_28,
.scl_pin = GPIO_I2C4_SCL_3_21,
.udelay = 5,
.sda_is_open_drain = 0, //如果没有效把0 设置为1试试
.scl_is_open_drain = 0, //同上
.scl_is_output_only = 0,
};
static struct i2c_board_info mxc_i2c3_board_info[] __initdata = {
/*{
.type = "xxx",//设备驱动名
.addr = 0x12, //地址
...
},
*/
};
E,在函数mxc_board_init中添加:和硬I2C一样的注册。
mxc_register_device(&mxc_gpio_i2c_device, &mxc_gpio_i2c_data);
i2c_register_board_info(3, mxc_i2c2_board_info,
ARRAY_SIZE(mxc_i2c3_board_info));