基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)
作者信息
作者: 彭东林
QQ:405728433
平台简介
开发板:tiny4412ADK + S700 + 4GB Flash
要移植的内核版本:Linux-4.4.0 (支持device tree)
u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动)
busybox版本:busybox 1.25
交叉编译工具链: arm-none-linux-gnueabi-gcc
(gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29))
摘要
上一篇博文在tiny4412上移植了MMA7660驱动程序,使用的是exynos4412自带的I2C硬件控制器,下面我要说的是用软件模拟一个I2C控制器,用的还是原来的两个GPIO引脚,这不过此时这两个GPIO的功能复用还是GPIO功能。关于这部分可以参考:http://www.cnblogs.com/pengdonglin137/p/4623169.html
移植
Linux内核的驱动分层设计带来好处,我们这里只需要修改I2C控制器的驱动部分,MMA7660的驱动程序部分完全不需要任何改动,而且Linux内核也已经把软件模拟I2C控制器的代码实现好了:drivers/i2c/busses/i2c-gpio.c,我们需要做的只剩下配置设备树了,在arch/arm/boot/dts/exynos4412-tiny4412.dts中添加软件I2C的硬件信息,可以参考:Documentation/devicetree/bindings/i2c/i2c-gpio.txt:
1: i2c_mma7660: i2c-gpio-0 {
2: compatible = "i2c-gpio";
3: gpios = <&gpa1 2 GPIO_ACTIVE_HIGH>, /* SDA */
4: <&gpa1 3 GPIO_ACTIVE_HIGH>; /* SCL */
5: /* i2c-gpio,sda-open-drain; */
6: /* i2c-gpio,scl-open-drain; */
7: i2c-gpio,delay-us = <2>; /* 250 kHz */
8: #address-cells = <1>;
9: #size-cells = <0>;
10: status = "okay";
11:
12: mma7660@4c {
13: compatible = "freescale,mma7660";
14: reg = <0x4c>;
15: interrupt-parent = <&gpx3>;
16: interrupts = <1 2>;
17: poll_interval = <100>;
18: input_fuzz = <4>;
19: input_flat = <4>;
20: status = "okay";
21: };
22: };
其中需要关注的:
第3行表示实现SDA信号的GPIO引脚;
第4行表示实现SCL信号的GPIO引脚;
第7行用于控制SCL的频率;
第12-20行还是MMA7660的硬件信息,跟上篇一样,一点都没有变;
下面是SDA和SCL的大致时序图:

可以看到我给udelay设置的值是2,所以周期是4,单位是微秒,所以频率大致是250KHz左右,MMA7660的芯片手册上说I2C的通信速率最大为400KHz,小于这个就可以了:

