On Wed, 2017-03-29 at 20:44 +0200, Olliver Schinagl wrote:
It seems that at some point, someone made the assumption that the UART
Interrupt ID Register was a bitfield and started to check if certain
bits where set.
Actually however the register contains interrupt ID's where only the
MSB
seems to be used singular and the rest share at least one bit. Thus
doing bitfield operations is wrong.
This patch cleans up the serial_reg include file by ordering it and
replacing the UART_IIR_ID 'mask' with a proper mask for the register.
The OMAP uart appears to have used the two commonly 'reserved' bits 4
and 5 and thus get an UART_IIR_EXT_MASK for these two bits.
This patch then goes over all UART_IIR_* users and changes the code
from
bitfield checking, to ID checking instead.
Looking to implementation I would rather go with some helper like
int serial_in_IIR(port, [additional mask])
{
return port->serial_in(port, UART_IIR) & (_IIR_MASK [| additional
mask]);
}