文章目录
输入子系统驱动分析
之前分析触摸屏驱动仅仅从触摸屏驱动层面进行的分析,没有结合输入子系统进行分析,分析不够全面,这里首先对输入子系统进行一定程度的分析,然后结合输入子系统,对触摸屏驱动进行进一步的分析。
输入子系统整体分析
经过查询一系列的资料,对输入子系统有了一定的概念,首先讲一下关于输入子系统存在的作用。
输入子系统能够为输入设备提供很多的接口,这么做有很多的好处。
1、能够为驱动提供很多的接口,驱动可以调用这些接口,就可以节省时间,不再重复的去实现相同的接口。
2、用户层要实现功能也只需要调用事件处理层的接口,来是相应的功能。
针对以上优点进行详细的分析。
多个层面之间的联系
初始化过程
首先分析驱动层与输入子系统核心层的联系。
继续以触摸屏驱动为例,驱动层与输入子系统之间的联系是在probe函数中实现的。
input_dev = input_allocate_device();
if (!input_dev) {
dev_err(&pdev->dev, "failed to allocate input device.\n");
err = -ENOMEM;
goto err_free_mem;
}
ts_dev->input = input_dev;
这是probe函数中申请的input_dev结构体,并且将结构体赋予给了ts_dev结构体,也就是说触摸屏设备结构体中包含了input结构体的信息。
input_dev->name = "Resistance_ts";
input_dev->dev.parent = &pdev->dev;
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
input_set_abs_params(input_dev, ABS_X,
ts_dev->x_min ? : 0,
ts_dev->x_max ? : MAX_12BIT,
0, 0);
input_set_abs_params(input_dev, ABS_Y,
ts_dev->y_min ? : 0,
ts_dev->y_max ? : MAX_12BIT,