controlador ALSA --- DAPM

https://alsa-project.org/main/index.php/DAPM

https://www.kernel.org/doc/html/v4.11/sound/soc/dapm.html

Hay 4 dominios de poder dentro de DAPM:

  1. Códec de dominio  - VREF, VMID (códec de núcleo y potencia de audio). Por lo general, controlada a códec sonda / Quitar y suspensión / reanudación, aunque se puede establecer en tiempo de corriente si no se necesita potencia para el efecto local, etc.
  2. Plataforma de dominio / Máquina  - entradas y salidas conectadas físicamente. Es la plataforma / máquina y específica acción del usuario, está configurado por el conductor de la máquina y responde a los eventos asíncronos. por ejemplo, cuando se insertan HP
  3. Dominio de la ruta  - recorridos de la señal de audio del subsistema. Se ajusta automáticamente cuando mezclador y configuración mux son cambiadas por el usuario. por ejemplo alsamixer, amixer.
  4. Dominio corriente  - DAC y ADC de. Activado y desactivado cuando se inicia la reproducción de flujo / captura y se detuvo respectivamente. por ejemplo aplay, arecord.

 

Codec / DSP Widget Interconexiones

Reproductores están conectados el uno al otro dentro del codec, la plataforma y la máquina por rutas de audio (llamados interconexiones). Cada interconexión debe estar definido con el fin de crear un mapa de todos los caminos de audio entre los widgets.

Esto es más fácil con un diagrama de la codec o DSP (y esquemática del sistema de audio de la máquina), ya que requiere unirse a los widgets juntos a través de sus trayectos de señal de audio.

Mapa de hardware para Widget (TLV320AIC23)

capturar ruta de la señal:

LLININ-> Línea input-> fuente Catpture -> ADC

MICIN-> Mic input-> Catpute fuente-> ADC

reproducción de recorrido de la señal:

DAC-> Ouptput para hormigoneras> PATÁN / LHPOUT / RUTA / RHPOUT

LLININ-> Línea Input-> Salida para hormigoneras> PATÁN

MICIN-> Entrada de micro -> Salida para hormigoneras> PATÁN / LHPOUT / RUTA / RHPOUT

DAPM Widgets:

estático  const  struct snd_soc_dapm_widget tlv320aic23_dapm_widgets [] = { 
    SND_SOC_DAPM_DAC ( " DAC " , " Reproducción " , TLV320AIC23_PWR, 3 , 1 ), 
    SND_SOC_DAPM_ADC ( " ADC " , " captura " , TLV320AIC23_PWR, 2 , 1 ), 
    SND_SOC_DAPM_MUX ( " Fuente de captura " , SND_SOC_NOPM, 0 , 0 ,
              y tlv320aic23_rec_src_mux_controls), 
    SND_SOC_DAPM_MIXER ( " Mixer Output " , TLV320AIC23_PWR, 4 , 1 ,
                y tlv320aic23_output_mixer_controls [ 0 ], 
               ARRAY_SIZE (tlv320aic23_output_mixer_controls)), 
    SND_SOC_DAPM_PGA ( " entrada de línea " , TLV320AIC23_PWR, 0 , 1 , NULL, 0 ), 
    SND_SOC_DAPM_PGA ( " entrada de micrófono " , TLV320AIC23_PWR , 1 , 1 , NULL, 0 ), 

    SND_SOC_DAPM_OUTPUT ( " LHPOUT "), 
    SND_SOC_DAPM_OUTPUT ( " RHPOUT " ), 
    SND_SOC_DAPM_OUTPUT ( " PATÁN " ), 
    SND_SOC_DAPM_OUTPUT ( " ROUT " ), 

    SND_SOC_DAPM_INPUT ( " LLINEIN " ), 
    SND_SOC_DAPM_INPUT ( " RLINEIN " ), 

    SND_SOC_DAPM_INPUT ( " MICIN " ), 
};

carreteras PMDA:

