全志a10 Android,全志A10 Android4.0 电话系统 使用说明文档 (MU509篇)

全志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  上电和关电

thread-433140-1-1.html

thread-433140-1-1.html

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

thread-433140-1-1.htmlA0<1><0><0>

3g_power_on_off_gpio     = port

thread-433140-1-1.htmlA1<1><0><1>

3g_reset_gpio    = port

thread-433140-1-1.htmlA2<1><0><0>

3g_wakeup_in_gpio    = port

thread-433140-1-1.htmlA3<1><0><0>

3g_wakeup_out_gpio    = port

thread-433140-1-1.htmlH2<1><0><0>

2.3  编译

(1 )、添加 MU509到内核,并且把 MU509所挂载的 EHCI从内核移除

thread-433140-1-1.html [size=0.83em]e3.png (80.9 KB, 下载次数: 0)

下载附件

[color=rgb(153, 153, 153) !important]2013-11-12 13:39 上传

...

更多分享资料  详细的文档请下载PDF版本<>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值