From f2a4b6b5a65794732492daac584ccebf3300d579 Mon Sep 17 00:00:00 2001 From: juhosg Date: Wed, 12 Dec 2007 12:42:40 +0000 Subject: [adm5120] use a shadow value for the write-only GPIO_CONF2 register git-svn-id: svn://svn.openwrt.org/openwrt/trunk@9715 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../linux/adm5120/files/arch/mips/adm5120/gpio.c | 26 +++++++++------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/target/linux/adm5120/files/arch/mips/adm5120/gpio.c b/target/linux/adm5120/files/arch/mips/adm5120/gpio.c index a9e6e6bdf..01d5a87c4 100644 --- a/target/linux/adm5120/files/arch/mips/adm5120/gpio.c +++ b/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; -- cgit v1.2.3