基於S5PV210的HDMI移植

2021-07-24 07:37:22 字數 2693 閱讀 5751

核心版本 3.9.11 編譯器版本4.51

由於核心中已經有比較完善的hdmi驅動了,所以稍微修改配置一下就能使用hdmi驅動。

s5pv210的hdmi驅動檔案在\drivers\media\platform\s5p-tv資料夾中

其中 hdmi_drv.c 是作為hdmi平台裝置驅動。(主要驅動)

hdmiphy_drv.c是通過上面的驅動匹配成功後會自動匹配此裝置驅動,該裝置驅動實質就是乙個i2c驅動,用於硬體之間指令資料的傳送(貌似這個i2c只有傳送功能)。

還有乙個就是mixer檔案,它是乙個混合器,負責合成影象和聲音,之前的驅動最後都會交由該驅動管理。會在/dev目錄下生成幾個video的裝置。

基本分析完了,接下來開始修改核心檔案。

首先在arch\arm\mach-s5pv210\mach-smdkv210.c中新增如下i2c子裝置資訊

/*hdmi*/

static

struct i2c_board_info hdmiphy_info = ;

其中 0x70是晶元手冊中給的hdmi裝置的i2c位址。(右移1位是因為讀寫位的關係,i2c傳送時位址會自動左移一位在最低位新增0(寫)或者1(讀))」hdmiphy-s5pv210」對應著 hdmiphy_drv.c中的id。對於成功匹配至關重要。

在平台裝置陣列中,注釋掉預設的i2c1裝置,並新增hdmi相關的裝置。

這些裝置定義都在arch\arm\plat-samsung\devs.c檔案中。

由於 hdmi使用i2c1作為指令傳送器,並且是hdmi專用的i2c,所以不能當做普通的i2c控制器驅動,否則驅動能正確載入,但是會提示0x70位址沒ack訊號。(i2c_hdmi裝置在devs.c中有定義,和普通i2c1裝置對比後,明顯有區別)

繼續在smdkv210_machine_init中新增2個函式,設定i2c從裝置資訊,在hdmi裝置匹配成功後會自動進行註冊。

對上述兩個函式進行修改,修改預設的bus_num,因為hdmi介面使用i2c1控制的,所以將bus_num改為1.(上面兩個函式都要改),不然會註冊失敗。因為跟蹤hdmi_drv.c的prob函式不難發現,他會通過此bus_num獲取乙個adapt,在i2c子系統中1個adapt相當於乙個i2c控制器驅動,bus_num則是區分這些i2c控制器的。然後在將i2c從裝置資訊新增到對應的i2c控制器下。修改後如下圖:

還要注意config_s5p_dev_i2c_hdmiphy這個巨集,它在3.9.11中屬於隱藏選項,沒有配置選項,只能通過手動修改kconfig檔案實現。若不修改則無法使用上述2個函式。

在arch\arm\mach-s5pv210\kconfig的smdk210中新增

核心配置則通過查kconfig和menuconfig 的 / 號的查詢功能來配置。

大致配置如下:

device drivers  -->

********** support -->

v4l platform device -->

samsung tv driver -->

hdmi driver

在device driver選中i2c support,其中要注意 i2c hardware bus support選項,裡面要選擇 s3c2410 i2c driver 否則i2c控制器裝置不會被載入。

power management options 中的 run-time pm core 必選

成功後會輸出如下

這樣編譯完成後第一次執行可以,第二次執行就會宕機,這是因為hdmi時鐘關了,第二次執行會重新開啟導致系統時鐘出問題,解決辦法:

一、修改mixer_drv.c中的mxr_runtime_suspend函式中注釋掉clk_disable(res->sclk_mixer);。

二、修改hdmi_drv.c中的hdmi_resource_poweroff函式,注釋掉clk_disable(res->sclk_hdmi)。

這樣就不會宕機了!!!!!!!!!!!!!!!!!!

附上效果圖:

S5PV210 裸機中斷

這裡我以外部中斷為例畫出了中斷響應的過程。當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是irq的處理程式。在異常處理程式irq handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式 注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是乙個兩級...

S5PV210控制蜂鳴器

s5pv210帶有乙個蜂鳴器,十分吵鬧,本章將學習如何控制蜂鳴器。相關引腳 蜂鳴器的操作十分簡單,原理跟操作led一樣,通過控制gpdo o這個引腳就可以達到控制蜂鳴器的目的。1.start.s start.s做了下面3件事 第一步 關看門狗 第二步 設定棧,以便呼叫c函式 第三步 呼叫main函式...

S5PV210控制蜂鳴器

s5pv210帶有乙個蜂鳴器,十分吵鬧,本章將學習如何控制蜂鳴器。相關引腳 蜂鳴器的操作十分簡單,原理跟操作led一樣,通過控制gpdo o這個引腳就可以達到控制蜂鳴器的目的。1.start.s start.s做了下面3件事 第一步 關看門狗 第二步 設定棧,以便呼叫c函式 第三步 呼叫main函式...