SoC : : Architecture/: : i.MX

i.MX 9 BSP Porting Guide - Porting Audio Codecs

Jay.P Morgan 2024. 4. 30. 23:41

 

  16. 1  Intro

 

  이 장에서는 i.MX Reference B'D의 Audio Driver를 커스텀 보드로 포팅하는 방법을 설명합니다.

  이 절차는 커스텀 보드의 오디오 코덱이 NXP reference 설계의 오디오 코덱과 동일 여부에 따라 달라집니다. 이 장에서는 먼저 일반적인 이식 작업을 설명한 다음 다양한 기타 이식 작업을 설명합니다.

  오디오 코덱 구성을 위한 일반적인 포팅 작업에는 ALSA 커스텀이 필요합니다. ALSA 오디오 기능을 사용하려면 CPU DAI 드라이버, CODEC DAI 드라이버, DAI LINK 드라이버 머신 드라이버)가 디바이스 트리에 등록되어 있어야 하며, 이에 따라 보드 지정 dts 파일에 3개의 노드가 있어야 합니다. 디바이스 트리는 i.MX 6 및 i.MX 7의 경우 arch/arm/boot/dts에 있고 모든 i.MX 8의 경우 arch/arm64/boot/dts에 있습니다. 자세한 노드의 예는 arch/arm/에서 찾을 수 있습니다. 부팅/dts/imx6qdl-sabresd.dtsi:

 

/* DT binding for CPU DAI driver */
ssi2: ssi@0202c000 {   fsl,mode = "i2s-slave";   status = "okay";
};
/* DT binding for CODEC DAI driver */
codec: wm8962@1a {   compatible = "wlf,wm8962";
  reg = <0x1a>;
  clocks = <&clks 169>;
  DCVDD-supply = <&reg_audio>;    /* 1.8v */
  DBVDD-supply = <&reg_audio>;    /* 1.8v */
  AVDD-supply = <&reg_audio>;     /* 1.8v */
  CPVDD-supply = <&reg_audio>;    /* 1.8v */
  MICVDD-supply = <&reg_audio>;   /* 3.3v */
  PLLVDD-supply = <&reg_audio>;   /* 1.8v */
  SPKVDD1-supply = <&reg_audio>;  /* 4.2v */   SPKVDD2-supply = <&reg_audio>;  /* 4.2v */
  gpio-cfg = <
    0x0000 /* 0:Default */
    0x0000 /* 1:Default */
    0x0013 /* 2:FN_DMICCLK */
    0x0000 /* 3:Default */
    0x8014 /* 4:FN_DMICCDAT */
    0x0000 /* 5:Default */
  >;
};
/* DT binding for DAI LINK driver */
sound {
  compatible = "fsl,imx6q-sabresd-wm8962",
    "sl,imx-audio-wm8962";   model = "wm8962-audio";   si-controller = <&ssi2>;   udio-codec = <&codec>;   audio-routing =
    "Headphone Jack", "HPOUTL",
    "Headphone Jack", "HPOUTR",
    "Ext Spk", "SPKOUTL",
    "Ext Spk", "SPKOUTR",
    "MICBIAS", "AMIC",
    "IN3R", "MICBIAS",
    "DMIC", "MICBIAS",     "DMICDAT", "DMIC";   mux-int-port = <2>;   mux-ext-port = <3>;
  hp-det-gpios = <&gpio7 8 1>;    /*active low*/   mic-det-gpios = <&gpio1 9 1>;   /*active low*/
};

 

Note: 디바이스 트리 바인딩의 구체적인 의미는 Documentation/devicetree/bindings/sound/에 있는 문서를 참조하세요.

 

 

  16.1.1 레퍼런스 BSP를 커스텀 보드에 포팅(오디오 코덱은 레퍼런스 디자인과 동일)

 

  레퍼런스 디자인과 커스텀 보드의 오디오 코덱이 동일한 경우, 레퍼런스 BSP를 커스텀 보드에 포팅하기 위해 코덱에 대한 I/O 신호와 전원 공급 장치가 제대로 초기화되었는지 확인하세요.

  디바이스 트리는 I/O 신호 구성을 위해 핀 제어 그룹을 사용합니다. arch/arm/boot/dts/imx6qdl-sabresd.dtsi에 몇 가지 예가 있으며 해당 핀 제어 그룹의 정의는 arch/arm/boot/dts/imx6qdl.dtsi에서 찾을 수 있습니다.

wm8962 코덱의 필수 신호는 다음과 같습니다.
     • I2C 인터페이스 신호
     • I2S 인터페이스 신호
     • wm8962에 대한 SSI 외부 클록 입력

다음 표는 wm8962 코덱에 필요한 전원 공급 장치를 보여줍니다.

 

  ※ 표 7. 필요 전원 공급

Power Supply Name Definition Value
PLLVDD PLL supply 1.8 V
SPKVDD1 Supply for left speaker drivers 4.2 V
SPKVDD2 Supply for right speaker drivers 4.2 V
DCVDD Digital core supply 1.8 V
DBVDD Digital supply 1.8 V
AVDD Analog supply 1.8 V
CPVDD Charge pump power supply 1.8 V
MICVDD Microphone bias amp supply 3.3 V

 

 

  16.1.2 레퍼런스 BSP를 커스텀 보드에 포팅(오디오 코덱은 레퍼런스 디자인과 다름)

 

  참조 디자인과 다른 오디오 코덱에 대한 지원을 추가하는 경우 참조 BSP를 사용자 지정 보드에 포팅하는 새로운 ALSA 드라이버를 만드세요. ALSA 드라이버는 ALSA 사운드 프레임워크에 연결되어 표준 ALSA 인터페이스를 사용하여 코덱을 제어할 수 있습니다.

  ALSA 드라이버의 소스 코드는 Linux 커널 소스 트리의 linux/sound/soc에 있습니다. 다음 표는 WM8962 코덱 지원에 사용되는 파일을 보여줍니다.

 

  ※ 표 8. wm8962 코덱 지원용 파일

File name Definition
imx-pcm-dma.c • 스테레오 ALSA SoC 드라이버, esai 드라이버 및 spdif 드라이버가 공유합니다.
• DMA 버퍼 사전 할당 및 DMA 채널 관리를 담당합니다.
fsl_ssi.c • 스테레오 ALSA SoC용 CPU DAI 드라이버를 등록합니다.
• 온칩 SSI 인터페이스를 구성합니다.
wm8962.c • 스테레오 코덱 및 Hi-Fi DAI 드라이버를 등록합니다.
• 스테레오 코덱에 대한 모든 직접적인 하드웨어 작업을 담당합니다.
imx-wm8962.c • 머신 레이어 코드.
• 드라이버 장치를 생성합니다.
• 스테레오 사운드 카드를 등록하세요.

Note: 다른 코덱을 사용하는 경우, 위 표에 표시된 드라이버 아키텍처를 그에 맞게 조정하십시오. 정확한 조정은 선택한 코덱에 따라 다릅니다. 코덱 공급업체로부터 코덱별 소프트웨어를 구합니다.