Skip to content

Commit

Permalink
serial: sh-sci: fix cannot work SH7723 SCIFA
Browse files Browse the repository at this point in the history
SH7723 has SCIFA. This module is similer SCI register map, but it has FIFO.
So this patch adds new type(PORT_SCIFA) and change some type checking.

Signed-off-by: Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
  • Loading branch information
Yoshihiro Shimoda authored and Paul Mundt committed Nov 12, 2008
1 parent acca4f4 commit 1a22f08
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 17 deletions.
20 changes: 11 additions & 9 deletions drivers/serial/sh-sci.c
Original file line number Diff line number Diff line change
Expand Up @@ -478,10 +478,10 @@ static void sci_transmit_chars(struct uart_port *port)
return;
}

if (port->type == PORT_SCIF)
count = scif_txroom(port);
else
if (port->type == PORT_SCI)
count = sci_txroom(port);
else
count = scif_txroom(port);

do {
unsigned char c;
Expand Down Expand Up @@ -510,7 +510,7 @@ static void sci_transmit_chars(struct uart_port *port)
} else {
ctrl = sci_in(port, SCSCR);

if (port->type == PORT_SCIF) {
if (port->type != PORT_SCI) {
sci_in(port, SCxSR); /* Dummy read */
sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port));
}
Expand All @@ -536,10 +536,10 @@ static inline void sci_receive_chars(struct uart_port *port)
return;

while (1) {
if (port->type == PORT_SCIF)
count = scif_rxroom(port);
else
if (port->type == PORT_SCI)
count = sci_rxroom(port);
else
count = scif_rxroom(port);

/* Don't copy more bytes than there is room for in the buffer */
count = tty_buffer_request_room(tty, count);
Expand Down Expand Up @@ -714,7 +714,7 @@ static inline int sci_handle_breaks(struct uart_port *port)

#if defined(SCIF_ORER)
/* XXX: Handle SCIF overrun error */
if (port->type == PORT_SCIF && (sci_in(port, SCLSR) & SCIF_ORER) != 0) {
if (port->type != PORT_SCI && (sci_in(port, SCLSR) & SCIF_ORER) != 0) {
sci_out(port, SCLSR, 0);
if (tty_insert_flip_char(tty, 0, TTY_OVERRUN)) {
copied++;
Expand Down Expand Up @@ -1042,7 +1042,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios,

sci_out(port, SCSCR, 0x00); /* TE=0, RE=0, CKE1=0 */

if (port->type == PORT_SCIF)
if (port->type != PORT_SCI)
sci_out(port, SCFCR, SCFCR_RFRST | SCFCR_TFRST);

smr_val = sci_in(port, SCSMR) & 3;
Expand Down Expand Up @@ -1085,6 +1085,7 @@ static const char *sci_type(struct uart_port *port)
case PORT_SCI: return "sci";
case PORT_SCIF: return "scif";
case PORT_IRDA: return "irda";
case PORT_SCIFA: return "scifa";
}

return NULL;
Expand Down Expand Up @@ -1112,6 +1113,7 @@ static void sci_config_port(struct uart_port *port, int flags)
s->init_pins = sci_init_pins_sci;
break;
case PORT_SCIF:
case PORT_SCIFA:
s->init_pins = sci_init_pins_scif;
break;
case PORT_IRDA:
Expand Down
16 changes: 8 additions & 8 deletions drivers/serial/sh-sci.h
Original file line number Diff line number Diff line change
Expand Up @@ -289,18 +289,18 @@
#define CPU_SCIx_FNS(name, sci_offset, sci_size, scif_offset, scif_size)\
static inline unsigned int sci_##name##_in(struct uart_port *port) \
{ \
if (port->type == PORT_SCI) { \
SCI_IN(sci_size, sci_offset) \
} else { \
SCI_IN(scif_size, scif_offset); \
if (port->type == PORT_SCIF) { \
SCI_IN(scif_size, scif_offset) \
} else { /* PORT_SCI or PORT_SCIFA */ \
SCI_IN(sci_size, sci_offset); \
} \
} \
static inline void sci_##name##_out(struct uart_port *port, unsigned int value) \
{ \
if (port->type == PORT_SCI) { \
SCI_OUT(sci_size, sci_offset, value) \
} else { \
SCI_OUT(scif_size, scif_offset, value); \
if (port->type == PORT_SCIF) { \
SCI_OUT(scif_size, scif_offset, value) \
} else { /* PORT_SCI or PORT_SCIFA */ \
SCI_OUT(sci_size, sci_offset, value); \
} \
}

Expand Down
3 changes: 3 additions & 0 deletions include/linux/serial_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,9 @@

#define PORT_SC26XX 82

/* SH-SCI */
#define PORT_SCIFA 83

#ifdef __KERNEL__

#include <linux/compiler.h>
Expand Down

0 comments on commit 1a22f08

Please sign in to comment.