|
|
|
@ -22,14 +22,14 @@ static unsigned int rdc_gpio_read(unsigned gpio) |
|
|
|
|
{ |
|
|
|
|
unsigned int val; |
|
|
|
|
|
|
|
|
|
val = 0x80000000 | (7 << 11) | ((0x48)); |
|
|
|
|
val = 0x80000000 | (7 << 11) | ((gpio&0x20?0x84:0x48)); |
|
|
|
|
outl(val, RDC3210_CFGREG_ADDR); |
|
|
|
|
udelay(10); |
|
|
|
|
val = inl(RDC3210_CFGREG_DATA); |
|
|
|
|
val |= (0x1 << gpio); |
|
|
|
|
val |= (0x1 << (gpio & 0x1F)); |
|
|
|
|
outl(val, RDC3210_CFGREG_DATA); |
|
|
|
|
udelay(10); |
|
|
|
|
val = 0x80000000 | (7 << 11) | ((0x4C)); |
|
|
|
|
val = 0x80000000 | (7 << 11) | ((gpio&0x20?0x88:0x4C)); |
|
|
|
|
outl(val, RDC3210_CFGREG_ADDR); |
|
|
|
|
udelay(10); |
|
|
|
|
val = inl(RDC3210_CFGREG_DATA); |
|
|
|
@ -37,7 +37,7 @@ static unsigned int rdc_gpio_read(unsigned gpio) |
|
|
|
|
return val; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void rdc_gpio_write(unsigned int val) |
|
|
|
|
static void rdc_gpio_write(unsigned int val) |
|
|
|
|
{ |
|
|
|
|
if (val) { |
|
|
|
|
outl(val, RDC3210_CFGREG_DATA); |
|
|
|
@ -47,7 +47,7 @@ void rdc_gpio_write(unsigned int val) |
|
|
|
|
|
|
|
|
|
int rdc_gpio_get_value(unsigned gpio) |
|
|
|
|
{ |
|
|
|
|
return ((int)rdc_gpio_read(gpio)); |
|
|
|
|
return (gpio>0x3A?-EINVAL:(int)rdc_gpio_read(gpio)); |
|
|
|
|
} |
|
|
|
|
EXPORT_SYMBOL(rdc_gpio_get_value); |
|
|
|
|
|
|
|
|
@ -55,12 +55,13 @@ void rdc_gpio_set_value(unsigned gpio, int value) |
|
|
|
|
{ |
|
|
|
|
unsigned int val; |
|
|
|
|
|
|
|
|
|
if (gpio > 0x3A) return; |
|
|
|
|
val = rdc_gpio_read(gpio); |
|
|
|
|
|
|
|
|
|
if (value) |
|
|
|
|
val &= ~(0x1 << gpio); |
|
|
|
|
val &= ~(0x1 << (gpio & 0x1F)); |
|
|
|
|
else |
|
|
|
|
val |= (0x1 << gpio); |
|
|
|
|
val |= (0x1 << (gpio & 0x1F)); |
|
|
|
|
|
|
|
|
|
rdc_gpio_write(val); |
|
|
|
|
} |
|
|
|
|