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.