estática  const  struct snd_soc_dapm_route tlv320aic23_intercon [] = {
     / * salida del mezclador * / 
    { " Mezclador de salida " , " modificador de línea de bypass " , " Entrada de línea " }, 
    { " Mezclador de salida " , " Reproducción Cambia " , " DAC " }, 
    { " Mixer Output " , " interruptor MIC tonos de fondo " , "Entrada de micrófono "}, 

    / * Salidas * / 
    { " RHPOUT " , NULL, " salida del mezclador " }, 
    { " LHPOUT " , NULL, " Mezclador de salida " }, 
    { " PATÁN " , NULL, " salida del mezclador " }, 
    { " RUTA " , NULL, " mezclador de salida " }, 

    / * Entradas * / 
    { " entrada de línea " ," NULL" " LLINEIN " }, 
    { " entrada de línea " " NULO " " RLINEIN " }, 

    { " entrada de micrófono " " NULO " " MICIN " }, 

    / * entrada MUX * / 
    { " Fuente de captura " " line " " entrada de línea " }, 
    { "Fuente de captura ", " Mic " , " Entrada de Micrófono " }, 
    { " ADC " , NULL, " Fuente de captura " }, 

};

Cada entrada en este ejemplo tiene un kcontrol asociado con él (definido en el ejemplo anterior) y está conectado a la mezcladora de salida a través de su nombre kcontrol. Ahora podemos conectar el control destino (WRT señal de audio) con sus controles origen.

/ * Controles PGA mezclador para Line y el interruptor Mic * / 
static  const  struct snd_kcontrol_new tlv320aic23_output_mixer_controls [] = { 
    SOC_DAPM_SINGLE ( " interruptor de línea de derivación " , TLV320AIC23_ANLG, 3 , 1 , 0 ), 
    SOC_DAPM_SINGLE ( " Interruptor Mic tono lateral " , TLV320AIC23_ANLG, 5 , 1 , 0 ), 
    SOC_DAPM_SINGLE ( " Interruptor de reproducción " , TLV320AIC23_ANLG, 4 , 1 , 0), 
};

Entonces tenemos :-

  • Widget de destino <=== nombre de ruta <=== Fuente de widgets o
  • Fregadero, Sendero, Fuente, o
  • Output Mixer está conectado a la  MIC Input través de la  Mic Sidetone Switch.

Cuando no hay un nombre de ruta que conecta los widgets (por ejemplo, una conexión directa) se pasa NULL para el nombre de la ruta.

 

SND_SOC_DAPM_DAC ( " DAC " , " Reproducción " , TLV320AIC23_PWR, 3 , 1 )
 #define SND_SOC_DAPM_DAC (wname, stname, WREG, wshift, winvert) \ 
{.ID = snd_soc_dapm_dac, .name = wname, .sname = stname, \ 
    SND_SOC_DAPM_INIT_REG_VAL ( WREG, wshift, winvert)} 
#define SND_SOC_DAPM_INIT_REG_VAL (WREG, wshift, winvert) \ 
    .reg = WREG, .mask = 1 , .shift = wshift, \ 
    .on_val = winvert? 0 : 1 , = .off_val winvert? 1 : 0

Nombre: DAC

nombre de secuencia: Reproducción

Register: TLV320AIC23_PWR

cambio: 3

invertido: 1

si invertido es 1, significa que va a alimentar en el DAC si set "TLV320AIC23_PWR" bit 3 como 0,.

si invertido es 0, que significa que se enciende si widget de Registro de desplazamiento conjunto como 1.

 

Las interconexiones se crean con una llamada a: -

snd_soc_dapm_connect_input (codec, fregadero, camino, fuente);

Por último, snd_soc_dapm_new_widgets (CODEC) debe ser llamado después de que todos los widgets y las interconexiones han sido registradas por el núcleo. Esto hace que el núcleo para escanear el codec y la máquina de manera que el estado DAPM interno coincide con el estado físico de la máquina.

Máquina Widget Interconexiones

interconexiones de widgets máquina se crean en la misma forma que los codec y se conectan directamente a los pasadores de códec widgets de pie de máquina.

por ejemplo, se conecta el altavoz a cabo pasadores de códec al altavoz interno.

/ * Altavoz ext conectada a los pines de códec LOUT2, ROUT2 * / 
{ "Ext Spk", NULL, "ROUT2"}, 
{ "Ext Spk", NULL, "LOUT2"},

Esto permite que el DAPM a encendido y apagado pasadores que están conectados (y en uso) y pasadores que son NC respectivamente.

 

 

 

Supongo que te gusta

Origin www.cnblogs.com/fellow1988/p/12552253.html
Recomendado
Clasificación