70. if(ret)
71. {
72. printk(KERN_ERR "IRQ%d error %d\n", IRQ_TC, ret);
73. ret = -EINVAL;
74. goto err_noirq;
75. }
76.
77. /*给输入设备申请空间,input_allocate_device 定义在 input.h 中*/
78. ts_dev = input_allocate_device();
79.
80. /*下面初始化输入设备,即给输入设备结构体 input_dev 的成员设置
值。
81. evbit 字段用于描述支持的事件,这里支持同步事件、按键事件、绝对
坐标事件,
82. BIT 宏实际就是对 1 进行位操作,定义在 linux/bitops.h 中*/
83. ts_dev->evbit[0] = BIT(EV_SYN) | BIT(EV_KEY) | BIT(EV_ABS
);
84.
85. /*keybit 字段用于描述按键的类型,在 input.h 中定义了很多,
86. 这里用 BTN_TOUCH 类型来表示触摸屏的点击*/
87. ts_dev->keybit[BITS_TO_LONGS(BTN_TOUCH)] = BIT(BTN_TOUCH)
;
88.
89. /*对于触摸屏来说,使用的是绝对坐标系统。这里设置该坐标系统中 X
和 Y 坐标的最小值和最大值
90. (0-1023 范围)ABS_X 和 ABS_Y 就表示 X 坐标和 Y 坐标,ABS_PRESSURE
就表示触摸屏是按下还是抬起状态*/
91. input_set_abs_params(ts_dev, ABS_X, 0, 0x3FF, 0, 0);
92. input_set_abs_params(ts_dev, ABS_Y, 0, 0x3FF, 0, 0);
93. input_set_abs_params(ts_dev, ABS_PRESSURE, 0, 1, 0, 0);
94.
95. /*以下是设置触摸屏输入设备的身份信息,直接在这里写死。
96. 这些信息可以在驱动挂载后在/proc/bus/input/devices 中查看到
*/
97. ts_dev->name = DEVICE_NAME; /*设备名称*/
98. ts_dev->id.bustype = BUS_RS232; /*总线类型*/
99. ts_dev->id.vendor = 0xDEAD; /*经销商 ID 号*/
100. ts_dev->id.product = 0xBEEF; /*产品 ID 号*/
101. ts_dev->id.version = 0x0101; /*版本 ID 号*/
102.
103. /*好了,一些都准备就绪,现在就把 ts_dev 触摸屏设备注册到输入子
系统中*/
104. input_register_device(ts_dev);
105.