|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|