Linux之Input子系统
子系统框架
@startmindmap
* Input
** 设备驱动层
*** 转化统一事件,上报输入核心(Input Core)
** Input Core
** 事件层
*** 和用户空间交互(/dev/input)
@endmindmap
驱动主要工作:
- 设备注册
//注册输入设备函数: int input_register_device(struct input_dev *dev) //注销输入设备函数: void input_unregister_device(struct input_dev *dev)
- 初始化(事件支持):
set_bit()//告诉input输入子系统支持哪些事件,哪些按键,例如: /* 设置按键能产生哪类事件 */ set_bit(EV_KEY,buttons_dev->evbit); /* 设置能产生这类操作的哪些事件 */ set_bit(KEY_ENTER,buttons_dev->keybit); set_bit(KEY_LEFTSHIFT,buttons_dev->keybit); /* struct input_dev中有两个成员为: evbit:事件类型(包括EV_RST,EV_REL,EV_MSC,EV_KEY,EV_ABS,EV_REP等) 在input.h中有这些类的定义: #define EV_SYN 0x00 //同步事件 #define EV_KEY 0x01 //按键类,如键盘或按钮 #define EV_REL 0x02 //绝对结果,如鼠标设备 #define EV_ABS 0x03 //绝对位移类 ,如操纵杆、书写板 #define EV_MSC 0x04 //其他类 #define EV_SW 0x05 //开关事件 #define EV_LED 0x11 //LED或其他指示设备 #define EV_SND 0x12 //声音类,如蜂鸣器 #define EV_REP 0x14 //重复类,允许按键自重复 #define EV_FF 0x15 //力反馈 #define EV_PWR 0x16 //电源管理事件 #define EV_FF_STATUS 0x17 #define EV_MAX 0x1f #define EV_CNT (EV_MAX+1) keybit:按键类型(当事件类型为EV_KEY时包括BTN_LEFT,BTN_0,BTN_1,BTN_MIDDLE等) */
- 报告事件:
用于报告EV_KEY
,EV_REL
,EV_ABS
事件的函数分别为:void input_report_key (struct input_dev *dev, unsigned int code, int value) void input_report_rel (struct input_dev *dev, unsigned int code, int value) void input_report_abs (struct input_dev *dev, unsigned int code, int value)
- 报告结束:
input_sync() //同步用于告诉input core子系统报告结束。
以汇顶TP为例
平台:RK3399-Android7.1(Kernel:v4.4.103)
路径:kernel/drivers/input/touchscreen
过程:DTS("goodix,gt9xx")->I2C.compatible(of_device)->probe->input_register_device
关键步骤:
probe
中初始化触摸屏参数(I2C操作),下发或者使用默认参数通过
input_set_abs_params
初始化一些屏的参数,主要是X,Y最大值等通过
set_bit
初始化事件类型等input_register_device
注册输出设备请求中断(
gtp_request_irq
),创建处理线程,中断线程化(devm_request_threaded_irq
)中断来之后,在中断线程(
goodix_ts_irq_handler
)中,会先禁用中断(gtp_irq_disable
),然后开始工作队列(queue_work
),goodix_ts_work_func
中读取参数参数(I2C操作),处理参数,上报(input_report_abs
),然后结束上报(input_sync
),使能中断
参考
https://blog.csdn.net/qq_35865125/article/details/80637809
https://www.cnblogs.com/lifexy/p/7542989.html
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DD'Notes!
评论