我正在使用来自 Congatech 的 BSP,它使用 Freescale Linux 内核 (linux-2.6-imx)。触摸屏来自 Fortrend,但它报告自己为 Advanced Silicon CoolTouch(供应商 ID 0x2619,设备 ID 0x5610)。
有什么作用:
当您将触摸屏插入 USB 端口时,usbhid 驱动程序会将其连接到 Linux 事件系统。我可以看到 /proc/sys/input/devices 中列出的设备,getevent 向我显示它支持的事件,我可以从中监控实时事件。
但是,触摸屏对 Android 界面完全没有影响(例如运行指针定位工具)。
在我广泛的谷歌搜索中,我遇到了一些解决方案,但都不起作用。例如,建议设备需要由 hid-multitouch 驱动程序处理。
我所做的是使用 MT_CLS_DEFAULT 将此设备添加到 hid_device_id 列表中。我还修改了 hid-multitouch 驱动程序,以便它在驱动程序初始化和探测功能期间打印。永远不会调用探测函数。
我发现更多信息表明 usbhid 驱动程序需要忽略该设备才能让 hid-multitouch 驱动程序看到它。因此,我将两个驱动程序都构建为模块,让我可以像这样启动驱动程序:
insmod /system/lib/modules/usbhid.ko quirks=0x2619:0x5610:0x4
insmod /system/lib/modules/hid-multitouch.ko
现在,当您插入 usbhid 驱动程序时,它会忽略触摸屏,但不会再次调用 hid-multitouch 驱动程序的探测函数。
在我的 hid-multitouch 驱动程序更改中,我已经四次检查供应商 ID 和设备 ID 是否正确。
// hid-ids.h
#define USB_VENDOR_ID_ADVANCEDSILICONSA 0x2619
#define USB_DEVICE_ID_ADVANCEDSILICONSA_5610 0x5610
// hid-multitouch.c
/* Advanced Silicon panels */
{ .driver_data = MT_CLS_DEFAULT,
HID_USB_DEVICE(USB_VENDOR_ID_ADVANCEDSILICONSA,
USB_DEVICE_ID_ADVANCEDSILICONSA_5610) },
我从这里去哪里?