use a shadow value for the write-only GPIO_CONF2 register

SVN-Revision: 9715
This commit is contained in:
Gabor Juhos 2007-12-12 12:42:40 +00:00
parent ed7a8ab036
commit fa10728685
1 changed files with 10 additions and 16 deletions

View File

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