Enlace del árbol de dispositivos: no puedo hacer funcionar mi dispositivo táctil

0

Tengo una pantalla táctil que no funciona el panel táctil. Utiliza i2c.

Este es el controlador: goodix.c .

Así es como debo agregar el nodo al árbol de dispositivos: goodix.txt

Este es el árbol de dispositivos: imx6qdl-sb-fx6.dtsi

Y este es el nodo que puse como hijo de /i2cmux/i2c@0 :

            gt9271@XX {
                compatible = "goodix,gt9271";
#if GOODIX_5D
                reg = <0x5d>;
#else
                reg = <0x14>;
#endif
                interrupt-parent = <&gpio1>;
                interrupts = <4 0>;
                irq-gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
                reset = <&pca9555 11 GPIO_ACTIVE_LOW>; 
            };

El controlador se carga correctamente:

root@cm-fx6:~# dmesg | grep Goodix
[    4.811992] Goodix-TS 3-0014: ID 9271, version: 1020
[    4.828035] Goodix-TS 3-0014: Invalid config, using defaults
[    4.832665] input: Goodix Capacitive TouchScreen as /devices/soc0/soc/2100000.aips-bus/21a0000.i2c/i2c-0/i2c-3/3-0014/input/input0

Pero no hay interrupciones de generación cuando toco. La fase de inicialización (verificar la función goodix_reset ) no se realiza como debería. Esto es lo que debería ver (con un osciloscopio) durante el encendido: enlace . Pero los pines INT y RESET permanecen ALTOS en todo momento.

Escribí reset en lugar de reset-gpios como se describe en la documentación porque de lo contrario, obtengo un error al intentar obtener el pin. El error es -16, lo que significa que el recurso está ocupado, porque también se está usando pca9555 11 en otro dispositivo (verifique el nodo mipi-dsi-reset ). Por cierto, pca9555 es un controlador gpio auxiliar.

¿Alguna pista sobre lo que está sucediendo y por qué los pines no actúan como lo dicta el conductor? Ya se ha descartado como un problema de conexión: si no cargo el controlador y trato de configurar gpio4 en 1 o 0, veo que se refleja en el pin (ambos lados).

    
pregunta anat0lius

2 respuestas

0

Lo tengo con una solución.

Con este nodo de árbol de dispositivos:

    gt9271@XX {
        compatible = "goodix,gt9271";
        reg = <0x14>;
        interrupt-parent = <&gpio1>;
        interrupts = <4 0>;
        irq-gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
        resets = <&lcd_reset>; 
    };

    //...

    lcd_reset: mipi_dsi_reset: mipi-dsi-reset {
        compatible = "gpio-reset";
        reset-gpios = <&pca9555 11 GPIO_ACTIVE_LOW>;
        reset-delay-us = <10000>;  //I've increased it from 100 to 10000us
        gpio-can-sleep;
        #reset-cells = <0>;
   };

En el controlador, use device_reset() de reset.h en lugar de controlar manualmente el pin de reinicio.

/**
 * goodix_reset - Reset device during power on
 *
 * @ts: goodix_ts_data pointer
 */
static int goodix_reset(struct goodix_ts_data *ts)
{
    int error;

    /* begin select I2C slave addr */
    // error = gpiod_direction_output(ts->gpiod_rst, 0);
    error = device_reset(&ts->client->dev);

Esto significa comentar la parte en la que intenta obtener reset-gpios del árbol de dispositivos (ver goodix_get_gpio_config() y todas las referencias ts->gpiod_rst también.

    
respondido por el anat0lius
0

Si el pin GPIO es usado por otro dispositivo, obtendrá un error de ocupado del dispositivo. Compruebe si algún otro dispositivo lo está utilizando.

Puedes probar cualquiera de los siguientes:

No cargue el otro controlador que usa el GPIO que está intentando usar en su controlador de pantalla táctil, ya sea sin incluir el otro controlador o eliminar la otra información relacionada con el controlador del árbol de dispositivos (dtsi) o Use un pin GPIO alternativo para su pantalla táctil que no se usa para otros fines mientras usa la pantalla táctil.

    
respondido por el Karthik Balaguru

Lea otras preguntas en las etiquetas