|
|
|
@ -46,10 +46,12 @@ static inline void crisv32_io_set(struct crisv32_iopin *iopin, int val) |
|
|
|
|
unsigned long flags; |
|
|
|
|
spin_lock_irqsave(&iopin->port->lock, flags); |
|
|
|
|
|
|
|
|
|
if (val) |
|
|
|
|
*iopin->port->data |= iopin->bit; |
|
|
|
|
else |
|
|
|
|
*iopin->port->data &= ~iopin->bit; |
|
|
|
|
if (iopin->port->data) { |
|
|
|
|
if (val) |
|
|
|
|
*iopin->port->data |= iopin->bit; |
|
|
|
|
else |
|
|
|
|
*iopin->port->data &= ~iopin->bit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
spin_unlock_irqrestore(&iopin->port->lock, flags); |
|
|
|
|
} |
|
|
|
@ -60,10 +62,12 @@ static inline void crisv32_io_set_dir(struct crisv32_iopin* iopin, |
|
|
|
|
unsigned long flags; |
|
|
|
|
spin_lock_irqsave(&iopin->port->lock, flags); |
|
|
|
|
|
|
|
|
|
if (dir == crisv32_io_dir_in) |
|
|
|
|
*iopin->port->oe &= ~iopin->bit; |
|
|
|
|
else |
|
|
|
|
*iopin->port->oe |= iopin->bit; |
|
|
|
|
if (iopin->port->oe) { |
|
|
|
|
if (dir == crisv32_io_dir_in) |
|
|
|
|
*iopin->port->oe &= ~iopin->bit; |
|
|
|
|
else |
|
|
|
|
*iopin->port->oe |= iopin->bit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
spin_unlock_irqrestore(&iopin->port->lock, flags); |
|
|
|
|
} |
|
|
|
|