s3c2416開發板 linux,S3C2416移植內核Linux3.1的wm9713聲卡過程

移植內核的聲卡驅動。原因沒有聲卡驅動,WM9713聲卡驅動移植(原來的內核有UDA1341聲卡驅動,我們再次基礎上直接修改)

1、直接復制內核得到三個文件:s3c2416_wm9713.c , wm9713.c , s3c2416_ac97.c.

linux-3.1\sound\soc\codecs\Wm9713.c---->wm9713.c;

linux-3.1\sound\soc\samsung\Smdk_wm9713.c---->s3c2416_wm9713.c;

linux-3.1\sound\soc\samsung\Ac97.c------------>s3c2416_ac97.c.

2、使得內核支持那三個文件:

在linux-3.1\sound\soc\samsung\Makefile添加:

snd-soc-s3c2416-wm9713-objs := s3c2416_wm9713.o

obj-$(CONFIG_SND_SOC_SAMSUNG_SMDK_WM9713) += snd-soc-s3c2416-wm9713.o

snd-soc-s3c2416-ac97-objs := s3c2416_ac97.o

obj-$(CONFIG_SND_SAMSUNG_AC97) += snd-soc-s3c2416-ac97.o

在linux-3.1\sound\soc\codec\Makefile添加:

snd-soc-wm9713-objs := wm9713.o

obj-$(CONFIG_SND_SOC_WM9713)+= snd-soc-wm9713.o

在linux-3.1/sound/soc/samsung/kconfig 配上WM9713configSND_SOC_SAMSUNG_SMDK_WM9713tristate "SoC AC97 Audio support for s3c2416 with WM9713"## depends on SND_SOC_SAMSUNG && (MACH_SMDK6410 || MACH_SMDKC100 || MACH_SMDKV210 || ##MACH_SMDKC110 || MACH_SMDKV310 || MACH_SMDKC210) #屏蔽掉depends on SND_SOC_SAMSUNG && ARCH_S3C24XX ##add by ljfselectSND_SOC_WM9713selectSND_SAMSUNG_AC97helpSat Y if you want to add support for SoC audio on the SMDK.這樣在內核中“make menuconfig”里面就可以看到"SoC AC97 Audio support for s3c2416 with WM9713",并選中他。接下來我們要在內核中加入這個平臺驅動設備:

在“arch/arm/mach-s3c2416/”的mach-tq2416.c中添加:

添加頭文件

#include //add by ljf

#include //add by ljf

#include //add by ljf

//add by ljf/** AC97*///at plat-s3c24xx/devs.cstatic int s3c2416_ac97_cfg_gpio(struct platform_device *pdev){return s3c_gpio_cfgpin_range(S3C2410_GPE(0), 5, S3C_GPIO_SFN(3));//硬件是使用GPE0~4,S3C_GPIO_SFN(3)表示使用第三功能為AC接口static struct resource s3c_ac97_resource[] = {[0] = {.start = S3C2440_PA_AC97,.end = S3C2440_PA_AC97 + S3C2440_SZ_AC97 -1,.flags = IORESOURCE_MEM,},[1] = {.start = IRQ_S3C244x_AC97,.end = IRQ_S3C244x_AC97,.flags = IORESOURCE_IRQ,},[2] = {.name = "PCM out",.start = DMACH_PCM_OUT,.end = DMACH_PCM_OUT,.flags = IORESOURCE_DMA,},[3] = {.name = "PCM in",.start = DMACH_PCM_IN,.end = DMACH_PCM_IN,.flags = IORESOURCE_DMA,},[4] = {.name = "Mic in",.start = DMACH_MIC_IN,.end = DMACH_MIC_IN,.flags = IORESOURCE_DMA,},};static struct s3c_audio_pdata s3c_ac97_pdata = {.cfg_gpio = s3c2416_ac97_cfg_gpio,};static u64 s3c_device_audio_dmamask = DMA_BIT_MASK(32);//0xffffffffUL;//will changestruct platform_device s3c_device_ac97 = {.name = "samsung-ac97",//.id = -1,.num_resources = ARRAY_SIZE(s3c_ac97_resource),.resource = s3c_ac97_resource,.dev = {.platform_data = &s3c_ac97_pdata,.dma_mask = &s3c_device_audio_dmamask,.coherent_dma_mask = DMA_BIT_MASK(32)//;0xffffffffUL//will change}};//add by ljf然后在“struct platform_device *tq2416_devices[] __initdata”中加入//add by ljf#ifdef CONFIG_SND_SOC_SAMSUNG_SMDK_WM9713&s3c_device_ac97,&samsung_asoc_dma,#endif//add by ljf然后編譯、燒寫。內核打印信息有asoc: wm9713-hifi samsung-ac97 mapping okALSA device list:

