void jz_hibernate(void) { local_irq_disable(); #ifdef CONFIG_BOARD_H600S poweroff_inand(); #endif /* Set minimum wakeup_n pin low-level assertion time for wakeup: 1000ms */ rtc_write_reg(RTC_HWFCR, HWFCR_WAIT_TIME(1000)); /* Set reset pin low-level assertion time after wakeup: must > 60ms */ rtc_write_reg(RTC_HRCR, (3 << 11)); /* clear wakeup status register */ rtc_write_reg(RTC_HWRSR, 0x0); rtc_write_reg(RTC_HWCR, 0x8); while(1) { /* Put CPU to hibernate mode */ rtc_write_reg(RTC_HCR, 0x1); jz_notifier_call(NOTEFY_PROI_HIGH, JZ_POST_HIBERNATION, NULL); mdelay(200); printk("We should NOT come here.%08x\n",inl(RTC_IOBASE + RTC_HCR)); } }
void arch_exit_mmap(struct mm_struct *mm) { jz_notifier_call(NOTEFY_PROI_NORMAL, MMU_CONTEXT_EXIT_MMAP, mm); return; }