diff --git a/target/linux/ar7/files/include/asm-mips/ar7/gpio.h b/target/linux/ar7/files/include/asm-mips/ar7/gpio.h
index 00418b586347f194ed5a3b31c0f430f5db72f8aa..2e19fcae9d9f9c6ea3f97d32bf8047a006dec312 100644
--- a/target/linux/ar7/files/include/asm-mips/ar7/gpio.h
+++ b/target/linux/ar7/files/include/asm-mips/ar7/gpio.h
@@ -28,26 +28,18 @@ extern void gpio_free(unsigned gpio);
 /* Common GPIO layer */
 static inline int gpio_get_value(unsigned gpio)
 {
-	static unsigned addr;
+	void __iomem *gpio_in =
+		(void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_INPUT);
 
-	if (!addr) {
-		void __iomem *gpio_in = (void __iomem *)
-				KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_INPUT);
-		addr = readl(gpio_in);
-	}
-
-	return addr & (1 << gpio);
+	return readl(gpio_in) & (1 << gpio);
 }
 
 static inline void gpio_set_value(unsigned gpio, int value)
 {
-	static void __iomem *gpio_out;
+	void __iomem *gpio_out =
+		(void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_OUTPUT);
 	unsigned tmp;
 
-	if (!gpio_out)
-		gpio_out = (void __iomem *)
-				KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_OUTPUT);
-
 	tmp = readl(gpio_out) & ~(1 << gpio);
 	if (value)
 		tmp |= 1 << gpio;