全志A10 Android4.0 电话系统 使用说明文档 (MU509篇)
[复制链接]
1.1 目的
本文档只要是针对华为 MU509通信模块在全志A10 android系统上开发的指导说明。
1.2 使用范围
硬件平台: 全志A10 平台 软件平台: Android4.0.x 1.4 版及以上版本
2 Linux内核
2.1 相关代码说明
2.1.1 MU509控制
2.1.1.1 上电和关电
MU509的上电和关电操作在“linux-3.0\drivers\usb\host\ sw_usb_mu509.c ”有定义,其中:
z mu509_vbat(): MU509电池开关
z mu509_power (): MU509 3G 模块的上电和关电。上电后射频模块开始工作,并且
USB 开始连接;关电后设备模块停止工作,USB 断开连接。
z mu509_reset(): 复位MU509
MU509的上电在OHCI 控制器初始化时完成,关电在OHCI 控制器移除或是关机时完
成。
2.1.1.2 休眠和唤醒
MU509的休眠和唤醒操作在“linux-3.0\drivers\usb\host\ sw_usb_mu509.c ”有定义,其中:
z mu509_wakeup_sleep ():控制MU509的休眠和唤醒。
在OHCI控制器suspend 阶段完成MU509的休眠,在 resume 阶段完成MU509的唤醒。
注:休眠期间 MU509进入低功耗模式,此时还与基站保持连接。电话、短信、彩信等特殊
事件可以唤醒A10 。
2.1.1.3 来电唤醒
MU509的唤醒方式和 PA D 传统的唤醒方式有区别,为了不影响 PA D 功能,暂未发布,
只作为额外的补丁形式发布。
1 、standby 是加入MU509唤醒源
(1 )、加入唤醒源
在“lichee\linux-3.0\arch\arm\mach-sun4i\pm\pm.c ”的aw_pm_enter()函数里加入唤醒源。
standby_info.standby_para.even t = SUSPEND_WAKEUP_SRC_EXINT
| SUSPEND_WAKEUP_SRC_ALARM;
修改为:
standby_info.standby_para.event = SUSPEND_WAKEUP_SRC_EXINT
| SUSPEND_WAKEUP_SRC_ALARM
| SUSPEND_WAKEUP_SRC_PIO;
“SUSPEND_WAKEUP_SRC_PIO ”在“linux-3.0\include\linux\power\ aw_pm.h”中有定义
#define SUSPEND_WAKEUP_SRC_PIO (1<<6) /* gpio event */
(2 )、修改 standby.c ,填加红色标记部分
if(pm_info.standby_para.event & SUSPEND_WAKEUP_SRC_TIMEOFF){
/* set timer for power off */
if(pm_info.standby_para.time_off) {
standby_tmr_set(pm_info.standb y_para.time_off);
standby_enable_int(INT_SOURCE_TIMER0);
}
}
if(pm_info.standby_para.event & SUSPEND_WAKEUP_SRC_PIO){
standby_3g_wakeup_init();
standby_enable_int(INT_SOURCE_PIO);
}
/* save stack pointer registger, switch stack to sram */
sp_backup = save_sp();
if(pm_info.standby_para.event & SUSPEND_WAKEUP_SRC_KEY){
standby_key_exit();
}
if(pm_info.standby_para.event & SUSPEND_WAKEUP_SRC_PIO){
standby_3g_wakeup_exit();
}
standby_power_exit();
pm_info.standby_para.event |= standby_query_int(INT_SOURCE_TIMER0)?
0:SUSPEND_WAKEUP_SRC_TIMEOFF;
pm_info.standby_para.event |= standby_query_int(INT_SOURCE_PIO)?
0:SUSPEND_WAKEUP_SRC_PIO;
/* restore voltage for exit standby */
standby_set_voltage(POWER_VOL_DCDC2, dcdc2);
(3 )、修改 standby_usb.c ,填加红色标记部分
__s32 standby_3g_wakeup_init(void)
{
__u32 gpio_base = SW_VA_PORTC_IO_BASE;
__u32 int_base = SW_VA_INT_IO_BASE;
__u32 reg_val = 0;
/* set port configure register, PH2 */
reg_val = USBC_Readl(gpio_base + 0xFC);
reg_val &= ~(0x07 << 8);
reg_val |= (0x6 << 8); //EINT2
USBC_Writel(reg_val, (gpio_base + 0xFC));
/* PIO interrupt configure register */
reg_val = USBC_Readl(gpio_base + 0x200);
reg_val &= ~(0x07 << 8);
reg_val |= (0x1 << 8);
USBC_Writel(reg_val, (gpio_base + 0x200));
/* interrupt enable */
reg_val = USBC_Readl(gpio_base + 0x210);
reg_val |= (1 << 2);
USBC_Writel(reg_val, (gpio_base + 0x210));
return 0;
}
__s32 standby_3g_wakeup_exit(void)
{
#if 0
__u32 gpio_base = SW_VA_PORTC_IO_BASE;
__u32 reg_val = 0;
/* clear interrupt pending */
reg_val = USBC_Readl(gpio_base + 0x214);
reg_val &= (1 << 2);
USBC_Writel(reg_val, (gpio_base + 0x214));
/* interrupt disable */
reg_val = USBC_Readl(gpio_base + 0x210);
reg_val &= ~(1 << 2);
USBC_Writel(reg_val, (gpio_base + 0x210));
#endif
return 0;
}
__s32 standby_query_3g_event(void)
{
__u32 gpio_base = SW_VA_PORTC_IO_BASE;
__u32 reg_val = 0;
__u32 result = 0;
/* interrupt pending */
reg_val = USBC_Readl(gpio_base + 0x214);
result = (reg_val & (1 << 2)) ? 0 : -1;
reg_val &= (1 << 2);
USBC_Writel(reg_val, (gpio_base + 0x214));
return result;
}
(4 )、修改 standby_usb.h ,填加红色标记部分
extern __s32 standby_3g_wakeup_init(void);
extern __s32 standby_3g_wakeup_exit(void);
extern __s32 standby_query_3g_event(void);
2 、唤醒A10 后,响应唤醒中断源
MU509中断响应在“linux-3.0\drivers\usb\host\ sw_usb_mu509.c ”有实现,其中:
z mu509_wakeup_irq_interrupt ():为中断处理函数。
z mu509_wakeup_irq_work():工作队列,负责唤醒android和点亮屏。
3 、唤醒android 系统,点亮屏
MU509唤醒中断产生以后,MU509中断处理函数会模拟一个 power 按键,唤醒 android
和点亮屏。
在“linux-3.0\drivers\power\axp_power\ axp20-sply.c ”和
“linux-3.0\drivers\power\axp_power\ axp20-sply-cou.c ”文件里增加如下函数:
#ifdef CONFIG_USB_SW_MU509
void axp_pressshort_ex(void)
{
axp_pressshort(NULL);
return;
}
#else
void axp_pressshort_ex(void)
{
return;
}
#endif
EXPORT_SYMBOL_GPL(axp_pressshort_ex);
2.1.2 音频操作
请参考《audio codec designed_v0.3.doc 》。
2.2 脚本配置
在sys_config1.fex 中添加3G相关的引脚。
;--------------------------------------------------------------------------------
;3G configuration
;--------------------------------------------------------------------------------
[3g_para]
3g_used = 1
3g_usbc_num = 1
3g_usbc_type = 2
3g_uart_num = 0
3g_vbat_gpio = port
A0<1><0><0>
3g_power_on_off_gpio = port
A1<1><0><1>
3g_reset_gpio = port
A2<1><0><0>
3g_wakeup_in_gpio = port
A3<1><0><0>
3g_wakeup_out_gpio = port
H2<1><0><0>
2.3 编译
(1 )、添加 MU509到内核,并且把 MU509所挂载的 EHCI从内核移除
[size=0.83em]e3.png (80.9 KB, 下载次数: 0)
下载附件
[color=rgb(153, 153, 153) !important]2013-11-12 13:39 上传
...