diff options
| -rw-r--r-- | arch/arm/mach-omap1/board-nokia770.c | 7 | ||||
| -rw-r--r-- | arch/arm/mach-omap1/board-osk.c | 7 | ||||
| -rw-r--r-- | arch/arm/mach-omap1/serial.c | 30 | 
3 files changed, 29 insertions, 15 deletions
| diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c index dd1a8f439fac..5ea27ca26abf 100644 --- a/arch/arm/mach-omap1/board-nokia770.c +++ b/arch/arm/mach-omap1/board-nokia770.c @@ -294,6 +294,13 @@ static struct gpiod_lookup_table nokia770_irq_gpio_table = {  		/* GPIO used for tahvo IRQ */  		GPIO_LOOKUP("gpio-32-47", 8, "tahvo_irq",  			    GPIO_ACTIVE_HIGH), +		/* GPIOs used by serial wakeup IRQs */ +		GPIO_LOOKUP_IDX("gpio-32-47", 5, "wakeup", 0, +			    GPIO_ACTIVE_HIGH), +		GPIO_LOOKUP_IDX("gpio-16-31", 2, "wakeup", 1, +			    GPIO_ACTIVE_HIGH), +		GPIO_LOOKUP_IDX("gpio-48-63", 1, "wakeup", 2, +			    GPIO_ACTIVE_HIGH),  		{ }  	},  }; diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index a8ca8d427182..463687b9ca52 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c @@ -364,6 +364,13 @@ static struct gpiod_lookup_table osk_irq_gpio_table = {  		/* GPIO used by the TPS65010 chip */  		GPIO_LOOKUP("mpuio", 1, "tps65010",  			    GPIO_ACTIVE_HIGH), +		/* GPIOs used for serial wakeup IRQs */ +		GPIO_LOOKUP_IDX("gpio-32-47", 5, "wakeup", 0, +			    GPIO_ACTIVE_HIGH), +		GPIO_LOOKUP_IDX("gpio-16-31", 2, "wakeup", 1, +			    GPIO_ACTIVE_HIGH), +		GPIO_LOOKUP_IDX("gpio-48-63", 1, "wakeup", 2, +			    GPIO_ACTIVE_HIGH),  		{ }  	},  }; diff --git a/arch/arm/mach-omap1/serial.c b/arch/arm/mach-omap1/serial.c index c7f590645774..3adceb97138f 100644 --- a/arch/arm/mach-omap1/serial.c +++ b/arch/arm/mach-omap1/serial.c @@ -4,7 +4,8 @@   *   * OMAP1 serial support.   */ -#include <linux/gpio.h> +#include <linux/gpio/machine.h> +#include <linux/gpio/consumer.h>  #include <linux/module.h>  #include <linux/kernel.h>  #include <linux/init.h> @@ -196,39 +197,38 @@ void omap_serial_wake_trigger(int enable)  	}  } -static void __init omap_serial_set_port_wakeup(int gpio_nr) +static void __init omap_serial_set_port_wakeup(int idx)  { +	struct gpio_desc *d;  	int ret; -	ret = gpio_request(gpio_nr, "UART wake"); -	if (ret < 0) { -		printk(KERN_ERR "Could not request UART wake GPIO: %i\n", -		       gpio_nr); +	d = gpiod_get_index(NULL, "wakeup", idx, GPIOD_IN); +	if (IS_ERR(d)) { +		pr_err("Unable to get UART wakeup GPIO descriptor\n");  		return;  	} -	gpio_direction_input(gpio_nr); -	ret = request_irq(gpio_to_irq(gpio_nr), &omap_serial_wake_interrupt, +	ret = request_irq(gpiod_to_irq(d), &omap_serial_wake_interrupt,  			  IRQF_TRIGGER_RISING, "serial wakeup", NULL);  	if (ret) { -		gpio_free(gpio_nr); -		printk(KERN_ERR "No interrupt for UART wake GPIO: %i\n", -		       gpio_nr); +		gpiod_put(d); +		pr_err("No interrupt for UART%d wake GPIO\n", idx + 1);  		return;  	} -	enable_irq_wake(gpio_to_irq(gpio_nr)); +	enable_irq_wake(gpiod_to_irq(d));  } +  int __init omap_serial_wakeup_init(void)  {  	if (!cpu_is_omap16xx())  		return 0;  	if (uart1_ck != NULL) -		omap_serial_set_port_wakeup(37); +		omap_serial_set_port_wakeup(0);  	if (uart2_ck != NULL) -		omap_serial_set_port_wakeup(18); +		omap_serial_set_port_wakeup(1);  	if (uart3_ck != NULL) -		omap_serial_set_port_wakeup(49); +		omap_serial_set_port_wakeup(2);  	return 0;  } | 
