- 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.

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:
- O áudio HDMI funcione com o multiplicador 128.
- A captura de áudio continue funcionando com o multiplicador padrão 256 caso nenhuma configuração especial seja fornecida.
