aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2007-12-12 12:42:40 +0000
committerGabor Juhos <juhosg@openwrt.org>2007-12-12 12:42:40 +0000
commitfa107286856fbe93a8cf1a5bcfd32667fbd27089 (patch)
treeb942a0d4c53b8c07e90a4579329fedcba1ad3646
parented7a8ab03690da1a5e8f4bc0a37b47791636a352 (diff)
downloadupstream-fa107286856fbe93a8cf1a5bcfd32667fbd27089.tar.gz
upstream-fa107286856fbe93a8cf1a5bcfd32667fbd27089.tar.bz2
upstream-fa107286856fbe93a8cf1a5bcfd32667fbd27089.zip
use a shadow value for the write-only GPIO_CONF2 register
SVN-Revision: 9715
-rw-r--r--target/linux/adm5120/files/arch/mips/adm5120/gpio.c26
1 files 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 a9e6e6bdfb..01d5a87c4e 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;