2012年11月6日 星期二

AM335X RTC-Only mode suspend ...... part #2

接續上一篇 !!

TI 的 GP-EVM H/W 上使用了  CPLD + EEPROM , 讓 BSP 可以支援很多不同版本的 EVB .

我們的產品並不會像這樣使用 ( CPLD +EEPROM = 錢多 ) , 所以我將
board-am335xevm.c 大修改 , 將 CPLD 和 EEPROM 判別的部份全部移除 , 只留下我們要的  init function.

詭異的問題來了 ,我在  .init_machine   = am335x_ec810_init, 直接呼叫 setup_ec810_board(ec810_dev_cfg); 去 initial 所有有用到的 device . 這樣會導致 resume 當機 . (如上一篇問的 ) !!

換個方式 , 使用和 EVB 一樣的方式 , 掛 eeprom driver , 然後在 eeprom 的 .setup function 中去執行 setup_ec810_board(ec810_dev_cfg); 就可以安然的 resume ....
詭異了.....!!

時間關係 , 所以先用這樣的方式解決 , 等有時間在詳細去追這個詭異的問題 !!



static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context)
{
    DEBUG_MSG(">>>>========<<<<");
    setup_ec810_board(ec810_dev_cfg);

}

static struct at24_platform_data am335x_baseboard_eeprom_info = {
    .byte_len       = (256*1024) / 8,
    .page_size      = 64,
    .flags          = AT24_FLAG_ADDR16,
    .setup          = am335x_evm_setup,
    .context        = (void *)NULL,
};





因為 RTC-Only mode , 所以 CPU 都沒 power 了 , 只能靠 PMIC 叫醒 CPU (reset ) .
我們產品的需求 要有 alarm wake up , 所以 RTC 也只能使用  PMIC 的 RTC 了 .

PMIC 有兩個途徑可以起來 , RTC Irq & Power key press.
一般 active mode (PMIC 供電 , CPU 運作) , 使用者可以透過power key 去 執行 suspend 的動作, 由 CPU 的 GPIO pin 去 handle 就可  !!

問題來了 tps65910 卻會發 INT 給 CPU , 並且清除不了這個 INT , 會讓我的 CPU 忙於處理這個 INT , 問 FAE , 竟然跟我說多清幾次就可.... 哇咧..... 使用者, 如果按著不放, 所其他 AP 都鈍鈍的...... @@ !!

偏偏 PMIC wakeup 需要有 INT 訊號 , 所以 PWD_ON 的 mask 也不能清除 . 一清除PMIC 又馬上進入 sleep mode .

Try 了很多情況 , 最後終於解決了 !! 解決方式 , 下一篇說明 !!

PS. 現在要去忙 u-boot 的 ehpwm & ecap driver 了 , 一個給 LCD backlit 用(u-boot logo ) , 另外一個給 Buzzer 用 (u-boot 下只有 logo , 不想顯示太多東西 , 所以只好用 beep 聲去表現一些工程模式的動作 ) !!







沒有留言:

張貼留言