首页 理论教育TI芯片输入设备的实现详解

TI芯片输入设备的实现详解

【摘要】:对DM 3730的开发板,相关的输入设备是电源管理芯片中的键盘矩阵,这里对相关的输入设备驱动进行分析。在硬件介绍中已经见到DM 3730与电源管理芯片是通过I2C总线进行连接的,所以该键盘驱动需要建立在I2C总线操作之上。具体获得相关信息的方法都是通过类似twl4030_read_kp_matrix_state的操作完成的,其中会进行实际的I2C总线操作,具体的细节会在总线部分进行介绍。在驱动获得硬件的信息后就是向输入设备框架汇报相应的事件,框架会上传给even than-dler,最终被用户读取。

对DM 3730的开发板,相关的输入设备是电源管理芯片中的键盘矩阵,这里对相关的输入设备驱动进行分析。

在硬件介绍中已经见到DM 3730与电源管理芯片是通过I2C总线进行连接的,所以该键盘驱动需要建立在I2C总线操作之上。

相应的驱动首先是platform_driver,细节如下:

其中probe接口是了解驱动的入口,它是在总线进行匹配之后进行的,主要进行根据设备信息申请资源以及驱动相关的初始化。下面进行详细分析:

从中可见,主要的流程就是针对输入设备框架进行input_dev的相关初始化和注册,另外就是注册中断。相应的platform_device是通过add_numbered_child来创建的,原因是由于电源管理芯片实际包含音频处理、键盘、USB phy等多种功能,在Linux内核中将这类设备归为mfd(即multi function device),实际还是一个一个单独的设备,但是通过统一的接口进行操作,具体就不进行详述了。(www.chuimin.cn)

回到驱动,当有按键输入时就会触发中断,进而执行驱动的中断处理函数,内容如下:

其中主要的操作就是读取扫描码,具体由twl4030_kp_scan来实现。

对键盘来说按下与抬起都是事件,所以在进行事件检查时是根据变化进行确认,而不是简单的根据值进行确认。具体获得相关信息的方法都是通过类似twl4030_read_kp_matrix_state的操作完成的,其中会进行实际的I2C总线操作,具体的细节会在总线部分进行介绍。在驱动获得硬件的信息后就是向输入设备框架汇报相应的事件,框架会上传给even than-dler,最终被用户读取。这样输入的通道就从硬件到应用层打通了。