imx6dl i2c4 support
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的更多相关文章
- imx6dl uboot 移植
新版的BSP引进的设备树的机制,在uboot中还添加了menuconfig的配置菜单. 参考官网的文档进行uboot移植,本文使用的cpu是imx6dl,uboot版本2015.04. 我要添加一个名 ...
- Android注解使用之使用Support Annotations注解优化代码
前言: 前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学 ...
- Android Support 包知识
Android Support Library包是一组代码库, 它提供了向后版本的framework API的兼容, 这些代码库实现的效果和只能在指定版本中使用的API一样好. 每个Support L ...
- 解决Native atomics support not found问题
今天用arm-none-linux-gnueabi交叉编译libmysqclient.so,出现Native atomics support not found问题 进入mysql-connector ...
- 使用 CoordinatorLayout 出错 inflating class android.support.design.widget.CoordinatorLayout
ava.lang.RuntimeException: Unable to start activity ComponentInfo{com.czr.ianpu/com.czr.ianpu.MainAc ...
- 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 ...
- 在布局中使用android.support.v4.app.Fragment的注意事项
1.Activity必须继承android.support.v4.app.FragmentActivity 2.fragment标签的name属性必须是完全限定包名,如下: <LinearLay ...
- 启动项目的时候报驱动错误: not support oracle driver 1.0
问题:今天在使用pom导入oracle14的包时候发现怎么都下载不过来.网上查了一下发现是因为Oracle驱动需要官方授权,所以在pom.xml文件直接配置,无法下载成功. 解决方法就是下载oracl ...
- Android Support Library
title: Android Support Library tags: Support Library,支持库 grammar_cjkRuby: true --- DATE: 2016-5-13. ...
随机推荐
- shell字符串和数组
字符串 : 1.单引号: str = 'value' 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: 单引号字串中不能出现单引号(对单引号使用转义符后也不行); ...
- MyEclipse设置注释格式(转载)
Window --> Java --> Code Style --> Code Templates --> Comments --> types --> Edit ...
- JS来添加弹出层,并且完成锁屏
上图 <html> <head> <title>弹出层</title> <style type="text/css"> ...
- QCheckBox 的按钮响应
Qt中QCheckBox的按键响应如下,其中checkbox为对象名: void YourClass::on_checkbox_toggled(bool state) { // Do somethin ...
- python 操作mysql
安装模块: #pip install .... MySQLdb(2.x) pymysql(3.x) import MySQLdb as sql con = sql.connect( host = &q ...
- hdu Cup
这题是道水题,用数学方法做比较简单.因为在做二分法的专题,所以这里采用二分的方式做,很简单,但是还是要用到数学的知识,比如三角形相似,圆台的 体积公式等. #include"iostream ...
- IOS第四天(3:数组的排序和乱序)
数组的升序和降序 - (void)sortWith:(NSArray *)array { // 排序 array = [array sortedArrayUsingComparator:^NSComp ...
- LeetCode | Unique Paths【摘】
A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below). The ...
- Office 2010 KMS激活原理和案例分享 - Your Office Solution Here - Site Home - TechNet Blogs
[作者:葛伟华.张玉工程师 , Office/Project支持团队, 微软亚太区全球技术支持中心 ] 为了减低部署盗版(可能包含恶意软件.病毒和其他安全风险)的可能性,Office 2010面向企 ...
- Nginx 笔记与总结(16)nginx 负载均衡
nginx 反向代理时,如果后端有多台服务器,就可以实现负载均衡. 实现原理:把多台服务器用 upstream 绑定在一起并起一个组名,然后 proxy_pass 指向该组. ngx_http_ups ...