|
发表于 2018-3-8 17:44:43
|
显示全部楼层
对于高通的7x27平台,首先在文件devices-msm7x27.c中添加设备如下:
151.
152. static struct i2c_gpio_platform_data resources_gpio_i2c[] = {
153. {
154. .sda_pin=xx,
155. .scl_pin=xx,
156. .udelay=xx,
157. .sda_is_open_drain=1,
158. .scl_is_open_drain=1,
159. }
160. };
161. struct platform_device gpio_device_i2c = {
162. .name = "i2c-gpio",
163. .id = 2,
164. .dev = {
165. .platform_data = &resources_gpio_i2c,
166. },
167. };
168.
169. 其中第一个结构体中sda_pin和scl_pin正是开发板上对应的gpio口(data线和clock线),udelay是与具体芯片时钟相关的参数,需要参考具体的datasheet。下面的两个open_drain是表明两个管脚是否是开漏电路,如果是则填1,否则填0。下面一个机构体中需要注意name应该填写i2c-gpio,另外id要注意设定为2,因为系统当中已经有两个I2C设备了。可以在当前文件中找到,另外也可以在设备启动之后用adb shell进入文件系统进行查看。
170.
171. 另外需要在该文件中添加上需要的头文件:#include <linux/i2c-gpio.h>。在头文件devices.h中添加上设备结构体的声明,extern struct platform_device gpio_device_i2c;否则编译过程会报错
172.
173. 然后将gpio_device_i2c放在board-msm7x27.c的数组devices中,形式请参考该数组中其他的设备。
174.
175. 最后还需要在该文件中对相关设备进行注册,比如添加如下代码:
176.
177. static struct i2c_board_info i2c_gpio_devices[] = {
178. {
179. I2C_BOARD_INFO("tritonFN", 0x39),
180. .irq = MSM_GPIO_TO_INT(107),
181. },
182. };
183. 然后再用i2c_register_board_info对其进行注册:
184.
185. i2c_register_board_info(2, i2c_gpio_devices, ARRAY_SIZE(i2c_gpio_devices));
186.
187. 这样就完成了模拟步骤,可以直接用系统的I2C相关的注册等方法对设备进行注册和读写操作。
|
|