imx6dl i2c4 support

最近的项目用到了imx6dl的i2c4,其实完全可以用gpio-i2c的方法来实现。既然imx6的datasheet中提到有4个i2c,那么一定可以生成i2c的设备节点。

网上找了一些方法进行尝试,最终找到了一个patch,地址如下所示。

  https://git.congatec.com/arm/qmx6_kernel/commit/593e5bd013eeaeda7405c587f851a9d12e9f8a75

  https://community.nxp.com/thread/306096

将链接中的内容记录一下,方便以后查看。

连接中的提及到:

  • imx6q有三个i2c和5个spi,
  • imx6dl有四个i2c和4个spi.
  • imx6dl的i2c4的时钟源来自pll3的ecspi_root.

代码更改操作方法(+表示添加,‘-’表示删除):

arch/arm/mach-mx6/board-mx6q_sabresd.c

	imx6q_add_imx_i2c(0, &mx6q_sabresd_i2c_data);
imx6q_add_imx_i2c(1, &mx6q_sabresd_i2c_data);
imx6q_add_imx_i2c(2, &mx6q_sabresd_i2c_data);
//添加i2c4的设备
+ if (cpu_is_mx6dl())
+ imx6q_add_imx_i2c(3, &mx6q_sabresd_i2c_data);
i2c_register_board_info(0, mxc_i2c0_board_info,
ARRAY_SIZE(mxc_i2c0_board_info));
i2c_register_board_info(1, mxc_i2c1_board_info,

arch/arm/mach-mx6/clock.c

 	_REGISTER_CLOCK("imx6q-ecspi.1", NULL, ecspi_clk[1]),
_REGISTER_CLOCK("imx6q-ecspi.2", NULL, ecspi_clk[2]),
_REGISTER_CLOCK("imx6q-ecspi.3", NULL, ecspi_clk[3]),
- _REGISTER_CLOCK("imx6q-ecspi.4", NULL, ecspi_clk[4]),
_REGISTER_CLOCK(NULL, "emi_slow_clk", emi_slow_clk),
_REGISTER_CLOCK(NULL, "emi_clk", emi_clk),
_REGISTER_CLOCK(NULL, "enfc_clk", enfc_clk),
... ...
}; + static struct
+ clk_lookup imx6dl_i2c4 = _REGISTER_CLOCK("imx-i2c.3", NULL, ecspi_clk[4]);
+ static struct
+ clk_lookup imx6q_ecspi5 = _REGISTER_CLOCK("imx6q-ecspi.4", NULL, ecspi_clk[4]); static void clk_tree_init(void)
{
... ...
clk_debug_register(lookups[i].clk);
} /*
* imx6q have 5 ecspi and 3 i2c
* imx6dl have 4 ecspi and 4 i2c
* imx6dl i2c4 use the imx6q ecspi5 clock source
*/
+ if (cpu_is_mx6dl()) {
+ clkdev_add(&imx6dl_i2c4);
+ clk_debug_register(imx6dl_i2c4.clk);
+ } else {
+ clkdev_add(&imx6q_ecspi5);
+ clk_debug_register(imx6q_ecspi5.clk);
+ }

arch/arm/plat-mxc/devices/platform-imx-i2c.c

const struct imx_imx_i2c_data imx6q_imx_i2c_data[] __initconst = {
#define imx6q_imx_i2c_data_entry(_id, _hwid) \
imx_imx_i2c_data_entry(MX6Q, _id, _hwid, SZ_4K)
+ #define imx6dl_imx_i2c_data_entry(_id, _hwid) \
+ imx_imx_i2c_data_entry(MX6DL, _id, _hwid, SZ_4K)
imx6q_imx_i2c_data_entry(0, 1),
imx6q_imx_i2c_data_entry(1, 2),
imx6q_imx_i2c_data_entry(2, 3),
+ imx6dl_imx_i2c_data_entry(3, 4),
};

最后注意将对应的pin脚复用为i2c的功能。例如:

arch/arm/mach-mx6/board-mx6dl_sabresd.h

