Подключение сенсорного экрана¶
1. Введение¶
Здесь описываются действия, необходимые для подключения сенсорной панели (далее TP - touch panel) к модулю Штрих-ИМ через интерфейс I2C.
Драйвер TP загружается только после включения устройства и загрузки ядро Линукс, поэтому он не имеет кода для бутлоадера. Интеграция драйверов устройств ввода в Android 10.0 и kernel4.14 отличается от предыдущих версий. Драйвер больше не компилируется статически в ядро Линукс. Вместо этого драйвер загружается, в виде xxx.ko файла. Поэтому расположение кода и правила компиляции отличаются от предыдущих версий.
Для подключения необходимо иметь следующую информацию, которую можно получить у производителя сенсорного экрана:
Документацию на сенсор и контроллер
Параметры инициализации, записываемые в Device Tree и их возможные значения
Уровни сигналов сенсорного экрана, таких как RST, INT и соответствующие им линии gpio модуля, к которым эти сигналы будут подключены
Исходный код драйвера сенсорного экрана
Примечание
В этом документе будет описываться сенсорный экран HCT775GG070B-V0, используемый на отладочной плате модуля Штрих-ИМ. Данный сенсорный экран содержит контроллер Goodix GT911.
Портирование драйвера
Исходные коды драйверов TP находятся в папке bsp/modules/input/touchscreen
Рассмотрим подключение TP на примере драйвера GT911 (папка bsp/modules/input/touchscreen/gt9xx/). Подключение других TP производится аналогичным образом.
Предполагается, что исходные коды драйвера расположены в этой папке.
Примечание
Далее .ko файл драйвера будет называться модулем, т.к. это динамически загружаемый модуль ядра Линукс. Набор файлов для сборки драйвера, включая конфигурационные файлы, Makefile, Android.mk и др. называется пакетом.
Скопируйте и модифицируйте файлы Android.mk и Кbuild, изменив в них название модуля.
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := gt9xx.ko
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
Кbuild
#
# Source List
#
KO_MODULE_NAME := gt9xx
KO_MODULE_PATH := $(src)
KO_MODULE_SRC :=
KO_MODULE_SRC += $(wildcard $(KO_MODULE_PATH)/*.c)
Добавление модуля в проект
Добавьте название модуля в список модулей проекта (для компиляции) в файле bsp/device/sharkle/androidq/sl8541e_1h10wifi5g_32b/sl8541e_1h10wifi5g_32b_base/modules.cfg
BSP_MODULES_LIST="
sample.ko
akm09911.ko
ltr_558als.ko
bmi160sum.ko
mali.ko
sprdwl_ng.ko
sprd_fm.ko
sprdbt_tty.ko
lis2dh.ko
sprd_sensor.ko
sprd_flash_drv.ko
sprd_camera.ko
sprd_cpp.ko
flash_ic_wd3610da.ko
gt9xx.ko
chsc5xxx.ko
"
Добавление модуля в список модулей SOC
Скомпилированный модуль должен быть помещен в раздел файловой системы, откуда загружаются все драйверы (файл socko.img). Добавляем наименование модуля в соответствующий список в файле device/sprd/sharkle/sl8541e_1h10wifi5g_32b/sl8541e_1h10wifi5g_32b_Natv.mk
PRODUCT_SOCKO_KO_LIST := \
$(BSP_KERNEL_MODULES_OUT)/akm09911.ko \
$(BSP_KERNEL_MODULES_OUT)/ltr_558als.ko \
$(BSP_KERNEL_MODULES_OUT)/bmi160sum.ko \
$(BSP_KERNEL_MODULES_OUT)/mali.ko \
$(BSP_KERNEL_MODULES_OUT)/sprdwl_ng.ko \
$(BSP_KERNEL_MODULES_OUT)/sprdbt_tty.ko \
$(BSP_KERNEL_MODULES_OUT)/sprd_fm.ko \
$(BSP_KERNEL_MODULES_OUT)/sprd_sensor.ko \
$(BSP_KERNEL_MODULES_OUT)/sprd_flash_drv.ko \
$(BSP_KERNEL_MODULES_OUT)/sprd_camera.ko \
$(BSP_KERNEL_MODULES_OUT)/sprd_cpp.ko \
$(BSP_KERNEL_MODULES_OUT)/gt9xx.ko \
$(BSP_KERNEL_MODULES_OUT)/chsc5xxx.ko \
$(BSP_KERNEL_MODULES_OUT)/flash_ic_wd3610da.ko
Добавление модуля в скрипт запуска
Модуль должен быть загружен в процессе запуска устройства. Для этого его необходимо добавить в скрипт запуска в раздел on boot в файле device/sprd/sharkle/sl8541e_1h10wifi5g_32b/rootdir/root/init.sl8541e_1h10wifi5g_32b.rc
on boot
insmod ${ro.vendor.ko.mount.point}/socko/gt9xx.ko
insmod ${ro.vendor.ko.mount.point}/socko/chsc5xxx.ko
Настройка Device Tree
TP обычно подключается к шине I2C. В соответствии с электрической схемой устройтсва и схемой подключения TP, внесите необходимые параметры в секцию соответствующего канала I2C в Device Tree. Для данного проекта TP подключен в каналу I2C3.
Секция Device Tree с описание канала I2C3 находится в файле bsp/kernel/kernel4.14/arch/arm/boot/dts/sl8541e-1h10wifi5g_32b-overlay.dts
&i2c3 {
status = "okay";
clock-frequency = <400000>;
goodix_gt9xx@5d {
compatible = "goodix,gt9xx";
reg = <0x5d>; // адрес i2c
interrupt-parent = <&ap_gpio>;
reset-gpios = <&ap_gpio 145 GPIO_ACTIVE_LOW>; // порт reset gpio
irq-gpios = <&ap_gpio 144 GPIO_ACTIVE_HIGH>; // порт int gpio
irq-flags = <2>; // 1 для срабатывания по фронту, 2 - по спаду
touchscreen-max-id = <11>;
touchscreen-size-x = <1024>; // максимальный размер по X
touchscreen-size-y = <600>; // максимальный размер по Y
touchscreen-max-w = <512>;
touchscreen-max-p = <512>;
goodix,slide-wakeup = <0>;
goodix,type-a-report = <0>;
goodix,driver-send-cfg = <0>;
goodix,resume-in-workqueue = <0>;
goodix,int-sync = <1>;
goodix,swap-x2y = <0>;
goodix,esd-protect = <0>;
goodix,auto-update-cfg = <0>;
goodix,power-off-sleep = <0>;
goodix,pen-suppress-finger = <0>;
vdd_ana-supply = <&vddcama>; // источник для питания ТР. В текущем проекте ТР питается от источника vddcama 2.8в
};
Сборка
Команда для сборки ядра Линукса, Device Tree и модулей драйверов. После ее выполнения будет создан образ boot.img и dtbo.img:
./make_super.sh
Далее для формирования образа socko.img необходимо выполнить
./make_all.sh