#define NMK_GPIO_SLPC  0x1c
 #define NMK_GPIO_AFSLA 0x20
 #define NMK_GPIO_AFSLB 0x24
+#define NMK_GPIO_LOWEMI        0x28
 
 #define NMK_GPIO_RIMSC 0x40
 #define NMK_GPIO_FIMSC 0x44
 
 #define PIN_SLPM_VAL_LOW       ((1 + 0) << PIN_SLPM_VAL_SHIFT)
 #define PIN_SLPM_VAL_HIGH      ((1 + 1) << PIN_SLPM_VAL_SHIFT)
 
+#define PIN_LOWEMI_SHIFT       25
+#define PIN_LOWEMI_MASK                (0x1 << PIN_LOWEMI_SHIFT)
+#define PIN_LOWEMI(x)          (((x) & PIN_LOWEMI_MASK) >> PIN_LOWEMI_SHIFT)
+#define PIN_LOWEMI_DISABLED    (0 << PIN_LOWEMI_SHIFT)
+#define PIN_LOWEMI_ENABLED     (1 << PIN_LOWEMI_SHIFT)
+
 /* Shortcuts.  Use these instead of separate DIR, PULL, and VAL.  */
 #define PIN_INPUT_PULLDOWN     (PIN_DIR_INPUT | PIN_PULL_DOWN)
 #define PIN_INPUT_PULLUP       (PIN_DIR_INPUT | PIN_PULL_UP)
 
        u32 rimsc;
        u32 fimsc;
        u32 pull_up;
+       u32 lowemi;
 };
 
 static struct nmk_gpio_chip *
        }
 }
 
+static void __nmk_gpio_set_lowemi(struct nmk_gpio_chip *nmk_chip,
+                                 unsigned offset, bool lowemi)
+{
+       u32 bit = BIT(offset);
+       bool enabled = nmk_chip->lowemi & bit;
+
+       if (lowemi == enabled)
+               return;
+
+       if (lowemi)
+               nmk_chip->lowemi |= bit;
+       else
+               nmk_chip->lowemi &= ~bit;
+
+       writel_relaxed(nmk_chip->lowemi,
+                      nmk_chip->addr + NMK_GPIO_LOWEMI);
+}
+
 static void __nmk_gpio_make_input(struct nmk_gpio_chip *nmk_chip,
                                  unsigned offset)
 {
                __nmk_gpio_set_pull(nmk_chip, offset, pull);
        }
 
+       __nmk_gpio_set_lowemi(nmk_chip, offset, PIN_LOWEMI(cfg));
+
        /*
         * If the pin is switching to altfunc, and there was an interrupt
         * installed on it which has been lazy disabled, actually mask the
        chip->dev = &dev->dev;
        chip->owner = THIS_MODULE;
 
+       clk_enable(nmk_chip->clk);
+       nmk_chip->lowemi = readl_relaxed(nmk_chip->addr + NMK_GPIO_LOWEMI);
+       clk_disable(nmk_chip->clk);
+
        ret = gpiochip_add(&nmk_chip->chip);
        if (ret)
                goto out_free;