static iomux_v3_cfg_t mx6dl_sabresd_pads[] = {
MX6DL_PAD_GPIO_7__I2C4_SCL,
MX6DL_PAD_GPIO_8__I2C4_SDA,

Tony Liu

2016-11-19, Shenzhen

imx6dl i2c4 support的更多相关文章

  1. imx6dl uboot 移植

    新版的BSP引进的设备树的机制,在uboot中还添加了menuconfig的配置菜单. 参考官网的文档进行uboot移植,本文使用的cpu是imx6dl,uboot版本2015.04. 我要添加一个名 ...

  2. Android注解使用之使用Support Annotations注解优化代码

    前言: 前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学 ...

  3. Android Support 包知识

    Android Support Library包是一组代码库, 它提供了向后版本的framework API的兼容, 这些代码库实现的效果和只能在指定版本中使用的API一样好. 每个Support L ...

  4. 解决Native atomics support not found问题

    今天用arm-none-linux-gnueabi交叉编译libmysqclient.so,出现Native atomics support not found问题 进入mysql-connector ...

  5. 使用 CoordinatorLayout 出错 inflating class android.support.design.widget.CoordinatorLayout

    ava.lang.RuntimeException: Unable to start activity ComponentInfo{com.czr.ianpu/com.czr.ianpu.MainAc ...

  6. Your app declares support for audio in the UIBackgroundModes key in your Info.plist 错误

    提交AppStore时候被拒绝 拒绝原因:Your app declares support for audio in the UIBackgroundModes key in your Info.p ...

  7. 在布局中使用android.support.v4.app.Fragment的注意事项

    1.Activity必须继承android.support.v4.app.FragmentActivity 2.fragment标签的name属性必须是完全限定包名,如下: <LinearLay ...

  8. 启动项目的时候报驱动错误: not support oracle driver 1.0

    问题:今天在使用pom导入oracle14的包时候发现怎么都下载不过来.网上查了一下发现是因为Oracle驱动需要官方授权,所以在pom.xml文件直接配置,无法下载成功. 解决方法就是下载oracl ...

  9. Android Support Library

    title: Android Support Library tags: Support Library,支持库 grammar_cjkRuby: true --- DATE: 2016-5-13. ...

随机推荐

  1. Uiautomator打包使用第三方库,报错的解决方案

    问题引源: 在做自动化过程中,想在用例执行完毕后,自动生成该用例测试报告: 报告定义为Excel格式文件,且在用例执行过程中生成. 所以我在Uiautomator工程中引用了jxl.jar,用以处理E ...

  2. jBPM4.3+ssh+会签 整合配置及完整实例

    大佬们的项目里有用到会签,所以趁双休日研究了下. 其实也是简单的会签情况,不过开始的时候研究了4.4,(因为先前研究的都是4.4),发现4.4跟4.3的处理方法完全不一样,搞的我比较郁闷……弄了一天, ...

  3. 连接mysql遇到的问题

    1. 首先使用一个用户名不行时,可以新建一个用户名点击用户,输入名和密码,此时一定要记住密码,别忘了.不过也可以点击编辑用户改.此时连接时发现还是连接不上.出现错误信息为: Access denied ...

  4. 常用NuGet插件

    1.Install-Package System.Data.SQLite 2.Install-Package FluentData

  5. lastLogon和lastLogonTimestamp的区别

    如何得到用户最近一次登陆域的时间?在Windows2003域中有2个属性:lastLogon和lastLogonTimestamp,那么这2个属性到底有什么作用呢? lastLogon属性实时更新用户 ...

  6. OpenCV学习笔记——视频的边缘检测

    使用Canny算子进行边缘检测,并分开输出到三个窗口中,再给每一个窗口添加文字 代码: #include"cv.h" #include"highgui.h" / ...

  7. netbeans使用技巧总结+快捷键大全

      部分经常用的快捷键: 使用快捷键Alt+Enter显示修复错误的方法. 4.导航 a)Alt+Shift+O :转到类. b)Ctrl+Tab :在打开的源文件中进行切换. c)Alt+Right ...

  8. Apache Spark源码走读之9 -- Spark源码编译

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本来源码编译没有什么可说的,对于java项目来说,只要会点maven或ant的简单命令,依葫芦画瓢,一下子就ok了.但到了Spark上面,事情似乎不这么简单 ...

  9. PHP 开发 APP 接口 学习笔记与总结 - JSON 方式封装通信接口

    1.通信数据的标准格式 ( JSON ),包括: code:状态码(200,400等) message:提示信息(例如:数据返回成功.邮箱格式错误等) data:返回数据 2.JSON 方式封装通信接 ...

  10. 一些站点使用的服务器软件、js 框架大收集 [ 整理中 ]

    Chrome 的扩展应用 ChromeSnifferPlus ( 开源中国地址:http://www.oschina.net/p/chromesnifferplus,GitHub 地址:https:/ ...