前段时间接手公司的allwinner平台的开发工作。在移植ar6302驱动的时候遇到一些小问题,在这里记录一下权作复习。
全智平台内置了ar6302的驱动,手上版本是build_3.1_RC.329 ,添加驱动很简单。在device里面的boardconfig中把注释掉的相关选项打开即可。
然后是kernel 中的修改。将驱动中读取固件的目录修改成当前系统指向的目录。并且在/arch/arm/mach-sun4i/devices.c中添加平台设备驱动。
并在
code:
static struct platform_device *sw_pdevs[] __initdata = {
&debug_uart,
&sw_pdev_dmac,
&sw_pdev_nand,
&sun4i_twi0_device,
&sun4i_twi1_device,
&sun4i_twi2_device,
};
中添加写好的驱动函数名。
接下来是上电,ar6302使用sdio通讯。上电通过mmc来进行。
在/driver/mmc/mmc-pm中,仿照mmc_pm_rt18723as.c 写了一个上电驱动。
并且在mmc_pm.c中的probe函数中添加上初始化代码
shwn pin 默认为高,根据规格书要求,先拉低shdn pin ,然后拉高3.3v的电,最后再拉高shwn pin,完成初始化上电。
关于电源管理的问题。
在wlan_config.h中,相关设置,观察可得,ar6302支持3种模式:
1、cut power模式(全智默认是此模式,进入休眠状态的时候直接把wifi ic 的电源断掉,缺点也很明显,就是resume 的时候要重新上电,响应速度较慢)
2、deep sleep模式
3、wow模式(支持网络唤醒)
在wlan_config.h中选择cut power模式以后。需要mmc 的电源管理驱动中,对进入休眠和唤醒以后重新上电的顺序进行编排。这里不能严格按照规格书中的上下点顺序来。
正确的顺序是:
1、休眠状态下,先拉低 3.3v 的电,然后拉低shdn pin。
2、在唤醒状态下,先拉高3.3v 的电,然后拉高shdn pin。
至此,AR6302的移植全部完成,能够正常的工作。
本次移植的经验是,一定要和厂家的FAE详细沟通,最好是能够叫过来现场同步调试,否则沟通不畅,非常的耽误事。