unsigned        can_wakeup      : 1;
        unsigned        keypad_gpio     : 1;
        unsigned int    mask; /* bit mask in PWER or PKWR */
+       unsigned int    mux_mask; /* bit mask of muxed gpio bits, 0 if no mux */
        unsigned long   config;
 };
 
 int gpio_set_wake(unsigned int gpio, unsigned int on)
 {
        struct gpio_desc *d;
-       unsigned long c;
+       unsigned long c, mux_taken;
 
        if (gpio > mfp_to_gpio(MFP_PIN_GPIO127))
                return -EINVAL;
        if (d->keypad_gpio)
                return -EINVAL;
 
+       mux_taken = (PWER & d->mux_mask) & (~d->mask);
+       if (on && mux_taken)
+               return -EBUSY;
+
        if (d->can_wakeup && (c & MFP_LPM_CAN_WAKEUP)) {
                if (on) {
-                       PWER |= d->mask;
+                       PWER = (PWER & ~d->mux_mask) | d->mask;
 
                        if (c & MFP_LPM_EDGE_RISE)
                                PRER |= d->mask;
        return 0;
 }
 
+#define PWER_WEMUX2_GPIO38     (1 << 16)
+#define PWER_WEMUX2_GPIO53     (2 << 16)
+#define PWER_WEMUX2_GPIO40     (3 << 16)
+#define PWER_WEMUX2_GPIO36     (4 << 16)
+#define PWER_WEMUX2_MASK       (7 << 16)
+#define PWER_WEMUX3_GPIO31     (1 << 19)
+#define PWER_WEMUX3_GPIO113    (2 << 19)
+#define PWER_WEMUX3_MASK       (3 << 19)
+
+#define INIT_GPIO_DESC_MUXED(mux, gpio)                                \
+do {                                                           \
+       gpio_desc[(gpio)].can_wakeup = 1;                       \
+       gpio_desc[(gpio)].mask = PWER_ ## mux ## _GPIO ##gpio;  \
+       gpio_desc[(gpio)].mux_mask = PWER_ ## mux ## _MASK;     \
+} while (0)
+
 static void __init pxa27x_mfp_init(void)
 {
        int i, gpio;
        gpio_desc[35].can_wakeup = 1;
        gpio_desc[35].mask = PWER_WE35;
 
+       INIT_GPIO_DESC_MUXED(WEMUX3, 31);
+       INIT_GPIO_DESC_MUXED(WEMUX3, 113);
+       INIT_GPIO_DESC_MUXED(WEMUX2, 38);
+       INIT_GPIO_DESC_MUXED(WEMUX2, 53);
+       INIT_GPIO_DESC_MUXED(WEMUX2, 40);
+       INIT_GPIO_DESC_MUXED(WEMUX2, 36);
        gpio_nr = 121;
 }
 #else