I have resisted contacting the list with regards to an issue I am having trying
to get what should be a simple part of my system working but I cannot find any
documentation or other posts to help.
I am using 3.6 kernel but have tried 3.12 to see if the issue has been
addressed in that but its exactly the same.
I am attempting to get a GPIO to wake my AM3517 system up from a suspend to
memory. I have tried with a few different options for GPIO’s
I have available GPIO-10, GPIO-28 and GPIO-30.
I started by using GPIO-28 and that would configure nicely and I set up the
interrupt handler and could see my debug when triggering the input (brilliant)
but for some reason I cannot use it to wake the system as it is not in the
correct group for wakeup. There is a note in the Tech Ref Man -
Only gpio_1, gpio_9, gpio_10, gpio_11, gpio_30, and gpio_31 can be used to
generate a direct wake-up event.
So have to use a different one. GPIO-30 cannot be used as that holds the system
in reset, so all that is left is GPIO-10.
All seems to be good for initialisation;
In the omap_board_mux I define
OMAP3_MUX(SYS_CLKOUT1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
OMAP_PIN_OFF_WAKEUPENABLE),
Then the init function and interrupt handler;
/****************************************************************************
*
* Board wakeup interrupt
*
****************************************************************************/
#define IGNITION_GPIO 10
static irqreturn_t detect_irq(int irq, void *_data)
{
printk("%s: irq\n", __func__);
return IRQ_HANDLED;
}
static void enable_board_wakeup_source(void)
{
int irq;
int ret;
/* GPIO_10 interrupt line */
gpio_request(IGNITION_GPIO, "gpio_10");
gpio_direction_input(IGNITION_GPIO);
omap_mux_init_gpio(IGNITION_GPIO, OMAP_PIN_INPUT_PULLUP |
OMAP_PIN_OFF_WAKEUPENABLE);
irq = gpio_to_irq(IGNITION_GPIO);
if (request_irq(irq, detect_irq, IRQF_TRIGGER_RISING, "ignition",
NULL)) {
pr_err("********* %s: request_irq() failed\n", __func__);
return;
}
if (enable_irq_wake(irq)) {
pr_err("********* %s: irq_set_irq_wake() failed\n", __func__);
return;
}
pr_err("************** %s: set irq %u\n", __func__, irq);
}
But when I try and trigger the input there is no IRQ handled and I also cannot
export the gpio in sys/class/
If I have a look at the mux it seems to be OK
# cd /debug/omap_mux/
# cat sys_clkout1
name: sys_clkout1.gpio_10 (0x48002a1a/0x9ea = 0x411c), b ag25, t NA
mode: OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE | OMAP_MUX_MODE4
signals: sys_clkout1 | NA | NA | NA | gpio_10 | NA | NA | safe_mode
There is definitely a problem as when I look at the state it says its high,
when the input is definitely 0V
# cat /debug/gpio
GPIOs 0-31, gpio:
gpio-0 (mpu6050-irq ) in lo
gpio-10 (gpio_10 ) in hi
gpio-25 (USB1 PHY reset ) out hi
I think there is something else taking over the pin, maybe the clock setup for
sys_clkout1.
Is there any way to make it just work for my config or make GPIO-28 work to
wake the system ?
Hope you have seen this before.
Kind Regards
Marc--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html