imx53 QSB添加模拟I2C

修改在文件/arch/arm/freescale/mach-mx5/mx53_loco.c


    A,在此文件中添加头文件 #include


    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));

你可能感兴趣的:(linux)