Подключение сенсорного экрана

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