diff options
Diffstat (limited to 'arch/arm/mach-at91')
| -rw-r--r-- | arch/arm/mach-at91/board-foxg20.c | 1 | ||||
| -rw-r--r-- | arch/arm/mach-at91/board-stamp9g20.c | 1 | ||||
| -rw-r--r-- | arch/arm/mach-at91/include/mach/gpio.h | 8 | ||||
| -rw-r--r-- | arch/arm/mach-at91/irq.c | 20 | ||||
| -rw-r--r-- | arch/arm/mach-at91/pm.c | 10 | 
5 files changed, 26 insertions, 14 deletions
diff --git a/arch/arm/mach-at91/board-foxg20.c b/arch/arm/mach-at91/board-foxg20.c index 2ea7059b840..c20a870ea9c 100644 --- a/arch/arm/mach-at91/board-foxg20.c +++ b/arch/arm/mach-at91/board-foxg20.c @@ -176,6 +176,7 @@ static struct w1_gpio_platform_data w1_gpio_pdata = {  	/* If you choose to use a pin other than PB16 it needs to be 3.3V */  	.pin		= AT91_PIN_PB16,  	.is_open_drain  = 1, +	.ext_pullup_enable_pin	= -EINVAL,  };  static struct platform_device w1_device = { diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c index a033b8df9fb..869cbecf00b 100644 --- a/arch/arm/mach-at91/board-stamp9g20.c +++ b/arch/arm/mach-at91/board-stamp9g20.c @@ -188,6 +188,7 @@ static struct spi_board_info portuxg20_spi_devices[] = {  static struct w1_gpio_platform_data w1_gpio_pdata = {  	.pin		= AT91_PIN_PA29,  	.is_open_drain	= 1, +	.ext_pullup_enable_pin	= -EINVAL,  };  static struct platform_device w1_device = { diff --git a/arch/arm/mach-at91/include/mach/gpio.h b/arch/arm/mach-at91/include/mach/gpio.h index eed465ab0dd..5fc23771c15 100644 --- a/arch/arm/mach-at91/include/mach/gpio.h +++ b/arch/arm/mach-at91/include/mach/gpio.h @@ -209,6 +209,14 @@ extern int at91_get_gpio_value(unsigned pin);  extern void at91_gpio_suspend(void);  extern void at91_gpio_resume(void); +#ifdef CONFIG_PINCTRL_AT91 +extern void at91_pinctrl_gpio_suspend(void); +extern void at91_pinctrl_gpio_resume(void); +#else +static inline void at91_pinctrl_gpio_suspend(void) {} +static inline void at91_pinctrl_gpio_resume(void) {} +#endif +  #endif	/* __ASSEMBLY__ */  #endif diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c index 8e210262aee..e0ca5917102 100644 --- a/arch/arm/mach-at91/irq.c +++ b/arch/arm/mach-at91/irq.c @@ -92,23 +92,21 @@ static int at91_aic_set_wake(struct irq_data *d, unsigned value)  void at91_irq_suspend(void)  { -	int i = 0, bit; +	int bit = -1;  	if (has_aic5()) {  		/* disable enabled irqs */ -		while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { +		while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) {  			at91_aic_write(AT91_AIC5_SSR,  				       bit & AT91_AIC5_INTSEL_MSK);  			at91_aic_write(AT91_AIC5_IDCR, 1); -			i = bit;  		}  		/* enable wakeup irqs */ -		i = 0; -		while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { +		bit = -1; +		while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) {  			at91_aic_write(AT91_AIC5_SSR,  				       bit & AT91_AIC5_INTSEL_MSK);  			at91_aic_write(AT91_AIC5_IECR, 1); -			i = bit;  		}  	} else {  		at91_aic_write(AT91_AIC_IDCR, *backups); @@ -118,23 +116,21 @@ void at91_irq_suspend(void)  void at91_irq_resume(void)  { -	int i = 0, bit; +	int bit = -1;  	if (has_aic5()) {  		/* disable wakeup irqs */ -		while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { +		while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) {  			at91_aic_write(AT91_AIC5_SSR,  				       bit & AT91_AIC5_INTSEL_MSK);  			at91_aic_write(AT91_AIC5_IDCR, 1); -			i = bit;  		}  		/* enable irqs disabled for suspend */ -		i = 0; -		while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { +		bit = -1; +		while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) {  			at91_aic_write(AT91_AIC5_SSR,  				       bit & AT91_AIC5_INTSEL_MSK);  			at91_aic_write(AT91_AIC5_IECR, 1); -			i = bit;  		}  	} else {  		at91_aic_write(AT91_AIC_IDCR, *wakeups); diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index adb6db888a1..73f1f250403 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c @@ -201,7 +201,10 @@ extern u32 at91_slow_clock_sz;  static int at91_pm_enter(suspend_state_t state)  { -	at91_gpio_suspend(); +	if (of_have_populated_dt()) +		at91_pinctrl_gpio_suspend(); +	else +		at91_gpio_suspend();  	at91_irq_suspend();  	pr_debug("AT91: PM - wake mask %08x, pm state %d\n", @@ -286,7 +289,10 @@ static int at91_pm_enter(suspend_state_t state)  error:  	target_state = PM_SUSPEND_ON;  	at91_irq_resume(); -	at91_gpio_resume(); +	if (of_have_populated_dt()) +		at91_pinctrl_gpio_resume(); +	else +		at91_gpio_resume();  	return 0;  }  |