Thread (12 messages) 12 messages, 3 authors, 2015-07-14

[PATCH v3 4/4] gpio: brcmstb: support wakeup from S5 cold boot

From: Gregory Fong <hidden>
Date: 2015-07-14 02:31:33
Also in: linux-devicetree, linux-gpio, lkml

On Mon, Jul 13, 2015 at 6:03 AM, Linus Walleij [off-list ref] wrote:
On Thu, Jun 18, 2015 at 3:00 AM, Gregory Fong [off-list ref] wrote:
quoted
For wake from S5, we need to:
- register a reboot handler
- set wakeup capability before requesting IRQ so wakeup count is
  incremented
- mask all GPIO IRQs and clear any pending interrupts during driver
  probe to since no driver will yet be registered to handle any IRQs
  carried over from boot at that time, and it's possible that the
  booted kernel does not request the same IRQ anyway.

This means that /sys/.../power/wakeup_count is valid at boot time, and
we can properly account for S5 wakeup stats. e.g.:

  ### After waking from S5 from a GPIO key
  # cat /sys/bus/platform/drivers/brcmstb-gpio/f04172c0.gpio/power/wakeup
  enabled
  # cat /sys/bus/platform/drivers/brcmstb-gpio/f04172c0.gpio/power/wakeup_count
  1

Signed-off-by: Gregory Fong <redacted>
(...)
quoted
-static int brcmstb_gpio_irq_set_wake(struct irq_data *d, unsigned int enable)
+static int __brcmstb_gpio_irq_set_wake(struct brcmstb_gpio_priv *priv,
+               unsigned int enable)
 {
-       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
-       struct brcmstb_gpio_priv *priv = brcmstb_gpio_gc_to_priv(gc);
        int ret = 0;
I don't usually like to refactor code with __foo wrapper functions with
underscores or double underscores in front of them.

Is it possible to give this a more unique name?
Sure, just have to come up with a good one :-).
quoted
+               /*
+                * Mask all interrupts by default, since wakeup interrupts may
+                * be retained from S5 cold boot
+                */
+               bank->bgc.write_reg(reg_base + GIO_MASK(bank->id), 0);
Aha I see, that's some clever code, nice.

Yours,
Linus Walleij
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help