mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-30 16:13:54 +08:00
serial: sh-sci: implement FIFO threshold register setting
Sets the closest match for a desired RX trigger level. Signed-off-by: Ulrich Hecht <ulrich.hecht+renesas@gmail.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
88641c79c5
commit
a380ed461f
@ -974,6 +974,65 @@ static int sci_handle_breaks(struct uart_port *port)
|
||||
return copied;
|
||||
}
|
||||
|
||||
static int scif_set_rtrg(struct uart_port *port, int rx_trig)
|
||||
{
|
||||
unsigned int bits;
|
||||
|
||||
if (rx_trig < 1)
|
||||
rx_trig = 1;
|
||||
if (rx_trig >= port->fifosize)
|
||||
rx_trig = port->fifosize;
|
||||
|
||||
/* HSCIF can be set to an arbitrary level. */
|
||||
if (sci_getreg(port, HSRTRGR)->size) {
|
||||
serial_port_out(port, HSRTRGR, rx_trig);
|
||||
return rx_trig;
|
||||
}
|
||||
|
||||
switch (port->type) {
|
||||
case PORT_SCIF:
|
||||
if (rx_trig < 4) {
|
||||
bits = 0;
|
||||
rx_trig = 1;
|
||||
} else if (rx_trig < 8) {
|
||||
bits = SCFCR_RTRG0;
|
||||
rx_trig = 4;
|
||||
} else if (rx_trig < 14) {
|
||||
bits = SCFCR_RTRG1;
|
||||
rx_trig = 8;
|
||||
} else {
|
||||
bits = SCFCR_RTRG0 | SCFCR_RTRG1;
|
||||
rx_trig = 14;
|
||||
}
|
||||
break;
|
||||
case PORT_SCIFA:
|
||||
case PORT_SCIFB:
|
||||
if (rx_trig < 16) {
|
||||
bits = 0;
|
||||
rx_trig = 1;
|
||||
} else if (rx_trig < 32) {
|
||||
bits = SCFCR_RTRG0;
|
||||
rx_trig = 16;
|
||||
} else if (rx_trig < 48) {
|
||||
bits = SCFCR_RTRG1;
|
||||
rx_trig = 32;
|
||||
} else {
|
||||
bits = SCFCR_RTRG0 | SCFCR_RTRG1;
|
||||
rx_trig = 48;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
WARN(1, "unknown FIFO configuration");
|
||||
return 1;
|
||||
}
|
||||
|
||||
serial_port_out(port, SCFCR,
|
||||
(serial_port_in(port, SCFCR) &
|
||||
~(SCFCR_RTRG1 | SCFCR_RTRG0)) | bits);
|
||||
|
||||
return rx_trig;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SERIAL_SH_SCI_DMA
|
||||
static void sci_dma_tx_complete(void *arg)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user