diff options
author | kevin shen <b00984@freescale.com> | 2008-04-23 13:03:30 +0800 |
---|---|---|
committer | Daniel Schaeffer <daniel.schaeffer@timesys.com> | 2008-08-25 15:21:03 -0400 |
commit | 0d32c2690d03dbdcd84eb3b95e7499fd73e53724 (patch) | |
tree | ffca3084d1ee4f7260953f24797599ac5a5d4f5e | |
parent | 84a73e9fbb97a4fd25410fb9ea04cee3515a79b1 (diff) |
ENGR00074126 CR fix on-off key wake up system problem
add interrupt handle for on-off key
Signed-off-by: Kevin Shen <b00984@freescale.com>
(cherry picked from commit 021b66f90e97984a360c0d02f43463963fb69eda)
-rw-r--r-- | arch/arm/mach-mx3/mx3_3stack.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-mx3/mx3_3stack_gpio.c | 11 | ||||
-rw-r--r-- | drivers/mxc/pmic/core/pmic_core_spi.c | 2 | ||||
-rw-r--r-- | drivers/mxc/pmic/mc13783/pmic_power.c | 36 |
4 files changed, 40 insertions, 10 deletions
diff --git a/arch/arm/mach-mx3/mx3_3stack.c b/arch/arm/mach-mx3/mx3_3stack.c index 38de0e88b77f..88ecfff907bc 100644 --- a/arch/arm/mach-mx3/mx3_3stack.c +++ b/arch/arm/mach-mx3/mx3_3stack.c @@ -324,6 +324,7 @@ static struct spi_board_info mxc_spi_board_info[] __initdata = { .irq = IOMUX_TO_IRQ(MX31_PIN_GPIO1_3), .max_speed_hz = 4000000, .bus_num = 2, + .platform_data = (void *)IOMUX_TO_IRQ(MX31_PIN_GPIO1_2), .chip_select = 2,}, { .modalias = "lcd_spi", diff --git a/arch/arm/mach-mx3/mx3_3stack_gpio.c b/arch/arm/mach-mx3/mx3_3stack_gpio.c index 3e612122da5a..fe6bf6351fa9 100644 --- a/arch/arm/mach-mx3/mx3_3stack_gpio.c +++ b/arch/arm/mach-mx3/mx3_3stack_gpio.c @@ -209,18 +209,15 @@ void gpio_keypad_inactive(void) EXPORT_SYMBOL(gpio_keypad_inactive); -void gpio_on_off_button_active(void) +void gpio_power_key_active(void) { mxc_request_iomux(MX31_PIN_GPIO1_2, OUTPUTCONFIG_GPIO, - INPUTCONFIG_GPIO); + INPUTCONFIG_GPIO); mxc_set_gpio_direction(MX31_PIN_GPIO1_2, 1); mxc_iomux_set_pad(MX31_PIN_GPIO1_2, PAD_CTL_PKE_NONE); - set_irq_type(IOMUX_TO_IRQ(MX31_PIN_GPIO1_2), IRQF_TRIGGER_RISING); - set_irq_wake(IOMUX_TO_IRQ(MX31_PIN_GPIO1_2), 1); - /* gpio1 include on/off interrupt */ - set_irq_wake(52, 1); } -EXPORT_SYMBOL(gpio_on_off_button_active); + +EXPORT_SYMBOL(gpio_power_key_active); /*! * Setup GPIO for a CSPI device to be active diff --git a/drivers/mxc/pmic/core/pmic_core_spi.c b/drivers/mxc/pmic/core/pmic_core_spi.c index 173806228d94..3e7b9863ea90 100644 --- a/drivers/mxc/pmic/core/pmic_core_spi.c +++ b/drivers/mxc/pmic/core/pmic_core_spi.c @@ -247,6 +247,8 @@ static int __devinit pmic_probe(struct spi_device *spi) return ret; } + power_ldm.dev.platform_data = spi->dev.platform_data; + pmic_pdev_register(); printk(KERN_INFO "Device %s probed\n", spi->dev.bus_id); diff --git a/drivers/mxc/pmic/mc13783/pmic_power.c b/drivers/mxc/pmic/mc13783/pmic_power.c index 7b8c2998a84e..d62acad55592 100644 --- a/drivers/mxc/pmic/mc13783/pmic_power.c +++ b/drivers/mxc/pmic/mc13783/pmic_power.c @@ -26,6 +26,9 @@ #include <asm/ioctl.h> #include <asm/arch/pmic_power.h> #include <asm/arch/pmic_status.h> +#include <linux/irq.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> #include "pmic_power_defs.h" @@ -3064,16 +3067,43 @@ void pmic_power_key_callback(void) #endif } -extern void gpio_on_off_button_active(void); +static irqreturn_t power_key_int(int irq, void *dev_id) +{ + pr_info(KERN_INFO "on-off key pressed\n"); + + return 0; +} + +extern void gpio_power_key_active(void); /* * Init and Exit */ static int pmic_power_probe(struct platform_device *pdev) { + int irq, ret; + /* configure on/off button */ - gpio_on_off_button_active(); - printk(KERN_INFO "PMIC Power successfully probed\n"); + gpio_power_key_active(); + + irq = (int)pdev->dev.platform_data; + + if (irq == 0) { + pr_info(KERN_INFO "PMIC Power has no platform data\n"); + goto done; + } + set_irq_type(irq, IRQF_TRIGGER_RISING); + + ret = request_irq(irq, power_key_int, 0, "power_key", 0); + if (ret) + pr_info(KERN_ERR "register on-off key interrupt failed\n"); + + set_irq_wake(irq, 1); + /* gpio1 include on/off interrupt */ + set_irq_wake(MXC_INT_GPIO1, 1); + +done: + pr_info(KERN_INFO "PMIC Power successfully probed\n"); return 0; } |