MTK FM驱动开发


FMRadioActivity.java-->FMRadioService.java-->FMRadioNative.java-->libfm_jni.cpp-->fmr_core.cpp-->mt6628.cpp-->common.cpp->fm_module.c -> fm_main.c -> mt6628_fm_lib.c

   |
   V 
(驱动位置)                                                                                

fm_cust.cfg
Fm_cust_cfg.h

[DESCRIPTION]


-->如何更改fm音量
[SOLUTION]


成功打开fm之后,对/dev/fm设备文件描述符fd执行操作
ioctrl(fd,FM_IOCTL_SETVOL,volume)
volume的可选范围是0~15。
如果要了解driver层的处理请参照如下:
6620:参考mt6620_fm.c文件中的fm_setvol函数。
6628:参考mt6628_fm_lib.c文件中的mt6628_setvol函数。
6626:参考mt6626_fm_lib.c文件中的mt6626_setvol函数。


-->FM TRX的音源可以设定为哪些?软件如何配置?
对于MT6620,FM可以选择Analog、I2S路径传输
具体软件修改方法如下:
MTK_FM_AUDIO = FM_DIGITAL_INPUT (I2S)
MTK_FM_AUDIO = FM_ANALOG_INPUT (Analog)


-->[DESCRIPTION]
在Cosmos的版本,当后台在播MP3或FM的时候进入Camera/Video,是会将MP3或FM停止(Teminate)掉(但在非Cosmos的版本是Suspend,退出时再Resume)。有些客户希望跟HTC一样,在退出 Camera/Video之后还继续播MP3、FM。这个需求,修改为跟非Cosmos版本一样即可。 
[KEYWORD]
Camera MMI
[SOLUTION]
添加了一个宏, 所有的修改都使用宏包起来.
CUSTOM_OPTION      += __CAMCO_SUSPEND_RESUME_BG_AUDIO__


并且更新下面两个函数.
void VappCamcoPage::initEnv(void)
{
    MMI_TRACE(TRACE_GROUP_2, TRC_VAPP_CAMCO_INIT_ENV);        
#ifdef __CAMCO_SUSPEND_RESUME_BG_AUDIO__
    // Suspend bg ply
    mdi_audio_suspend_background_play();
#else
    // stop bg ply 
    mdi_audio_terminate_background_play();  
#endif
    
    /* stop MMI sleep */
    srv_backlight_turn_on(SRV_BACKLIGHT_PERMANENT);
……

void VappCamcoPage::deinitEnv(void)
{
    ……
    /* let MMI can sleep */
    srv_backlight_turn_off();
    /* resume background audio */
#ifdef __CAMCO_SUSPEND_RESUME_BG_AUDIO__
    mdi_audio_resume_background_play();
#endif
    /* re-enable keypad tone */
    mmi_frm_kbd_set_tone_state(MMI_KEY_TONE_ENABLED);



[DESCRIPTION]


-->FM RDS出现乱码
[SOLUTION]
请参照如下步骤进行排查。
原因一:
FM RDS电台中的信息是中文的,目前的系统不支持中文。
原因二:
RDS电台信息的接受,和FM天线接收灵敏度有很大关系。如果FM 天线灵敏度不好,即在接收RDS电台信息过程中,接收到信息不完整。
原因三:
当前测试环境下该RDS电台信号差所致。建议到一个好的环境下,同时使用对比机做对比试验。如果对比机可以接收到,而样机不能,可以增加测试的时间。如果实现完整的RDS信息,样机需要的时间长于对比机,那么说明样机的FM天线灵敏度弱于对比机


-->[DESCRIPTION]
打开fm设备节点被拒绝,从mobile log中的main log发现是由于权限问题。
检查init.rc中加载fm驱动时,创建的fm设备节点权限为660,为何上层打开FM还是会失败。
[SOLUTION]


在alps/mediatek/source/packages/FMRadio里面的AndroidManifest.xml文件中加上<uses-permission android:name="android.permission.ACCESS_MTK_MMHW">
-->MT6620/MT6628中如何关闭FM/BT/GPS/WIFI部分或全部功能
BT
Turn on/off
MTK_BT_SUPPORT = yes/no
MTK_WLANBT_SINGLEANT=yes/no
FM Radio

Turn on/off
Chip Switchable

[Turn on/off]:
MTK_FM_SUPPORT=yes/no
MTK_FM_TX_SUPPORT = yes/no
MTK_FM_RECORDING_SUPPORT=yes/no
[Chip switchable]:
MTK_FM_CHIP=MT6620_FM/MT6616_E3_FM/AR1000_FM
WIFI

Turn on/off

[Turn on/off]
MTK_WLAN_SUPPORT=yes/no
MTK_WAPI_SUPPORT=yes/no
MTK_WIFI_HOTSPOT_SUPPORT=yes/no
MTK_WLANBT_SINGLEANT=yes/no
 
GPS

Turn on/off

[Turn on/off]
MTK_GPS_SUPPORT=yes/no
MTK_AGPS_APP=yes/no
 
 
如果是想将BT/FM/WIFI/GPS的功能全部关掉
除了需要按照以上表格去设置ProjectCConfig.mk,还需要修改alps/mediatek/config/[Project]/autoconfig/kconfig/project如下:


# CONFIG_MTK_COMBO is not set


# CONFIG_MTK_COMBO_BT is not set


# CONFIG_MTK_COMBO_GPS is not set


# CONFIG_MTK_COMBO_FM is not set


# CONFIG_MTK_COMBO_WIFI is not set


如果再有剩下再有编译的build error提示有undefined的话,请客户根据build error提示自行关闭undefined项即可。


-->[DESCRIPTION]


假台相当多,而且很多电台彼此相邻
[SOLUTION]

修改mediatek/source/kernel/drivers/fmradio/mt6628/pub/mt6628_fm_cmd.c文件中的接口

mt6628_seek()和mt6628_scan()如下:
    if (0 == fm_get_channel_space(max_freq)) {
        max_freq *= 10;
    }
改为:
    if (0 == fm_get_channel_space(min_freq)) {
        min_freq *= 10;
    }


-->DESCRIPTION]

Fm不工作的问题
[SOLUTION]

当遇到该问题时,请follow如下的步骤排查问题。

1.         6620/6628/6626是多合一芯片。检查其他模块是否可以正常工作,例如BT、GPS、WIFI。如果有其他的模块也不能正常工作,请贵司从dms服务器上下载“ALPS_MT6620_MT6628_SW_Switch_SOP.docx”文档,并按照文档中的介绍仔细检查,一般都会找到问题原因。如果只是fm不能正常工作,进行下一步。

2.         抓取一份复现问题的mobile log

Mobile Log and Net Log(Tcpdump Log)获取步骤

1.Download Eng Build的软件.

2.开机,开启Mobile Log, Net Log(Tcpdump Log).

a).Mobile Log Total Log Size设置为1000;//Log存于T卡,Total Log Size设大些,以确保保存整个测试过程的Log.

