• # Micro-tuto dalle tactile mxt224

    Posté par . En réponse au message Dalle tactile i2c, driver et linux sur mini6410: comment l'utiliser?. Évalué à 1.

    Connecter la dalle tactile
    Tester la liaison i2c (et surtout retrouver l'adresse de la dalle - normalement 0x4b ou 0x4c - à faire dalle déconnectée puis connecté)
    Cross compiler i2c-tools et lancer un i2cdetect sur le bus i2c

    A partir des sources du noyau 3.0, récupérer et coller dans voss sources les fichiers suivants:
    /drivers/input/touchscreen/atmel_mxt_ts.c
    /include/linux/i2c/atmel_mxt_ts.h

    Ajouter les lignes suivantes au fichier /drivers/input/touchscreen/atmel/KConfig

    config TOUCHSCREEN_ATMEL_MXT
    tristate "Atmel mXT I2C Touchscreen"
    depends on I2C
    help
     Say Y here if you have Atmel mXT series I2C touchscreen,
     such as AT42QT602240/ATMXT224, connected to your system.
     If unsure, say N.
     To compile this driver as a module, choose M here: the
     module will be called atmel_mxt_ts. 
    
    

    Ajouter les lignes suivantes au fichier /drivers/input/touchscreen/atmel/Makefile

    obj-$(CONFIG_TOUCHSCREEN_ATMEL_MXT) += atmel_mxt_ts.o 
    
    

    Editer votre fichier décrivant votre plateforme (mach-xxx.c)

    static struct mxt_platform_data mxt_platform_data __initdata = {
     .config = NULL,
     .config_length = 0,
     .x_line = 18, 
     .y_line = 12,
     .x_size = 800,
     .y_size = 480,
     .blen = 0x1,
     .threshold = 0x28,
     .voltage = 3300000,
     .orient = MXT_DIAGONAL,
     .irqflags = IRQF_TRIGGER_FALLING
    };
    static struct i2c_board_info i2c_devs0[] __initdata = {
    [...]
     { I2C_BOARD_INFO("mXT224", 0x4b),
     .platform_data = &mxt_platform_data,
     .irq = IRQ_EINT(16),
     },
    [...] } 
    
    

    Note: On suppose q'un bus i2c est déjà présent et configuré...
    Ici l'id de l'irq câblée est 16... A adapter.

    Lancer la configuration du noyau

    make menuconfig 
    
    

    Activer la compilation du driver en mode noyau:
    Device Driver -> Input Device Support -> Touchscreen -> Atmel mXT I2C Touchscreen.

    Désactiver les drivers de la dalle actuelle si nécessaire
    Device Driver -> Input Device Support à Touchscreen -> Votre dalle

    cross-compiler (ex avc un arm)

    make CROSS_COMPILE=/chemin vers compilo/preefix_compil- 
    
    

    Reflasher le noyau puis démarrer

    Un dmesg | grep mxt doit vous lister ce type de lignes (ici addr i2c = 0x4b)

    atmel_mxt_ts 0-004b: Family ID: 128 Variant ID: 1 Version: 22 Build: 171
    atmel_mxt_ts 0-004b: Matrix X Size: 18 Matrix Y Size: 12 Object Num: 17 
    
    

    Ce qui signifie que le driver a bien détecté le mXT!

    Tester le /dev/input/event0 à l’aide du programme evtest:

    evtest
    
    

    ou sur un event précis:
    evtest /dev/input/event0

    Récuperer et extraire la tslib

    Pré-Configurer

    cd tslib
    ./autogen.sh
    
    

    Configurer (ex avec un arm11)

    ./configure \
    --host=arm-linux --target=arm --prefix=/chemin_tslib/output \
    CFLAGS="-march=armv6 -mtune=arm1176jzf-s -mfloat-abi=softfp" \
    CXXFLAGS="-march=armv6 -mtune=arm1176jzf-s -mfloat-abi=softfp" \
    --enable-static --enable-shared
    
    

    cross-Compiler et récupérer les libs dans --prefix

    make
    make install 
    
    

    Tester le fonctionnement avec un ts_calibrate puis ts_test

    Note: Après installation sur la cible, éditer ts.conf afin d’utiliser le module input:
    module_raw input. Faire un fichier de conf de la tslib. ex:

    export TSLIB_TSEVENTTYPE=INPUT
    export TSLIB_CONSOLEDEVICE=none
    export TSLIB_FBDEVICE=/dev/fb0
    export TSLIB_TSDEVICE=/dev/input/event0
    export TSLIB_CALIBFILE=/etc/pointercal
    export TSLIB_CONFFILE=/etc/ts.conf
    export TSLIB_PLUGINDIR=/lib/ts