Usuários de notebooks modernos da Lenovo frequentemente esbarram em uma limitação ao utilizar distribuições baseadas no Kernel Linux: a incapacidade de monitorar a rotação das ventoinhas. Esse apagão de dados ocorre porque a fabricante não utiliza chips padrão de monitoramento em grande parte de seus aparelhos focados no consumidor final. Para resolver a questão, a árvore principal do kernel recebeu o yogafan, um novo driver oficial projetado para extrair essas métricas diretamente do hardware da marca.
Criado pelo desenvolvedor Sergio Melas, o módulo foi integrado ao subsistema de sensores (hwmon) e atua como uma ponte confiável entre o sistema operacional e o Controlador Embutido (EC) das máquinas. O código já está documentado e mapeia o comportamento de dezenas de variantes das linhas Yoga, Legion, IdeaPad, LOQ, Slim, Flex, ThinkBook e XiaoXin.
O que isso significa para quem usa Linux
Normalmente, ferramentas do sistema e widgets na interface gráfica dependem de sensores padronizados (ISA ou LPC) para relatar a temperatura do processador e a velocidade das ventoinhas em RPM (rotações por minuto). Sem esses dados, fica difícil diagnosticar problemas de aquecimento ou entender o comportamento do notebook sob carga pesada.
Nos computadores da Lenovo, as informações de rotação ficam armazenadas em registradores específicos da interface ACPI, invisíveis para os drivers genéricos. Com a chegada do yogafan, os usuários não precisarão mais recorrer a scripts de terceiros ou ferramentas de engenharia reversa para descobrir se as ventoinhas estão funcionando adequadamente. Os dados passarão a ser expostos de forma nativa e padronizada.
Como o driver diferencia equipamentos convencionais e gamers

A leitura dos dados de refrigeração da Lenovo não é padronizada entre os diferentes modelos. Durante o processo de sondagem, o driver utiliza uma tabela de exceções baseada na identificação DMI do equipamento para determinar, de forma exata, qual abordagem usar, sem depender de tentativas às cegas.
Existem duas arquiteturas principais de controle mapeadas pelo yogafan:
- Arquitetura de 8 bits: Usada em notebooks voltados para produtividade e uso geral, como Yoga, IdeaPad e Slim. Nesse hardware, o valor é armazenado em um único registrador que só aceita números de 0 a 255. Para entregar o resultado correto, o driver aplica um multiplicador de 100. Um valor bruto de 42, por exemplo, é lido pelo sistema como 4.200 RPM.
- Arquitetura de 16 bits: Encontrada em equipamentos de alta performance e voltados para jogos, como as séries Legion e LOQ. Como as ventoinhas dessas máquinas ultrapassam facilmente as 6.000 rotações por minuto, os 8 bits são insuficientes. O hardware armazena o valor em dois bytes consecutivos, e o driver faz a leitura direta e sem multiplicadores, garantindo maior precisão.
Filtro de atraso protege a leitura contra oscilações irreais
Além de simplesmente ler os valores, o código do yogafan precisou lidar com a baixa resolução e a instabilidade dos dados relatados pelo firmware da Lenovo. Para isso, o módulo implementa um filtro chamado RLLag, que suaviza as leituras e impede que o sistema relate picos falsos.
O filtro limita a variação de velocidade a um máximo de 1.500 RPM por segundo, uma taxa que espelha a inércia física real das pás do componente. Além disso, o cálculo é baseado no intervalo de tempo entre as consultas feitas pelo usuário, o que garante estabilidade independentemente de quantas vezes por segundo um aplicativo verifique o status da ventoinha.
O driver também possui mecanismos de proteção para situações de suspensão de energia. Ele utiliza o relógio de tempo de inicialização do próprio kernel para calcular intervalos. Se o notebook passar por um ciclo de suspensão e o salto temporal for maior que cinco segundos, o filtro é reiniciado automaticamente para evitar que o sistema exiba métricas “fantasmas” de antes da máquina adormecer. Caso a leitura física indique zero RPM, o filtro é imediatamente contornado para alertar que a ventoinha parou.
O driver expõe os resultados no sistema de arquivos virtual sysfs através do atributo padrão fanX_input, garantindo compatibilidade imediata com softwares tradicionais de monitoramento.