这部分代码我已经上传到github上了:
git clone https://github.com/pengdonglin137/linux-4.4_tiny4412.git -b port_to_tiny4412
需要执行make menuconfig,将CONFIG_MMA7660_USE_I2C_GPIO设置成y,然后再执行make dtbs。
测试
- GPIO使用情况
1: [root@tiny4412 ]# cat /sys/kernel/debug/gpio
2: GPIOs 0-7, platform/11400000.pinctrl, gpa0:
3:
4: GPIOs 8-13, platform/11400000.pinctrl, gpa1:
5: gpio-10 ( |sda ) in hi
6: gpio-11 ( |scl ) in hi
- 读取MMA7660的寄存器的值
1: [root@tiny4412 ]# cd /sys/bus/i2c/drivers/mma7660/9-004c/
2: [root@tiny4412 9-004c]# ls
3: all_axis_g input of_node subsystem x_axis_g
4: driver modalias power tilt_status y_axis_g
5: hwmon name registers uevent z_axis_g
6: [root@tiny4412 9-004c]# cat all_axis_g
7: 3, 0, 22
8: [root@tiny4412 9-004c]# cat registers
9: REG: 0x00 = 0x02 ...... [ 0000 0010 ]
10: REG: 0x01 = 0x00 ...... [ 0000 0000 ]
11: REG: 0x02 = 0x17 ...... [ 0001 0111 ]
12: REG: 0x03 = 0x01 ...... [ 0000 0001 ]
13: REG: 0x04 = 0x02 ...... [ 0000 0010 ]
14: REG: 0x05 = 0xa0 ...... [ 1010 0000 ]
15: REG: 0x06 = 0xe7 ...... [ 1110 0111 ]
16: REG: 0x07 = 0x59 ...... [ 0101 1001 ]
17: REG: 0x08 = 0x49 ...... [ 0100 1001 ]
18: REG: 0x09 = 0x04 ...... [ 0000 0100 ]
19: REG: 0x0a = 0x0f ...... [ 0000 1111 ]
- 查看MMA7660上报事件
1: [root@tiny4412 9-004c]# hexdump /dev/input/event0
2: 0000000 00b6 0000 f0a8 000d 0003 0002 0016 0000
3: 0000010 00b6 0000 f0a8 000d 0000 0000 0000 0000
4: 0000020 00b7 0000 b77c 0001 0003 0000 0002 0000
5: 0000030 00b7 0000 b77c 0001 0000 0000 0000 0000
6: 0000040 00b9 0000 3125 0000 0003 0000 0004 0000
7: 0000050 00b9 0000 3125 0000 0003 0002 0015 0000
8: 0000060 00b9 0000 3125 0000 0000 0000 0000 0000
9: 0000070 00b9 0000 df77 000a 0003 0000 0003 0000
10: 0000080 00b9 0000 df77 000a 0000 0000 0000 0000
11: 0000090 00b9 0000 ec9b 000d 0003 0000 0002 0000
12: 00000a0 00b9 0000 ec9b 000d 0000 0000 0000 0000
13: 00000b0 00ba 0000 3148 0000 0003 0000 0001 0000
14: 00000c0 00ba 0000 3148 0000 0000 0000 0000 0000
15: 00000d0 00ba 0000 58af 0009 0003 0002 0014 0000
16: 00000e0 00ba 0000 58af 0009 0000 0000 0000 0000
未完待续……
基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)的更多相关文章
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开【转】
转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...
- 基于tiny4412的Linux内核移植 -- PWM子系统学习(八)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植(支持device tree)(一)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植(支持device tree)(三)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 --- aliases节点解析
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 --- aliases节点解析【转】
转自:https://www.cnblogs.com/pengdonglin137/p/5252348.html 阅读目录(Content) 作者信息 平台简介 正文 回到顶部(go to top) ...
- 基于ubuntu-2.6.35内核的SDIO-WiFi驱动移植
一.移植环境: 1.主机:Ubuntu 10.10发行版 2.目标机:FS_S5PC100平台 3.交叉编译工具:arm-cortex_a8-linux-gn ...
随机推荐
- Delphi XE8,C++ Builder XE8,RAD Studio XE8 官方 ISO 文件下载,附激活工具
RAD Studio XE8 v22.0.19027.8951 官方ISO下载(6.72G):http://altd.embarcadero.com/download/radstudio/xe8/de ...
- nginx用户认证配置( Basic HTTP authentication)
ngx_http_auth_basic_module模块实现让访问着,只有输入正确的用户密码才允许访问web内容.web上的一些内容不想被其他人知道,但是又想让部分人看到.nginx的http aut ...
- STM32 CANBus RAM Layout
F8 FF FF FF //F0R0 F0R1 F8 FF FF FF //F1R0 F1R1 F8 FF FF FF F8 FF FF FF F8 FF FF FF F8 FF FF FF F8 F ...
- Revit中如何将视图过滤器传递到其它项目
在Revit中采用过滤器控制视图显示,利用过滤器给图元着色,利用过滤器控制视图显示或隐藏等,那么,在不同的项目中是否每次都要设置相同的过滤器,其实,Revit提供了这么一种在不同项目传递信息的方式,在 ...
- HBase + Kerberos 配置示例(二)
接上篇<HBase + Kerberos配置示例(一)>,我们继续剩下的配置工作. 环境准备 Hadoop配置 Zookeeper配置 HBase配置 Java测试程序 环境准备 安装ha ...
- 推荐一个C#代码混淆器 .NET Reactor【转】
C#的代码辛苦写出来之后,一个反射工具,就可以完全显露出来. 当然,在做项目时,这个功能还不错.因为我就曾在一个项目上使用C#,没有进行任何混淆.结果在项目二年多之后,需要做一些调整,自己保存的源代码 ...
- hibernateTemplate.find或hibernateTemplate.save()执行操作没有反应,但是有sql语句
今天使用ssh框架搭建的项目,进行查询和保存操作,使用的是 public Collection<T> getAllEntry() { return this.hibernateTempla ...
- Turn off swi-prolog protocol output of ANSI terminal control sequences
To save a record of program execution in prolog, we use the special predicates: protocol and noproto ...
- iOS 10.0 更新点(开发者视角)
html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padding: 0 ...
- 日暮·第一章·决斗
日暮 第一章 决斗 泉州府,位于帝国的东南沿海,在数百年前,这里已是帝国最大的通商口岸之一,其一城之繁荣喧哗足以与异邦小国的都城相媲美,无数的人曾经来到这里,追逐财富,梦想,女人以及所有他们认为可 ...