O mistério dos 0 Hz: a correção que devolveu a voz aos chips Rockchip no kernel 7.0

Como o kernel linux resolveu o conflito entre HDMI e captura nos chips Rockchip!

Escrito por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...
  • Dilema do multiplicador: o áudio HDMI exige um fator de relógio de 128x, enquanto o padrão da indústria e da captura de áudio é 256x, gerando conflitos no driver I2S TDM.
  • O retorno de uma função: a reintrodução do callback set_sysclk foi necessária para permitir que o hardware se adapte a diferentes saídas de áudio sem perder a precisão.
  • Regressão detectada: um erro na implementação original silenciou a captura de áudio no chip RK3308, resultando em tentativas de configurar o relógio para 0 Hz.
  • Diplomacia na LKML: a troca de e-mails entre Detlev Casanova e Luca Ceresoli ressalta como a falta de uma cópia (Cc) no e-mail pode atrasar a detecção de bugs em hardwares específicos.
  • Solução com fallback: o patch final introduz uma lógica de segurança que garante o funcionamento do áudio HDMI sem quebrar a compatibilidade com sistemas de gravação legados.

Uma série de trocas de e-mails na LKML (Linux Kernel Mailing List) entre janeiro de 2025 e fevereiro de 2026 detalha a restauração de uma funcionalidade crítica no driver de áudio I2S TDM da Rockchip, utilizado em chips como o RK3308 e em diversas placas de desenvolvimento (como a Radxa Rock Pi S).

O patch, enviado por Detlev Casanova (Collabora), visa corrigir problemas de taxa de amostragem em sistemas de áudio HDMI, mas acabou revelando um bug no caminho de captura de áudio.

O problema: o divisor fixo vs. HDMI

No subsistema de áudio do Linux (ASoC), o mclk (Master Clock) é geralmente calculado multiplicando a taxa de amostragem (ex: 48kHz) por um fator chamado mclk-fs. O padrão para a maioria dos sistemas é 256 (48.000 * 256 = 12,288 MHz).

No entanto, para o áudio via HDMI nos chips Rockchip, esse valor precisa ser 128.

Anteriormente, o kernel havia removido a função de retorno (callback) set_sysclk, acreditando que ela era redundante. Sem ela, o driver forçava o uso do padrão 256, o que quebrava a saída de áudio para dispositivos HDMI que esperavam um relógio diferente.

A solução e a regressão (O “plot twist”)

Detlev Casanova reintroduziu o set_sysclk para permitir que o driver da máquina (como uma placa-mãe ou sistema embarcado) informasse ao driver do chip a frequência correta baseada no Device Tree.

No entanto, em 10 de fevereiro de 2026, Luca Ceresoli (autor de melhorias anteriores no mesmo driver) reportou uma regressão crítica: a captura de áudio (gravação) no RK3308 parou de funcionar, retornando o erro -22 (Invalid Argument).

O diagnóstico de Luca

O problema ocorreu porque, enquanto o áudio HDMI (Playback) agora recebia a frequência correta, o caminho de Captura não estava chamando o set_sysclk. O resultado era que o driver tentava configurar o relógio para 0 Hz, causando a falha do sistema.

a2lFhLjW de tela de 2026 02 18 15 02 02
O mistério dos 0 Hz: a correção que devolveu a voz aos chips Rockchip no kernel 7.0 3

Curiosidades e bastidores da discussão

A discussão destaca a importância da colaboração e do teste em hardware real:

  • Esquecimento de CC: Luca Ceresoli gentilmente “puxou a orelha” de Detlev por não tê-lo incluído na cópia (Cc) do patch original, já que Luca era o autor da mudança que o patch de Detlev estava alterando. Isso teria evitado que o erro chegasse à árvore principal.
  • A ajuda do Robô: O “Kernel Test Robot” já havia alertado sobre problemas de compilação em versões anteriores do patch devido a dependências de ACPI, mostrando que a automação é vital para manter o kernel estável.
  • Correção “On-the-fly”: Mark Brown, o mantenedor de som do kernel, já estava preparado para reverter o patch (desfazer a mudança) para não prejudicar os usuários do RK3308. No entanto, Detlev enviou rapidamente uma correção adicional para usar um valor padrão (fallback) caso a frequência não seja definida via set_sysclk.

Status atual

Após a validação de Luca Ceresoli em 18 de fevereiro de 2026, confirmando que a nova lógica de fallback funciona, o patch definitivo foi aprovado por Mark Brown.

A mudança garante que:

  1. O áudio HDMI funcione com o multiplicador 128.
  2. A captura de áudio continue funcionando com o multiplicador padrão 256 caso nenhuma configuração especial seja fornecida.

Compartilhe este artigo
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre GNU/Linux, Software Livre e Código Aberto, dedica-se a descomplicar o universo tecnológico para entusiastas e profissionais. Seu foco é em notícias, tutoriais e análises aprofundadas, promovendo o conhecimento e a liberdade digital no Brasil.