static int str8131_pm_enter(suspend_state_t state) { PM_DEBUG("%s: state=%d\n",__FUNCTION__,state); switch (state) { case PM_SUSPEND_STANDBY: case PM_SUSPEND_MEM: #ifdef DEBUG /* * Configure system Xtal clock to be output to CLKOUT pin */ HAL_PWRMGT_CONFIGURE_CLOCK_OUT_PIN(0, 0); #endif /* * 1. Disable DRAM Controller's clock * 2. Power-down sytem 25MHz XTAL pad * 3. Force CPU into sleep mode, and wait until wake-up interrupt happens!! * When in sleep mode, CPU internal clock and system PLLs and/or 25MHZ XTAL * pad will be power-down!! */ //int 16, 18, 28-30 //#define WAKEUP_INT 0x70050000 //int 16, 18, 29-30 //#define WAKEUP_INT 0x60050000 //int 18, 29-30 #define WAKEUP_INT 0x60040000 //int 29-30 //#define WAKEUP_INT 0x60000000 //#define WAKEUP_INT 0xffffffff PM_DEBUG("%s: int that can wake cpu up, WAKEUP_INT=%.8x\n",__FUNCTION__,WAKEUP_INT); // HAL_INTC_SELECT_INTERRUPT_SOURCE_FOR_SLEEP_WAKEUP(30); INTC_POWER_MANAGEMENT_INTERRUPT_REG=WAKEUP_INT; HAL_PWRMGT_DISABLE_DRAMC_CLOCK(); #ifndef CONFIG_STAR_NIC_PHY_INTERNAL_PHY HAL_PWRMGT_POWER_DOWN_SYSTEM_XTAL_PAD(); #endif PM_DEBUG("%s: bye...\n",__FUNCTION__); str8131_nic_suspend(state); local_irq_enable(); Hal_Cpu_Enter_Sleep_Mode(); local_irq_disable(); str8131_nic_resume(); PM_DEBUG("%s: awake from sleep\n",__FUNCTION__); break; case PM_SUSPEND_DISK: return -ENOTSUPP; default: return -EINVAL; } return 0; }
static int __init str8100_inthandler_init(void) { int ret; if(debug) printk("%s: \n",__FUNCTION__); #if 0 /* * Configure system Xtal clock to be output to CLKOUT pin */ HAL_PWRMGT_CONFIGURE_CLOCK_OUT_PIN(0, 0); #endif // HAL_MISC_ENABLE_ALL_SHARED_GPIO_PINS(); if(gpio){ if(debug) printk("%s: registering int handler for gpio int\n",__FUNCTION__);\ //gpio initialization depend on application #if 0 HAL_MISC_DISABLE_EXT_INT29_PINS(); HAL_MISC_DISABLE_EXT_INT30_PINS(); HAL_PWRMGT_ENABLE_GPIO_CLOCK(); PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << PWRMGT_GPIO_SOFTWARE_RESET_BIT_INDEX); PWRMGT_SOFTWARE_RESET_CONTROL_REG &= ~(0x1 << PWRMGT_GPIO_SOFTWARE_RESET_BIT_INDEX); PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << PWRMGT_GPIO_SOFTWARE_RESET_BIT_INDEX); HAL_GPIOA_SET_DIRECTION_INPUT(3); HAL_GPIOA_ENABLE_INTERRUPT(3); HAL_GPIOA_DISABLE_INTERRUPT_MASK(3); HAL_GPIOA_SET_INTERRUPT_EDGE_TRIGGER_MODE(3); #endif str8100_set_interrupt_trigger (INTC_GPIO_EXTERNAL_INT_BIT_INDEX,INTC_LEVEL_TRIGGER,INTC_ACTIVE_HIGH); if ((ret=request_irq(INTC_GPIO_EXTERNAL_INT_BIT_INDEX, str8100_gpio_irq_handler, 0, "testing", NULL))){ if(debug) printk("%s: request_irq failed(ret=0x%x)(-EBUSY=0x%x)\n",__FUNCTION__,ret,-EBUSY); return -EBUSY; } } #define register_ext_int(_i){\ if(debug) printk("%s: registering int handler for external int%d\n",__FUNCTION__,_i);\ HAL_MISC_ENABLE_EXT_INT##_i##_PINS();\ str8100_set_interrupt_trigger (INTC_EXT_INT##_i##_BIT_INDEX,INTC_LEVEL_TRIGGER,INTC_ACTIVE_LOW);\ if ((ret=request_irq(INTC_EXT_INT##_i##_BIT_INDEX, str8100_ext_irq_handler, 0, "testing", NULL))){\ if(debug) printk("%s: request_irq %d failed(ret=0x%x)(-EBUSY=0x%x)\n",__FUNCTION__,INTC_EXT_INT##_i##_BIT_INDEX,ret,-EBUSY);\ return -EBUSY;\ }\ } if(ext29) register_ext_int(29); if(ext30) register_ext_int(30); /* HAL_MISC_ENABLE_EXT_INT30_PINS(); str8100_set_interrupt_trigger (INTC_EXT_INT30_BIT_INDEX,INTC_IRQ_INTERRUPT,INTC_LEVEL_TRIGGER,INTC_ACTIVE_LOW); if ((ret=request_irq(INTC_EXT_INT30_BIT_INDEX, str8100_pm_irq_handler, 0, "testing", NULL))){ printk("%s: request_irq failed(ret=0x%x)(-EBUSY=0x%x)\n",__FUNCTION__,ret,-EBUSY); return -EBUSY; } */ return 0; }
static int __init str8131_pm_init(void) { int ret; printk("%s: \n",__FUNCTION__); /* * Configure system Xtal clock to be output to CLKOUT pin */ HAL_PWRMGT_CONFIGURE_CLOCK_OUT_PIN(0, 0); pm_set_ops(&str8131_pm_ops); return 0; }