b).钩选”Run Mobile Log Service on Android Startup”.

3.关机,开机.
4.开fm, 进行测试,复现问题。
5.复现问题后,上传Mobile Log and Net Log到eService.
6. 查看mobile log里的main_log,打开fm是否成功,可以搜索com_open_dev,检查返回值是否成功。

如果打开失败,在log中会有失败原因,例如“cann’t  fm device”的字样,如果是没有该设备引起的打开失败,进行下一步。
7.  检查mobile log里的kernel_log.boot文件,确认加载fm驱动文件是否成功。

加载fm驱动是在init.rc文件。
加载6620 fm驱动:

insmod /system/lib/modules/mt6620_fm_drv.ko

insmod /system/lib/modules/mtk_fm_priv.ko

加载6628 fm驱动:

insmod /system/lib/modules/mtk_fm_drv.ko
insmod /system/lib/modules/mtk_fm_priv.ko
上面加载的fm驱动文件名称一定要写正确。如果加载失败,进行下一步。
5.         失败的原因如果是加载的驱动文件找不到,那么就是kernel编译FM有问题,即没有产生fm驱动文件,或者产生的驱动文件名称和上一步加载的文件名称不一致。
l  对于6620/6628,贵司从dms服务器上下载“ALPS_MT6620_MT6628_SW_Switch_SOP.docx”文档,请仔细检查文档中描述的alps/mediatek/config/[Project]/autoconfig/kconfig/project部分

l  检查加载驱动的名称和生成的fm驱动文件的名称是否一致。
进入编译后的bin档所在的目录,即alps\out\target\product\$Project\system\lib\modules下,检查生成的fm驱动文件名称(要根据文件时间来确保这个文件是最近编译才产生的),如果和加载的驱动文件名称不一致,请更改init.rc文件
Note:

Fm 驱动ko文件的产生规则

  针对6620,需要查看alps/mediate/source/kernel/driver/combo和alps/mediate/source/kernel/driver/combo/drv_fm下的makefile文件中的规则。
  针对6628/6626,需要检查alps/mediate/source/kernel/driver/fmradio下的makefile文件中的规则。

-->FM高概率性搜台失败
init.rc文件中的配置有问题
service 6620_launcher /system/bin/6620_launcher -m 1 -b 4000000 -p /system/etc/firmware/-d/dev/ttyMT2
这一行中的“-d”前后都要有空格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值