Uruchomienie wyświetlacza jest identyczne jak w tym poście. Różnica polega na zmianie zastosowanego kontrolera panelu dotykowego.
Obsługa panelu dotykowego:
W celu uruchomienia panelu dotykowego należy zmodyfikować plik *.dts, gdzie dodajemy informację o pinach int oraz reset:
- pinctrl_ilitek_ili2130: ilitek_ts_i2c {
- fsl,pins = <
- MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x130b0 /*PAD_CTRL_HYS_PD*/ /*SODIMM 107 - "INT"*/
- MX6QDL_PAD_SD2_DAT1__GPIO1_IO14 0x80000000 /*PAD_CTRL_NO*/ /*SODIMM 106 - "RESET"*/
- >;
- };
Należy także wprowadzić informację o sterowniku panelu dotykowego:
- /*
- * I2C: I2C3_SDA/SCL on SODIMM 194/196
- * (e.g. RTC on carrier board)
- */
- &i2c3 {
- status = "okay";
- /* M41T0M6 real time clock on carrier board */
- rtc_i2c: rtc@68 {
- compatible = "st,m41t0";
- reg = <0x68>;
- };
- /* Ilitek ILI2130 touchscreen driver */
- ilitek_ili2130: ilitek_ts_i2c@41 {
- compatible = "ilitek,ili2130", "ilitek,ili2131", "ilitek,ili2132",
- "ilitek,ili2316", "ilitek,ili2322", "ilitek,ili2323", "ilitek,ili2326",
- "ilitek,ili2520", "ilitek,ili2521";
- reg = <0x41>;
- interrupt-parent = <&gpio2>;
- interrupts = <24 IRQ_TYPE_EDGE_FALLING>;
- reset-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
- pinctrl-names = "default";
- pinctrl-0 = <&pinctrl_ilitek_ili2130>;
- };
- };
Kolejnym elementem jest wykonanie zmian w plikach:
linux-toradex\drivers\input\touchscreen\KConfig
Należy dołożyć informację o kontrolerze (link):
- config TOUCHSCREEN_ILITEK
- tristate "Ilitek I2C 213X/23XX/25XX/Lego Series Touch ICs"
- depends on I2C
- help
- Say Y here if you have touchscreen with ILITEK touch IC,
- it supports 213X/23XX/25XX and other Lego series.
- If unsure, say N.
- To compile this driver as a module, choose M here: the
- module will be called ilitek_ts_i2c.
linux-toradex\drivers\input\touchscreen\Makefile
Należy dołożyć konfigurację wraz z nazwą pliku sterownika (link):
- obj-$(CONFIG_TOUCHSCREEN_ILITEK) += ilitek_ts_i2c.o
oraz dołożenie sterownika:
linux-toradex\drivers\input\touchscreen\ilitek_ts_i2c.c
Sterownik można pobrać pod tym adresem.
W opisanym sterowniku wykorzystano funkcję devm_device_add_group(). W związku z tym, że wykorzystuje jądro linuxa w wersji 4.9.220 to należy zamienić ją na sysfs_create_group(). Nowa nazwa funkcji jest wymagana dla jądra systemu w nowszej wersji.
Jeśli ta zmiana nie zostanie wykonana, to podczas kompilacji modułów zostanie wyświetlony następujący komunikat:
- drivers/input/touchscreen/ilitek_ts_i2c.c: W funkcji ‘ilitek_ts_i2c_probe’:
- drivers/input/touchscreen/ilitek_ts_i2c.c:599:10: error: implicit declaration of function ‘devm_device_add_group’; did you mean ‘devres_release_group’? [-Werror=implicit-function-declaration]
- error = devm_device_add_group(dev, &ilitek_attrs_group);
- ^~~~~~~~~~~~~~~~~~~~~
- devres_release_group
- cc1: wybrane ostrzeżenia będą traktowane jako błędy
Następnie podczas przygotowywania kernela należy zaznaczyć opcję:
Device Drivers -> Input device support -> Touchscreens -> Ilitek I2C 213X/23XX/25XX/Lego Series Touch ICs = "M"
Dalej generowany jest obraz systemu, zgodnie z opisem w tym poście.
Poniższym poleceniem sprawdzam czy urządzenie jest widziane w systemie. Musi być ono obsługiwane przez sterownik systemowy oraz, że istnieje przypisane do niego zdarzenie.
- root@colibri-imx6:~# less /proc/bus/input/devices
- I: Bus=0019 Vendor=0001 Product=0001 Version=0100
- N: Name="gpio-keys"
- P: Phys=gpio-keys/input0
- S: Sysfs=/devices/soc0/gpio-keys/input/input0
- U: Uniq=
- H: Handlers=kbd event0
- B: PROP=0
- B: EV=3
- B: KEY=8000 0 0 0 0
- I: Bus=0018 Vendor=0000 Product=0000 Version=0000
- N: Name="ilitek_ts"
- P: Phys=
- S: Sysfs=/devices/soc0/soc/2100000.aips-bus/21a8000.i2c/i2c-2/2-0041/input/input1
- U: Uniq=
- H: Handlers=mouse0 event1
- B: PROP=2
- B: EV=b
- B: KEY=400 0 0 0 0 0 0 0 0 0 0
- B: ABS=2608000 3
Po instalacji systemu na module, sterownik należy aktywować następującymi poleceniami:
- modprobe ilitek_ts_i2c
- echo 'ilitek_ts_i2c' >/etc/modules-load.d/ilitek_ts_i2c.conf
Następnie można przetestować działanie dotyku, wykorzystując
- root@colibri-imx6:~# ls -l /dev/input/event*
- crw-rw---- 1 root input 13, 64 Oct 9 13:33 /dev/input/event0
- crw-rw---- 1 root input 13, 65 Oct 9 13:33 /dev/input/event1
Powyżej mamy dwa zdarzenia obsługujące panel dotykowy. Pierwszy z nich odpowiada za układ umieszczony na płycie Colibri. Drugi jest wykorzystywanym kontrolerem panelu dotykowego.
Sprawdzenie odpowiedzi od panelu wykonujemy następującym poleceniem:
- root@colibri-imx6:~# evtest /dev/input/event1
- Input driver version is 1.0.1
- Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
- Input device name: "ilitek_ts"
- Supported events:
- Event type 0 (EV_SYN)
- Event type 1 (EV_KEY)
- Event code 330 (BTN_TOUCH)
- Event type 3 (EV_ABS)
- Event code 0 (ABS_X)
- Value 2047
- Min 0
- Max 16384
- Event code 1 (ABS_Y)
- Value 16204
- Min 0
- Max 16384
- Event code 47 (ABS_MT_SLOT)
- Value 0
- Min 0
- Max 4
- Event code 53 (ABS_MT_POSITION_X)
- Value 0
- Min 0
- Max 16384
- Event code 54 (ABS_MT_POSITION_Y)
- Value 0
- Min 0
- Max 16384
- Event code 57 (ABS_MT_TRACKING_ID)
- Value 0
- Min 0
- Max 65535
- Properties:
- Property type 1 (INPUT_PROP_DIRECT)
- Testing ... (interrupt to exit)
- Event: time 1696935839.803505, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 12
- Event: time 1696935839.803505, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 3829
- Event: time 1696935839.803505, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 8628
- Event: time 1696935839.803505, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
- Event: time 1696935839.803505, type 3 (EV_ABS), code 0 (ABS_X), value 3829
- Event: time 1696935839.803505, type 3 (EV_ABS), code 1 (ABS_Y), value 8628
- Event: time 1696935839.803505, -------------- SYN_REPORT ------------
- Event: time 1696935839.949429, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
- Event: time 1696935839.949429, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
- Event: time 1696935839.949429, -------------- SYN_REPORT ------------
- Event: time 1696935840.438553, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 13
- Event: time 1696935840.438553, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 5120
- Event: time 1696935840.438553, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 5821
- Event: time 1696935840.438553, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
- Event: time 1696935840.438553, type 3 (EV_ABS), code 0 (ABS_X), value 5120
- Event: time 1696935840.438553, type 3 (EV_ABS), code 1 (ABS_Y), value 5821
- Event: time 1696935840.438553, -------------- SYN_REPORT ------------
- Event: time 1696935840.541655, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
- Event: time 1696935840.541655, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
- Event: time 1696935840.541655, -------------- SYN_REPORT ------------