MTK fm驅動移植

2021-05-25 00:46:58 字數 2887 閱讀 4300

如果硬體新增更改了一塊fm晶元,而驅動往往是由晶元**商提供,我們需要做的工作是移植。

假設**商提供的驅動是:

qndriver.c

qndriver.h

以下分4個步驟完成,看好

1.更改晶元id

在檔案***_gprs.mak (make目錄下,***與平台有關)中找到

fm_radio_chip = ar1000   # none, mt6189a1, mt6188a1, ar1000

更改為我們的晶元id,如qn8035a1,不要緊,隨便定義:

fm_radio_chip = qn8035a1 # none, mt6189a1, mt6188a1, ar1000

注意:目錄(build/sangfei36_10a)下也有檔案***_gprs.mak,這個不需要改,make編譯之後,它會被上面

的覆蓋。

2.新增編譯路徑

在檔案option.mak (make目錄)中新增下面的**:

ifeq ($(strip $(fm_radio_chip)),qn8035a1)

ifneq ($(strip $(fm_radio_hw_search)),true)

$(call dep_err_seta_or_onb,fm_radio_chip,non qn8035a1,fm_radio_hw_search)

dependency_conflict = true

else

com_defs  += __fm_radio_hw_search__

endif

endif

3.新增和配置驅動檔案

mtk的fm驅動有別,是放在(fm_drv)目錄下,我們把qndriver.c和qndriver.h放進這個目錄下,

再建立乙個檔案qn8035a1.c(隨便命名)。然後轉移到(make/fm_drv)目錄:

(1)開啟fm_drv.pth,在結尾新增

fm_drv

(2)開啟檔案fm_drv.inc ,在結尾新增

fm_drv

(3)開啟檔案fm_drv.lis 在結尾新增

fm_drv/qn8035a1.c

fm_drv/qndriver.c

fm_drv/qnio.c

4.編寫mtk的fm介面函式

fm使用的是i2c協議,要看看sda和scl引腳是否對了,還有乙個32k頻率的引腳.fm的介面函式是固

定的,所以要新增開關qn8035a1(剛才命名的晶元id)來控制,也就是說選擇哪個晶元就編譯哪個檔案。

開啟剛才建立的檔案qn8035a1.c,新增下面的**,這些函式都可參考已有的編寫:

#include "l1audio_def.h"

#include "qndriver.h"

#include "qnio.h"

#if defined(qn8035a1)

typedef structfmr_data;

extern fmr_data *pstfmr_data;

static uint16 qn_freqst = 987;

static bool qn_hwsearch_flag = 0;

static bool qn_valid_flag = 0;

void serialcomminit(void)//開啟i2c協議

void serialcommrelease(void)//關閉i2c協議

void serialcommcryclkon(void)/開啟fm的32k波形

void serialcommcryclkoff(void)//關閉fm的32k波形

void fmdrv_setfreq( int16 curf )//定位到指定的頻道,要自己寫

void fmdrv_hwsearch(int16 freq, bool is_step_up, int16 space, bool is_preset)//用於自動搜尋,

要寫uint8 fmdrv_hwspolling(uint16 *curf, uint8 *is_valid)//用於自動搜尋,要寫

uint8 fmdrv_validstop(int16 freq, int8 signalvl, bool is_step_up)//用於自動搜尋,要寫

void fmdrv_setvolumelevel(uint8 level)//設定fm音量,要自己寫

void fmdrv_mute(uint8 mute)//設定fm靜音,要自己寫

void fmdrv_poweronreset(void)//復位,要自己寫

void fmdrv_poweroffproc(void)//關閉fm,要自己寫

kal_uint16 fmdrv_readbyte(kal_uint8 addr)//沒用,返回1

kal_bool fmdrv_writebyte(kal_uint8 addr, kal_uint16 data)//沒用,返回1

kal_uint8 fmdrv_get_stereo_mono(void)//不知有什麼用,直接返回0

void fmdrv_radio_item_info(kal_uint16 group_idx, kal_uint16 item_idx, kal_uint32

item_value)//不知有什麼用,空著它

uint16 fmdrv_getsiglvl( int16 curf )//沒見用到,不想寫

uint16 fmdrv_getif( int16 curf)//return 120;不懂,隨便返回乙個數

void fmdrv_evaluaterssithreshold(void)//沒用

void fmdrv_chipinit(void)//沒用

bool fmdrv_ischipvalid( void )//返回true

#endif

Alsa驅動移植

華清遠見嵌入式學院講師。二 預設情況下核心已經支援alsa驅動,保險情況下先去確認一下,如下圖 device drivers sound card support advanced linux sound architecture alsa for soc audio support soc aud...

Alsa驅動移植

華清遠見嵌入式培訓中心講師。二 預設情況下核心已經支援alsa驅動,保險情況下先去確認一下,如下圖 device drivers sound card support advanced linux sound architecture alsa for soc audio support soc a...

wpa supplicant驅動移植

移植環境 主機作業系統 ubantu 10.10 目標系統 hi351x 核心 linux 2.6.14 交叉編譯器 arm hismall linux 版本 wpa supplicant 0.7.3 移植wpa supplicant前確保openssl已經移植好了,openssl移植參考前文 op...