Salida de Audio HDMI en SoC Rockchip RK3399

Configuración del Hardware y Conexión I2S2

El módulo I2S2 dentro del Rockchip RK3399 está diseñado específicamente para transportar audio digital hacia las enterfaces de video integradas. Está internamente conectado a los controladores de DisplayPort y HDMI.

Las señales de audio se transmiten desde el I2S2 al transceptor HDMI mediante líneas dedicadas, como se detalla a continuación:

Señal en I2S2 Dirección Señal en HDMI Dirección
I2S2_SCLK_OUT Salida ii2sclk Entrada
I2S2_TX_LRCK_OUT Salida ii2slrclk Entrada
I2S2_8CH_SDO[3:0] Salida ii2sdata[3:0] Entrada

Una configuración de señales similar existe para la interfaz DisplayPort.

Configuración del Árbol de Dispositivos (Device Tree)

Habilitar el audio por HDMI requiere configurar tres nodos principales en el árbol de dispositivos.

1. Nodo de Máquina de Sonido (hdmi_sound)

El nodo base hdmi_sound ya se encuentra definido en el archivo rk3399.dtsi y utiliza el controlador simple-audio-card. Define el formato I2S, el reloj maestro, y vincula la DAI del CPU (&i2s2) con la DAI del códec (&hdmi).

Para activarlo, se debe sobreescribir su estado en el archivo DTS específico de la placa (ej. rk3399-evb.dts):

&hdmi_sound {
    status = "okay";
};

2. Nodo del Controlador HDMI

El controlador HDMI (hdmi@ff940000) proporciona la DAI que el nodo de máquina de sonido utilizará. Su habilitación es esencial. Añade lo siguiente a tu DTS:

&hdmi {
    /* Propiedades específicas de la placa, como el bus I2C para DDC */
    ddc-i2c-bus = <&i2c7>;
    pinctrl-names = "default";
    pinctrl-0 = <&hdmi_cec>;
    status = "okay";
};

3. Nodo de la Interfaz I2S2

Este nodo (i2s@ff8a0000) representa la interfaz de audio serie que transmite los datos de audio al HDMI. Su configuración incluye reglas de interrupción, canales DMA y relojes.

Habilítalo en tu DTS:

&i2s2 {
    status = "okay";
};

Compilación y Configuración del Kernel de Linux

Se requiere habilitar controladores específicos en la configuración del kernel.

Habilitación del DRM y HDMI Audio

Dentro de make menuconfig, asegúrate de tener seleccionadas las siguientes opciones bajo Device Drivers -> Graphics support:

  • DRM Support for Rockchip
  • Synopsys Designware I2S Audio interface (DRM_DW_HDMI_I2S_AUDIO)

Verifica que tu archivo .config incluya estas entradas:

CONFIG_DRM=y
CONFIG_DRM_ROCKCHIP=y
CONFIG_ROCKCHIP_DW_HDMI=y
CONFIG_DRM_DW_HDMI_I2S_AUDIO=y

Habilitación de Audio SoC

Bajo Device Drivers -> Sound card support, garantiza que el subsistema ALSA SoC y los controladores específicos de Rockchip estén compilados:

CONFIG_SND_SOC=y
CONFIG_SND_SOC_ROCKCHIP=y
CONFIG_SND_SOC_ROCKCHIP_I2S=y
CONFIG_SND_SIMPLE_CARD=y

Guarda la configuración, genera la imagen del kernel (make) y despliégala en el dispositivo mediente TFTP u otros métodos.

Pruebas y Verificación

Después de arrancar el sistema con el nuevo kernel, el subsistema de audio debería reconocer el nuevo dispositivo.

Examinar Dispositivos de Sonido ALSA

Usa comandos estándar de ALSA para listar las tarjetas y dispositivos disponibles:

# Listar tarjetas de sonido
cat /proc/asound/cards

# Listar dispositivos de reproducción
aplay -l

# Listar dispositivos de grabación
arecord -l

Deberías ver una tarjeta (ej. card 0) identificada como simple-card y vinculada a hdmi-sound o similar.

Reproducir Audio de Prueba

Utiliza aplay para enviar un archivo WAV al dispositivo de reproducción correspondiente al HDMI:

# Reproducir en la tarjeta 0, dispositivo 0
aplay -D hw:0,0 archivo_de_prueba.wav

Configurar el Dispositivo de Audio por Defecto en el Sistema

Para aplicaciones que usan PulseAudio (común en entornos de escritorio como Ubuntu), es necesario redirigir la salida predeterminada al dispositivo HDMI.

  1. Instala y abre la herramienta pavucontrol.
  2. En la pestaña "Playback" o "Output Devices", identifica el dispositivo HDMI.
  3. Establece el perfil de la tarjeta de sonido HDMI como "Output" y asegúrate de que esté seleccionada como dispositivo por defecto.

Para hacer este cambio persistente tras un reinicio, edita el archivo de configuración de PulseAudio (/etc/pulse/default.pa) y añade una línea similar a:

set-default-sink alsa_output.platform-hdmi-sound.stereo-fallback

(El nombre exacto del sink puede variar; obténlo con pacmd list-sinks | grep name:).

Etiquetas: Rockchip RK3399 HDMI I2S DeviceTree

Publicado el 6-29 06:32