Преглед изворни кода

use a shadow value for the write-only GPIO_CONF2 register

SVN-Revision: 9715
Gabor Juhos пре 18 година
родитељ
комит
fa10728685
1 измењених фајлова са 10 додато и 16 уклоњено
  1. 10 16
      target/linux/adm5120/files/arch/mips/adm5120/gpio.c

+ 10 - 16
target/linux/adm5120/files/arch/mips/adm5120/gpio.c

@@ -74,6 +74,8 @@ static struct led_desc led_table[15] = {
 
 static struct adm5120_gpio_line adm5120_gpio_map[ADM5120_GPIO_COUNT];
 
+static u32 gpio_conf2;
+
 /*-------------------------------------------------------------------------*/
 
 static inline int gpio_is_invalid(unsigned gpio)
@@ -340,11 +342,8 @@ EXPORT_SYMBOL(adm5120_irq_to_gpio);
 
 void __init adm5120_gpio_csx0_enable(void)
 {
-	u32 t;
-
-	t = SW_READ_REG(GPIO_CONF2);
-	t |= GPIO_CONF2_CSX0;
-	SW_WRITE_REG(GPIO_CONF2, t);
+	gpio_conf2 |= GPIO_CONF2_CSX0;
+	SW_WRITE_REG(GPIO_CONF2, gpio_conf2);
 
 	adm5120_gpio_map[ADM5120_GPIO_PIN1].flags &= ~GPIO_FLAG_VALID;
 	adm5120_gpio_map[ADM5120_GPIO_PIN2].irq = ADM5120_IRQ_GPIO2;
@@ -352,11 +351,8 @@ void __init adm5120_gpio_csx0_enable(void)
 
 void __init adm5120_gpio_csx1_enable(void)
 {
-	u32 t;
-
-	t = SW_READ_REG(GPIO_CONF2);
-	t |= GPIO_CONF2_CSX1;
-	SW_WRITE_REG(GPIO_CONF2, t);
+	gpio_conf2 |= GPIO_CONF2_CSX1;
+	SW_WRITE_REG(GPIO_CONF2, gpio_conf2);
 
 	adm5120_gpio_map[ADM5120_GPIO_PIN3].flags &= ~GPIO_FLAG_VALID;
 	if (adm5120_package_bga())
@@ -365,11 +361,8 @@ void __init adm5120_gpio_csx1_enable(void)
 
 void __init adm5120_gpio_ew_enable(void)
 {
-	u32 t;
-
-	t = SW_READ_REG(GPIO_CONF2);
-	t |= GPIO_CONF2_EW;
-	SW_WRITE_REG(GPIO_CONF2, t);
+	gpio_conf2 |= GPIO_CONF2_EW;
+	SW_WRITE_REG(GPIO_CONF2, gpio_conf2);
 
 	adm5120_gpio_map[ADM5120_GPIO_PIN0].flags &= ~GPIO_FLAG_VALID;
 }
@@ -378,7 +371,8 @@ void __init adm5120_gpio_init(void)
 {
 	int i;
 
-	SW_WRITE_REG(GPIO_CONF2, 0);
+	gpio_conf2 = 0;
+	SW_WRITE_REG(GPIO_CONF2, gpio_conf2);
 
 	for (i = 0; i < ADM5120_GPIO_COUNT; i++)
 		adm5120_gpio_map[i].flags = GPIO_FLAG_VALID;