Multilaser M11W (e outros modelos) com touch no Linux

INTRO

Os M11W vêm com touch screen da Silead. Portanto, é necessário baixar o respectivo firmware.

O Linux possui suporte para esse hardware, mas não de todos os equipamentos. Existe um projeto que tenta organizar todos os firmwares em um só lugar. O link é

Infelizmente, o M11W não está lá.

Outro problema é que o suporte padrão das distribuições Linux para estes drivers possui codificação no próprio kernel. Mesmo que tivéssemos o firmware da Silead para o M11W, precisaríamos inserir algumas informações diretamente no kernel e recompilá-lo.

Para contornar esse problema, existe um outro driver para este hardware. Este driver alternativo espera que algumas informações (tais como, as dimensões da tela do touch, a orientação dos eixos x e y, entre outras) estejam inseridas dentro do próprio firmware (e não no kernel). O driver pode ser baixado em

Em suma, existem dois drivers open-source para o Silead. A figura a seguir ilustra algumas diferenças entre eles.

O driver que queremos utilizar está no segundo git e precisa ser compilado. Basta um comando make (assumindo que as dependências estão instaladas, tais como ‘make’ e ‘gcc’).

HACKEANDO O FIRMWARE

Agora só precisamos do firmware no formato exigido para o 'gslx680_ts_acpi.ko’. Assim, não precisaremos nos preocupar em alterar e compilar o kernel. Quando tivermos esse firmware em mãos, só precisaremos renomeá-lo para ‘silead_ts.fw’ e copiá-lo para o folder ‘/lib/firmware’ tal como ilustrado na figura.

O problema é que esses firmwares não estão “por aí”. Só encontraremos com facilidade o driver pro Windows.
Se tivéssemos ferramentas para converter o firmware fornecido no Windows para o formato que desejamos, seria uma mão na roda.

A boa notícia é que o git que forneci no primeiro link contém um folder chamado “tools” que possui todas as ferramentas necessárias para a conversão.

De posse do driver para o Windows do modelo M11W (precisa ser do mesmo modelo. Se você tiver um M8W, procure o driver do Windows para M8W. Se tiver um modelo XXXQQC, procure o driver para esse modelo) localize o arquivo do firmware. Ele se chama ‘SileadTouch.fw’.

As ferramentas que utilizaremos são o ‘unscramble’ e o ‘fwtool’. A primeira
converte o firmware do Windows para um formato reconhecido pelo Linux, sem agregar algumas informações importantes.

Já o ‘fwtool’ converte o firmware gerado para o formato que queremos. A figura a seguir ilustra o papel de cada ‘tool’, assumindo que você se localiza na pasta raiz do primeiro git.

Para facilitar, os comandos estão aqui para o copy/paste

./tools/unscramble SileadTouch.fw silead.fw

./tools/fwtool -c silead.fw -m 1680 -w 1920 -h 1270 silead_ts.fw

O X

Um passo adicional é instalar o ‘evdev’. Você pode se inteirar melhor pesquisando sobre esse produto na net. Instruiremos o X para que use o ‘evdev’ como ‘driver’. A instalação do ‘evdev’ é muito simples. basta o comando

# apt install xserver-xorg-input-evdev

Para informar o X sobre o novo dispositivo crie o arquivo ‘/usr/share/X11/xorg.conf.d/99-calibration.conf’ com o seguinte conteúdo.

Section "InputClass"
Identifier "calibration"
MathProduct "Silead GSLx680 Touchscreen"
Option "Calibration" "5 1916 6 1269"
Option "SwapAxes" "0"
Driver "evdev"
EndSection

Se você ainda não copiou o firmware convertido para o lugar certo, está na hora de fazê-lo. O driver que utilizaremos procura especificamente pelo arquivo ‘/lib/firmware/silead_ts.fw’, conforme vimos na primeira figura.

TOUCHEANDO

Está tudo pronto. Podemos carregar o driver. Se você está na pasta raiz do segundo git, basta o comando.

# insmod ./gslx360_ts_acpi.ko

O driver vai carregar e o touch estará funcionando.

Caso deseje contribuir, você pode fazer um 'fine-tuning’ nos parâmetros que utilizamos. Falando por mim, estou satisfeito com esse resultado.

Se quiser contribuir ainda mais e possuir o 'skill’ necessário, você pode fazer as alterações no kernel e sugerir um path.

4 Curtidas