정보
IMXBSPPG
Rev. LF5.15.5_1.0.0, 31 March 2022를 기준으로 작성
Chapter 16 Porting Audio Codecs
16.1 Introduction
이 장에서는 i.MX 레퍼런스 보드에서 사용자 보드로 오디오 드라이버를 포팅하는 방법을 설명한다.
이 절차는 사용자 보드의 오디오 코덱이 NXP 레퍼런스 디자인의 오디오 코덱과 동일한지 아니면 다른지에 따라 다르다. 이 장에서는 먼저 일반적인 포팅 작업에 대해 설명한 다음 다양한 다른 포팅 작업에 대해 설명한다.
오디오 코덱 구성을 위한 일반적인 포팅 작업은 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/boot/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 = <®_audio>; /* 1.8v */
DBVDD-supply = <®_audio>; /* 1.8v */
AVDD-supply = <®_audio>; /* 1.8v */
CPVDD-supply = <®_audio>; /* 1.8v */
MICVDD-supply = <®_audio>; /* 3.3v */
PLLVDD-supply = <®_audio>; /* 1.8v */
SPKVDD1-supply = <®_audio>; /* 4.2v */
SPKVDD2-supply = <®_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*/
};
참고
디바이스 트리 바인딩의 구체적인 의미는 Documentation/devicetree/bindings/sound/에 있는 문서를 참조한다.
16.1.1 Porting the reference BSP to a custom board (audio codec is the same as in the reference design)
오디오 코덱이 레퍼런스 디자인과 사용자 보드에서 동일한 경우, 레퍼런스 BSP를 사용자 보드로 포팅하기 위해 코덱에 대한 I/O 신호와 공급 전원이 올바르게 초기화되었는지 확인한다.
devicetree는 I/O 신호 구성을 위해 핀 컨트롤 그룹을 사용한다. arch/arm/boot/dts/imx6qdl-sabresd.dtsi에 몇 가지 예가 있으며 이러한 핀 컨트롤 그룹의 정의는 arch/arm/boot/dts/imx6qdl.dtsi에서 찾을 수 있다.
wm8962 코덱의 필수 신호는 아래와 같다 :
- I2C 인터페이스 신호
- I2S 인터페이스 신호
- wm8962에 대한 SSI 외부 clock 입력
아래 테이블은 wm8962 코덱에 필요한 공급 전원을 보여준다.
Table 6. Required power supplies
Power Supply Name | Definition | Value |
PLLVDD | PLL 공급 | 1.8 V |
SPKVDD1 | 좌측 스피커 드라이버용 공급 | 4.2 V |
SPKVDD2 | 우측 스피커 드라이버용 공급 | 4.2 V |
DCVDD | 디지털 코어 공급 | 1.8 V |
DBVDD | 디지털 공급 | 1.8 V |
AVDD | 아날로그 공급 | 1.8 V |
CPVDD | Charge pump 전원 공급 | 1.8 V |
MICVDD | Microphone bias amp 공급 | 3.3 V |
16.1.2 Porting the reference BSP to a custom board (audio codec is different from the reference design)
레퍼런스 디자인에 있는 것과 다른 오디오 코덱에 대한 지원이 추가되면, 사용자 보드에 레퍼런스 BSP를 포팅하는 위해 새로운 ALSA 드라이버를 생성한다. ALSA 드라이버는 ALSA 사운드 프레임워크에 연결(plug)되어, 코덱 컨트롤에 사용되는 표준 ALSA 인터페이스를 활성화한다.
ALSA 드라이버의 소스 코드는 linux/sound/soc의 Linux 커널 소스 트리에 있다. 아래 테이블은 WM8962 코덱 지원에 사용되는 파일을 보여준다.
Table 7. Files for wm8962 codec support
File name | Definition |
imx-pcm-dma.c |
|
fsl_ssi.c |
|
wm8962.c |
|
imx-wm8962.c |
|
참고
다른 코덱을 사용하는 경우, 위의 테이블에 표시된 드라이버 아키텍처를 적절히 적용한다. 정확한 적용은 선택한 코덱에 따라 다르다. 코덱 공급 업체에서 코덱에 해당하는 소프트웨어를 구한다.
'NXP i.MX SoC Family > i.MX BSP Porting Guide' 카테고리의 다른 글
i.MX BSP Porting Guide - Porting Ethernet (0) | 2022.07.08 |
---|---|
i.MX BSP Porting Guide - Porting HiFi 4 (0) | 2022.07.08 |
i.MX BSP Porting Guide - Supporting Cameras with CSI (0) | 2022.07.06 |
i.MX BSP Porting Guide - Connection MIPI-DSI Panel (0) | 2022.07.06 |
i.MX BSP Porting Guide - Connecting LVDS Panel (0) | 2022.07.06 |