Linux 触摸屏 (IIC驱动详解)

前言:

本文使用触摸屏iic驱动,驱动编写中要使用总线,设备,驱动分层的思想,IIC总线,触摸屏驱动,触摸屏设备,
 

IIC总线驱动

一般 SOC 的 I2C 总线驱动都是由半导体厂商编写的,比如 I.MX6U 的 I2C 适配器驱动 NXP 已经编写好了,这个不需要用户去编写。因此 I2C 总线驱动对我们这些 SOC 使用者来说是被屏蔽掉的,我们只要专注于 I2C 设备驱动即可。除非你是在半导体公司上班,工作内容就是写 I2C 适配器驱动。对于我们 I2C 设备驱动编写人来说,重点工作就是构建 i2c_driver,构建完成以后需要向,Linux 内核注册这个 i2c_driver。i2c_add_driver(&xxx_driver);用来注册IIC设备。

IIC设备驱动

        在使用设备树的时候,linux系统可以获取设备树,完成设备和驱动的匹配。不需要编写设备驱动,驱动中的 compatible 属性和设备中的 compatible 属性相匹配,因此驱动中对应的 probe 函数就会执行。
 

IIC驱动模板 

iic结构体:

Linux 触摸屏 (IIC驱动详解)_第1张图片

 Linux 触摸屏 (IIC驱动详解)_第2张图片

 IIC匹配

设备和驱动的匹配过程也是由 I2C 总线完成的,由IIC总线调用match函数完成匹配,以下是匹配的几种方式:
Linux 触摸屏 (IIC驱动详解)_第3张图片

常用的是有设备树(of_driver_match_device)和无设备( i2c_match_id)

1.of_driver_match_device 函数用于完成设备树设备和驱动匹配。比较 I2C 设备点的 compatible 属性和 of_device_id 中的 compatible 属性是否相等,如果相当的话就表示 I2C设备和驱动匹配。 

2.i2c_match_id 函数用于传统的、无设备树的 I2C 设备和驱动匹配过程。比较 I2C设备名字和 i2c_device_id 的 name 字段是否相等,相等的话就说明 I2C 设备和驱动匹配。

一般设备驱动为了兼容性都支持设备树和无设备树两种匹配方式。也就是第一种匹配方式一般都会存在,第三种和第四种只要存在一种就可以,一般用的最多的还是第四种,也就是直接比较驱动和设备的 name 字段,毕竟这种方式最简单了。name 属性用于传统的驱动与设备匹配,也就是检查驱动和设备的 name 字段是不是相同。
 

你可能感兴趣的:(linux,iic,嵌入式硬件)