Для того, чтобы на BBB появилось соответствующее устройство надо включить сборку следующих модулей при конфигурировании ядра (у меня 4.1.0-rc1-bone0):
1) ti_am335x_tscadc.ko(CONFIG_MFD_TI_AM335X_TSCADC);
2) ti_am335x_tsc.ko(CONFIG_TOUCHSCREEN_TI_AM335X_TSC);
3) ti_am335x_adc.ko(CONFIG_TI_AM335X_ADC).
Модули лучше сделать встроенными (build-in): соответствующие опции будут выделены звездочкой (*). Можно сделать загружаемыми (loadable) - соответствующие опции при конфигурировании будут выделены (M). Модули adc и tsc зависят от tscadc, поэтому настойки типа сборки касаются сразу всех модулей.
2) ti_am335x_tscadc.ko(CONFIG_MFD_TI_AM335X_TSCADC)
1) ti_am335x_tscadc.ko(CONFIG_MFD_TI_AM335X_TSCADC);
2) ti_am335x_tsc.ko(CONFIG_TOUCHSCREEN_TI_AM335X_TSC);
3) ti_am335x_adc.ko(CONFIG_TI_AM335X_ADC).
Модули лучше сделать встроенными (build-in): соответствующие опции будут выделены звездочкой (*). Можно сделать загружаемыми (loadable) - соответствующие опции при конфигурировании будут выделены (M). Модули adc и tsc зависят от tscadc, поэтому настойки типа сборки касаются сразу всех модулей.
Необходимые опции menuconfig:
1) ti_am335x_adc.ko(CONFIG_TI_AM335X_ADC)
Device Drivers ---> [*] Industrial I/O support ---> [*] Enable buffer support within IIO <*> Industrial I/O lock free software ring Analog to digital converters ---> <*> TI's AM335X ADC driver
Device Drivers ---> Multifunction device drivers ---> <*> TI ADC / Touch Screen chip support
3) ti_am335x_tsc.ko(CONFIG_TOUCHSCREEN_TI_AM335X_TSC)
Device Drivers --->Input device support --->-*- Generic input layer (needed for keyboard, mouse, ...) -*- Support for memoryless force-feedback devices {M} Polled input device skeleton <M> Sparse keymap support library <M> Matrix keymap support library *** Userland interfaces *** < > Mouse interface < > Joystick interface <*> Event interface <*> Event debugging < > Input Power Event -> APM Bridge *** Input Device Drivers *** [ ] Keyboards ---- [ ] Mice ---- [ ] Joysticks/Gamepads ---- [*] Tablets ---> [*] Touchscreens ---> <*> <*> TI Touchscreen Interface
В device tree для корректной работы tsc-контроллера надо внести следующие исправления:
1) файл bb-kernel/KERNEL/arch/arm/boot/dts/am33xx.dtsi :
...
tscadc: tscadc@44e0d000 {
compatible = "ti,am3359-tscadc";
reg = <0x44e0d000 0x1000>;
interrupt-parent = <&intc>;
interrupts = <16>;
ti,hwmods = "adc_tsc";
status = "okay";
tsc {
compatible = "ti,am3359-tsc";
ti,wires = <4>;
ti,x-plate-resistance = <200>;
ti,coordinate-readouts = <5>;
ti,wire-config = <0x00 0x11 0x22 0x33>;
ti,charge-delay = <0x400>;
};
adc {
compatible = "ti,am3359-adc";
ti,adc-channels = <4 5 6 7>;
};
};
...
После сборки обновленного ядра должно появиться устройство /dev/input/event[0..9] (у меня /dev/input/event0).
Проверить получение данных с панели можно следующим образом:
cat /dev/input/event0 | hexdump
Подключение тачпанели через промежуточную плату к BBB произведем следующим образом:
1) TSMx (41 X10) - AIN0 (39 P9)
2) TSPx (39 X10) - AIN1 (40 P9)
3) TSMy (42 X10) - AIN2 (37 P9)
4) TSPy (40 X10) - AIN3 (38 P9)
Настройка TSC controller производится через devicetree, а из полученного бинарника считывают следующие исходные файлы модулей:
1) заголовочный файл с определением констант регистров ADCTSC controller'а - /media/Data/Kernel/bbb/bb-kernel/KERNEL/include/linux/mfd/ti_am335x_tscadc.h;
2) конфигурирование tscadc - /media/Data/Kernel/bbb/bb-kernel/KERNEL/drivers/mfd/ti_am335x_tscadc.c;
3) конфигурирование tsc - /media/Data/Kernel/bbb/bb-kernel/KERNEL/drivers/input/touchscreen/ti_am335x_tsc.c.
Для корректной работы курсора в qt-приложении, надо написать специальный драйвер, преобразующий информацию, полученную с /dev/input/event0 в перемещения курсора на экране.
Использованный материал:
1) http://processors.wiki.ti.com/index.php/Linux_Core_ADC_User%27s_Guide
2) http://www.farnell.com/datasheets/1780810.pdf
3) http://ftp1.digi.com/support/documentation/90000944_A.pdf