#0: SMDK WM9713

其實到這邊,你去播放音樂時還是沒聲音。

原因:由于在ac97初始化的時候,沒有設置wm9713相關為喇叭輸出功能。解決:在\sound\soc\samsung\s3c2416_ac97.cstatic struct snd_soc_dai_ops s3c_ac97_dai_ops結構體添加:.prepare = earphone_out,(初始化函數)實現該函數(寫在s3c_ac97_dai_ops結構體上面就行了):int earphone_out(struct snd_pcm_substream *substream,struct snd_soc_dai *dai){struct snd_ac97 *ac97;ac97 = 0;s3c_ac97_write(ac97,0x26,0x0);s3c_ac97_write(ac97, 0x0c, 0x0808);s3c_ac97_write(ac97,0x3c, 0xf803);s3c_ac97_write(ac97,0x3e,0xb990);if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {//s3c6400_ac97_write(0,0x02, 0x8080);s3c_ac97_write(ac97,0x02, 0x0404);s3c_ac97_write(ac97, 0x04, 0x0606);//s3c6400_ac97_write(0,0x1c, 0x00aa);s3c_ac97_write(ac97,0x1c, 0x12aa);}else{s3c_ac97_write(ac97, 0x12, 0x0f0f);#ifdef CONFIG_SOUND_WM9713_INPUT_STREAM_MICs3c_ac97_write(ac97,0x5c,0x2);s3c_ac97_write(ac97,0x10,0x68);s3c_ac97_write(ac97,0x14,0xfe00);#else /* Input Stream is LINE-IN */s3c_ac97_write(ac97, 0x14, 0xd612);#endif}return 0;}

到這邊聲卡就移植結束了。

再次編譯,燒寫。

再次測試一下:

cat /dev/urandom > /dev/dsp

可以聽到“莎莎”的聲音,說明移植成功。

0b1331709591d260c1c78e86d0c51c18.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532786.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux查看文件內容命令:cat, tail, head, more, less

Linux查看文件內容命令:cat, tail, head, more, less cat 直接顯示整個文件。 cat直接顯示全部文件內容,沒有換頁等交互。 cat filenamemore more命令,功能類似 cat ,cat命令是整個文件的內容從上到下顯示在屏幕上。 more會…

linux查看隊列 msg,linux第10天 msg消息隊列

cat /proc/sys/kernel/msgmax最大消息長度限制cat /proc/sys/kernel/msgmnb消息隊列總的字節數cat /proc/sys/kernel/msgmni消息條目數消息隊列綜合案例//server#include #include #include #include #include #include #include #include #define ERR_EXIT(m)do{perror(m);}wh…

Linux中 C++ main函數參數argc和argv含義及用法

Linux中 C main函數參數argc和argv含義及用法 簡介 argc 是 argument count的縮寫,表示傳入main函數的參數個數; argv 是 argument vector的縮寫,表示傳入main函數的參數序列或指針,并且第一個參數argv[0]一定是程序的名稱&…

c語言六位搶答器課程設計,51單片機八路搶答器課程設計

;說明:本人的這個設計改進后解決了前一個版本中1號搶答優先的問題,并增加了錦囊的設置,當參賽選手在回答問題時要求使用錦囊,則主持人按下搶答開始鍵,計時重新開始。;八路搶答器電路請看下圖是用ps仿真的,已…

ELF文件詳解—初步認識

ELF文件詳解—初步認識 轉自:https://blog.csdn.net/daide2012/article/details/73065204 一、 引言 在講解ELF文件格式之前,我們來回顧一下,一個用C語言編寫的高級語言程序是從編寫到打包、再到編譯執行的基本過程,我們知道在C…

埃及分數問題c語言,埃及分數問題(轉)

今日,小雨和小明來到網絡中心,繼續與劉老師討論“數的認識”問題。劉老師說:“還有一種‘埃及分數’需要認識。這是一類分裂分數的思維題,對思維能力的訓練很有價值。”小明說:“有意思,愿洗耳恭聽。”劉老…

linux常用命令--開發調試篇

前言 Linux常用命令中有一些命令可以在開發或調試過程中起到很好的幫助作用,有些可以幫助了解或優化我們的程序,有些可以幫我們定位疑難問題。本文將簡單介紹一下這些命令。 轉自:https://www.yanbinghu.com/2018/09/26/61877.html 示例程序…

簡單有趣的c語言小程序,一個有趣的小程序

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓源碼:#include #include #include #include #include HINSTANCE g_hInstance 0;LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nSh…

linux下ora 01110,ORA-01003ORA-01110

Oracle 9i數據庫登錄時,提示ORA-01003&ORA-01110,大概意思是數據文件存儲介質損壞。startup nomount,正常;alter database mount,也正常;alter database open,提示如下:alter database open*ERROR 位于第 1 行:ORA…

x11轉發:通過ssh遠程使用GUI程序

x11轉發:通過ssh遠程使用GUI程序 我們常常使用ssh服務遠程操控服務器,大多數操作我們都可以通過命令行命令來實現。 ssh遠程無法查看GUI程序 現在,筆者在x11-test目錄下放入一張圖片test.jpg,并通過opnencv-python寫一個簡單的…

操作系統引導詳細過程

操作系統引導詳細過程 轉自:https://blog.csdn.net/lijie45655/article/details/89366372 就直觀而言,我們所見到計算機啟動的過程是:按下電腦開機鍵,系統在黑色的屏幕下打印出一些英文語句、然后進入進度條狀態,最后…

android 自定義透明 等待 dialog,Android自定義Dialog內部透明、外部遮罩效果

Android自定義Dialog內部透明、外部遮罩效果發布時間:2020-09-09 03:01:41來源:腳本之家閱讀:117作者:zst1303939801本文實例為大家分享了Android自定義Dialog遮罩效果的具體代碼,供大家參考,具體內容如下圖…

對比損失的PyTorch實現詳解

對比損失的PyTorch實現詳解 本文以SiT代碼中對比損失的實現為例作介紹。 論文:https://arxiv.org/abs/2104.03602 代碼:https://github.com/Sara-Ahmed/SiT 對比損失簡介 作為一種經典的自監督損失,對比損失就是對一張原圖像做不同的圖像…

android 融云瀏覽大圖,融云 Android sdk kit 頭像昵稱更新機制

先申明筆者的實現方式不是唯一 也不一定是最優化的方案 如果您看到此篇博文 有不同看法 或者 更好的優化 更高的效率 歡迎在評論發表意見 融云官網點我融云頭像機制相關視頻詳解首先跟大家說一下 kit 跟 lib 的頭像機制 kit 是已經包含融云已經給開發者定制好的界面 諸如 會話界…

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one.

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. 報錯信息 報錯信息: RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates tha…

android訪問重定向地址,如何從android中重定向url加載圖像(示例代碼)

嗨,我正面臨這個問題我從RESTCall獲取了一個URL網址是http://hck.re/kWWxUI但是當我在瀏覽器中檢查時,它會重定向到https://s3-ap-southeast-1.amazonaws.com/he-public-data/afreen2ac5a33.jpg如何將此圖像加載到我的imageView中我已經知道如何將畢加索…

Linux中的awk、sed、grep及正則表達式詳解

Linux中的awk、sed、grep及正則表達式詳解 簡介 awk、sed和grep是Linux中文本操作的三大利器。 其中awk適用于取列,sed適用于取行,grep適用于過濾。 正則表達式 首先我們來介紹一下正則表達式,正則表達式(regular expression)描述了一種…

android聚焦時如何給控件加邊框,edittext設置獲得焦點時的邊框顏色

第一步:為了更好的比較,準備兩個一模一樣的EditText(當Activity啟動時,焦點會在第一個EditText上,如果你不希望這樣只需要寫一個高度和寬帶為0的EditText即可避免,這里就不這么做了),代碼如下:a…

gcc參數 -i, -L, -l, -include

gcc參數 -i, -L, -l, -include -i,-L,-l,-include -l和-L -l參數就是用來指定程序要鏈接的庫,-l參數緊接著就是庫名,那么庫名跟真正的庫文件名有什么關系呢?就拿數學庫來說,他的庫名是m&…

xargs 命令教程

xargs 命令教程 轉自:http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html 作者: 阮一峰 日期: 2019年8月 8日 xargs是 Unix 系統的一個很有用的命令,但是常常被忽視,很多人不了解它的用法。 本文介紹如…