Доброго времени суток, форумчане. Приобрёл на AliExpress LCD дисплей 3.5" KeDei (модель KD0350AV02. Фото - https://auctions.afimg.jp/j1107751807/ya/image/j1107751807.1.jpg). Данная модель имеет на борту схему RTD2660H, отвечающую за вывод по HDMI и микросхему XPT2046, отвечающую за работу тачскрина и взаимодействие по SPI с одноплатным компьютером. Использую одноплатный компьютер Orange Pi PC (allwinner,sun8i-h3). Решил не заморачиваться со сборкой системы и установил готовую Armbian 24.11.0 на базе ядра Linux 6.6.54-current-sunxi (на 6 ноября это была последняя доступная версия Armbian для данного SBC). Почитав форумы в сети, я заметил, что с этой схемой используют драйвер ADS7846, который в данном ядре уже был встроен. Суть в том, что HDMI подрубился «из коробки», а тачскрин ни в какую не хочет, какой бы Device Tree и конфиг я не использовал. Device Tree для данной микросхемы пришлось добавить в overlay, потому что его изначально не было. Система подкинула драйвер, но при тестировании касания тачскрина не дают никакого результата. В сети есть гайды по похожим дисплеям для систем и ядер более старой версии, есть также Device Tree и конфиги для них, но они разнятся с учётом версий. Возможно я что-то не дописал или упустил из виду. Поэтому прилагаю ниже части лога загрузчика, ядра, конфиг и Device Tree и прошу что-то подсказать в данном направлении знающих людей.
Конфиг armbianEnv.txt:
verbosity=1
bootlogo=true
console=serial
disp_mode=640x480p60
overlay_prefix=sun8i-h3
rootfstype=ext4
extraargs=drm_kms_helper.edid_firmware=HDMI-A-1:edid/640x480.bin video=HDMI-A-1:640x480-24@60
overlays=spi-add-cs1 spi-jedec-nor spi-spidev usbhost2 usbhost3 w1-gpio ads7846
param_spidev_spi_bus=0
param_spidev_spi_cs=1
video-mode=sunxi:1024x600,monitor=hdmi,hpd=1,edid=1
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
Device Tree для ADS7846:
/dts-v1/;
/plugin/;
/ {
compatible = "allwinner,sun4i-a10", "allwinner,sun7i-a20", "allwinner,sun8i-h3", "allwinner,sun50i-a64", "allwinner,sun50i-h5";
fragment@0 {
target = <&pio>;
__overlay__ {
ads7846_pins: ads7846_pins {
pins= "PA2";
function = "irq";
};
};
};
fragment@1 {
target = <&spi0>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
ads7846@0 {
compatible = "ti,ads7846";
reg = <0x1>; /* Chip Select 1 */
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&ads7846_pins>;
spi-max-frequency = <2000000>;
interrupt-parent = <&pio>;
interrupts = <0 2 2>; /* PA2 IRQ_TYPE_EDGE_FALLING */
pendown-gpio = <&pio 0 2 0>; /* PA2 */
/* driver defaults, optional */
ti,x-min = /bits/ 16 <0>;
ti,y-min = /bits/ 16 <0>;
ti,x-max = /bits/ 16 <0x0FFF>;
ti,y-max = /bits/ 16 <0x0FFF>;
ti,pressure-min = /bits/ 16 <0>;
ti,pressure-max = /bits/ 16 <0xFFFF>;
ti,x-plate-ohms = /bits/ 16 <400>;
};
};
};
fragment@2 {
target = <&spi0>;
__overlay__ {
status = "disabled";
};
};
};
Вывод загрузчика о том, что файл дерева был подхвачен:
Found mainline kernel configuration
35117 bytes read in 12 ms (2.8 MiB/s)
Working FDT set to 43000000
1177 bytes read in 14 ms (82 KiB/s)
Applying kernel provided DT overlay sun8i-h3-spi-add-cs1.dtbo
804 bytes read in 15 ms (51.8 KiB/s)
Applying kernel provided DT overlay sun8i-h3-spi-jedec-nor.dtbo
804 bytes read in 14 ms (55.7 KiB/s)
Applying kernel provided DT overlay sun8i-h3-spi-spidev.dtbo
504 bytes read in 14 ms (35.2 KiB/s)
Applying kernel provided DT overlay sun8i-h3-usbhost2.dtbo
504 bytes read in 14 ms (35.2 KiB/s)
Applying kernel provided DT overlay sun8i-h3-usbhost3.dtbo
777 bytes read in 14 ms (53.7 KiB/s)
Applying kernel provided DT overlay sun8i-h3-w1-gpio.dtbo
1378 bytes read in 16 ms (84 KiB/s)
Applying kernel provided DT overlay sun8i-h3-ads7846.dtbo
4185 bytes read in 15 ms (272.5 KiB/s)
Applying kernel provided DT fixup script (sun8i-h3-fixup.scr)
## Executing script at 45000000
Kernel image @ 0x42000000 [ 0x000000 - 0x893d88 ]
lsmod | grep -iP ‘(spi|ads)’:
ads7846 20480 0
dmesg | grep -iP ‘(spi|ads)’:
[ 62.843560] ads7846@0 enforce active low on GPIO handle
[ 62.844389] sun6i-spi 1c68000.spi: chipselect 1 already in use
[ 62.844409] spi_master spi0: spi_device register error /soc/spi@1c68000/spidev@0
[ 62.844439] spi_master spi0: Failed to create SPI device for /soc/spi@1c68000/spidev@0
[ 73.221749] ads7846 spi0.1: supply vcc not found, using dummy regulator
[ 73.226083] ads7846 spi0.1: touchscreen, irq 43
[ 73.236311] input: ADS7846 Touchscreen as /devices/platform/soc/1c68000.spi/spi_master/spi0/spi0.1/input/input4
evtest не выводит строки, когда я взаимодействую с дисплеем. Соответственно система ругается, что не удалось создать устройство spidev, поскольку уже занят данный адрес. В других версиях это исправляли в Device Tree, но я не особо силён в Device Tree и его параметрах, поэтому прошу помощи.