|  | @@ -533,3 +533,87 @@ GET_GPIO_P(both)
 | 
	
		
			
				|  |  |  GET_GPIO_P(maska)
 | 
	
		
			
				|  |  |  GET_GPIO_P(maskb)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#ifdef CONFIG_PM
 | 
	
		
			
				|  |  | +DECLARE_RESERVED_MAP(wakeup, GPIO_BANK_NUM);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static const unsigned int sic_iwr_irqs[] = {
 | 
	
		
			
				|  |  | +#if defined(BF533_FAMILY)
 | 
	
		
			
				|  |  | +	IRQ_PROG_INTB
 | 
	
		
			
				|  |  | +#elif defined(BF537_FAMILY)
 | 
	
		
			
				|  |  | +	IRQ_PF_INTB_WATCH, IRQ_PORTG_INTB, IRQ_PH_INTB_MAC_TX
 | 
	
		
			
				|  |  | +#elif defined(BF538_FAMILY)
 | 
	
		
			
				|  |  | +	IRQ_PORTF_INTB
 | 
	
		
			
				|  |  | +#elif defined(CONFIG_BF52x) || defined(CONFIG_BF51x)
 | 
	
		
			
				|  |  | +	IRQ_PORTF_INTB, IRQ_PORTG_INTB, IRQ_PORTH_INTB
 | 
	
		
			
				|  |  | +#elif defined(BF561_FAMILY)
 | 
	
		
			
				|  |  | +	IRQ_PROG0_INTB, IRQ_PROG1_INTB, IRQ_PROG2_INTB
 | 
	
		
			
				|  |  | +#else
 | 
	
		
			
				|  |  | +# error no SIC_IWR defined
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/***********************************************************
 | 
	
		
			
				|  |  | +*
 | 
	
		
			
				|  |  | +* FUNCTIONS: Blackfin PM Setup API
 | 
	
		
			
				|  |  | +*
 | 
	
		
			
				|  |  | +* INPUTS/OUTPUTS:
 | 
	
		
			
				|  |  | +* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
 | 
	
		
			
				|  |  | +* type -
 | 
	
		
			
				|  |  | +*	PM_WAKE_RISING
 | 
	
		
			
				|  |  | +*	PM_WAKE_FALLING
 | 
	
		
			
				|  |  | +*	PM_WAKE_HIGH
 | 
	
		
			
				|  |  | +*	PM_WAKE_LOW
 | 
	
		
			
				|  |  | +*	PM_WAKE_BOTH_EDGES
 | 
	
		
			
				|  |  | +*
 | 
	
		
			
				|  |  | +* DESCRIPTION: Blackfin PM Driver API
 | 
	
		
			
				|  |  | +*
 | 
	
		
			
				|  |  | +* CAUTION:
 | 
	
		
			
				|  |  | +*************************************************************
 | 
	
		
			
				|  |  | +* MODIFICATION HISTORY :
 | 
	
		
			
				|  |  | +**************************************************************/
 | 
	
		
			
				|  |  | +int gpio_pm_wakeup_ctrl(unsigned gpio, unsigned ctrl)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	unsigned long flags;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (check_gpio(gpio) < 0)
 | 
	
		
			
				|  |  | +		return -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	flags = hard_local_irq_save();
 | 
	
		
			
				|  |  | +	if (ctrl)
 | 
	
		
			
				|  |  | +		reserve(wakeup, gpio);
 | 
	
		
			
				|  |  | +	else
 | 
	
		
			
				|  |  | +		unreserve(wakeup, gpio);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	set_gpio_maskb(gpio, ctrl);
 | 
	
		
			
				|  |  | +	hard_local_irq_restore(flags);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +int bfin_pm_standby_ctrl(unsigned ctrl)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	u16 bank, mask, i;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE) {
 | 
	
		
			
				|  |  | +		mask = map_entry(wakeup, i);
 | 
	
		
			
				|  |  | +		bank = gpio_bank(i);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (mask)
 | 
	
		
			
				|  |  | +			bfin_internal_set_wake(sic_iwr_irqs[bank], ctrl);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void bfin_gpio_pm_hibernate_suspend(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int i, bank;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#ifdef BF538_FAMILY
 | 
	
		
			
				|  |  | +	for (i = 0; i < ARRAY_SIZE(port_fer_saved); ++i)
 | 
	
		
			
				|  |  | +		port_fer_saved[i] = *port_fer[i];
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE) {
 | 
	
		
			
				|  |  | +		bank = gpio_bank(i);
 | 
	
		
			
				|  |  | +
 |