天天看點

RK3308的spdif的應用

如果有問題,請加QQ群 891339868 進行交流

最近有時間搞了一下RK3308的spdif接口,配置配置還是比較簡單的,在這裡記錄一下

一、核心的配置:

核心中主要是配置simple-sound-card、spdif、dummy,如下圖所示:

首先配置支援simple-sound-card架構和spdif

RK3308的spdif的應用

再配置虛拟聲霸卡dummy的驅動

RK3308的spdif的應用

到這裡,驅動這邊就配置完成了。

二、裝置樹的配置:

裝置樹的配置稍微有點兒複雜

首先要理清一下simple-sound-card、spdif、dummy_codec這三者之間的關系,才能比較清晰的配置裝置樹

simple-sound-card是一個為了簡化音頻架構,在alsa上面的一個封裝,所謂的簡單聲霸卡,我了解的意思就是讓我們更簡單的使用聲霸卡;

spdif在實體接口上是一個soc上的一個port,在邏輯上是soc_dai,即是soc與codec之間soc這邊的接口;

dummy_codec字面意思是虛拟聲霸卡的意思,所謂的虛拟聲霸卡,就是像這種soc外部沒有外接codec的情況下,為了比對聲霸卡驅動架構,虛拟的一個裝置,類似于占位符之類的東西的作用;

是以,他們三者之間的關系,從硬體角度考慮,就是simple-sound-card就是個闆子,spdif就是soc上的接口,dummy_codec就是codec上的接口,在simple-sound-card這個闆子上soc通過spdif這個接口于dummy_codec這個codec上的接口進行連接配接;從軟體的角度考慮,simple-sound-card就是個較高層的封裝,它的内部的soc這邊的cpu_dai是spdif,codec_dai是dummy_codec;好了,廢話不多說了,直接上代碼:

1、我用的裝置樹檔案是rk3308-rock-pi-s.dts,其實用哪個不重要,都差不多,首先看一下這個檔案裡面和spdif相關的配置:

RK3308的spdif的應用

上圖中就是我們的聲霸卡在simple-audio-card的架構下的最外層配置,下面詳細說一下:

status:聲霸卡目前的狀态,目前是未激活;

compatible:裝置檔案中的的名字,系統靠這個去比對驅動代碼中的simple-audio-card層的驅動程式;

simple-audio-card,name:聲霸卡在系統中的名字;

simple-audio-card,cpu {

      sound-dai:soc端的dai 配置,就是rk3308的spdif接口的配置;

}

simple-audio-card,codec {

      sound-dai:codec端的dai配置,就是soc外界codec的接口的配置,這裡是虛拟聲霸卡;

}

2、下面再看一下soc端dai的配置,即是spdif_tx的配置,這個在rk3308的公共頭檔案中,即rk3308.dtsi中:

RK3308的spdif的應用

咱們再一項一項的理一理:

compatible:和上面一樣,與驅動比對的名稱

reg:這個是和spdif_相關的寄存器,因為RK3308是64bit的處理器,是以分别用兩個U32來表示,前兩個是代表寄存器的位址,後兩個數代表資料空間,也就是從前面的那個寄存器位址開始,有多大的勢力範圍歸spdif_tx這個東西;

interrupts:和中斷相關的中斷号、有效極性等;

clocks:和時鐘源相關的配置,一個是主時鐘源,一個是總線時鐘源;

clock-names:和上面比對的時鐘的名稱,第一個是主時鐘,第二個是總線時鐘;

dmas:和dma相關配置;

dma-names:dma名稱;

pinctrl-names:gpig複用的相關配置;

pingctrl-0:spdif_tx配置的gpio的配置;

status:使能開關;

#sound-dai-cells:

3、接下來在看一下和spdif_tx相關的gpio配置:

RK3308的spdif的應用

這個gpio配置主要是制定rk3308的gpio和gpio的配置,具體的解讀如下:

0:rk3308的gpio域0;

RK_PC1:rk3308的PC1;

RK_FUNC_1:gpio的功能1;

pcfg_pull_up:上拉;

合起來的意思就是rk3308的gpio域0的pc1,使用它的功能1,預設上拉;

4、接下來看一下dummy_codec的配置:

RK3308的spdif的應用

這裡主要是需要配置一下clock和clock-names,另外兩項都是一樣的;

clocks:dummy_codec的時鐘來源;

clock-names:時鐘名稱;

5、最後使能spdif_sound和spdif_tx就可以了:

RK3308的spdif的應用

6、更新一下核心,在系統中就能找到spdif_tx_sound了,如下圖所示:

RK3308的spdif的應用

好了,這個問題就記錄到這裡!

繼續閱讀