Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
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;
}