*  - Any spurious wake up event during switch sequence to be ignored and
  *    cleared
  */
-static void nmk_gpio_glitch_slpm_init(unsigned int *slpm)
+static int nmk_gpio_glitch_slpm_init(unsigned int *slpm)
 {
-       int i;
+       int i, j, ret;
 
        for (i = 0; i < NMK_MAX_BANKS; i++) {
                struct nmk_gpio_chip *chip = nmk_gpio_chips[i];
                if (!chip)
                        break;
 
-               clk_enable(chip->clk);
+               ret = clk_enable(chip->clk);
+               if (ret) {
+                       for (j = 0; j < i; j++) {
+                               chip = nmk_gpio_chips[j];
+                               clk_disable(chip->clk);
+                       }
+
+                       return ret;
+               }
 
                slpm[i] = readl(chip->addr + NMK_GPIO_SLPC);
                writel(temp, chip->addr + NMK_GPIO_SLPC);
        }
+
+       return 0;
 }
 
 static void nmk_gpio_glitch_slpm_restore(unsigned int *slpm)
 
                        slpm[nmk_chip->bank] &= ~BIT(bit);
                }
-               nmk_gpio_glitch_slpm_init(slpm);
+               ret = nmk_gpio_glitch_slpm_init(slpm);
+               if (ret)
+                       goto out_pre_slpm_init;
        }
 
        for (i = 0; i < g->grp.npins; i++) {
                dev_dbg(npct->dev, "setting pin %d to altsetting %d\n",
                        g->grp.pins[i], g->altsetting);
 
-               clk_enable(nmk_chip->clk);
+               ret = clk_enable(nmk_chip->clk);
+               if (ret)
+                       goto out_glitch;
+
                /*
                 * If the pin is switching to altfunc, and there was an
                 * interrupt installed on it which has been lazy disabled,
        struct nmk_gpio_chip *nmk_chip;
        struct gpio_chip *chip;
        unsigned int bit;
+       int ret;
 
        if (!range) {
                dev_err(npct->dev, "invalid range\n");
 
        find_nmk_gpio_from_pin(pin, &bit);
 
-       clk_enable(nmk_chip->clk);
+       ret = clk_enable(nmk_chip->clk);
+       if (ret)
+               return ret;
        /* There is no glitch when converting any pin to GPIO */
        __nmk_gpio_set_mode(nmk_chip, bit, NMK_GPIO_ALT_GPIO);
        clk_disable(nmk_chip->clk);
        unsigned long cfg;
        int pull, slpm, output, val, i;
        bool lowemi, gpiomode, sleep;
+       int ret;
 
        nmk_chip = find_nmk_gpio_from_pin(pin, &bit);
        if (!nmk_chip) {
                        output ? (val ? "high" : "low") : "",
                        lowemi ? "on" : "off");
 
-               clk_enable(nmk_chip->clk);
+               ret = clk_enable(nmk_chip->clk);
+               if (ret)
+                       return ret;
                if (gpiomode)
                        /* No glitch when going to GPIO mode */
                        __nmk_gpio_set_mode(nmk_chip, bit, NMK_GPIO_ALT_GPIO);