@ -121,6 +121,13 @@ static int ns16550_readb(NS16550_t port, int offset)
return serial_in_shift ( addr + plat - > reg_offset , plat - > reg_shift ) ;
}
static u32 ns16550_getfcr ( NS16550_t port )
{
struct ns16550_platdata * plat = port - > plat ;
return plat - > fcr ;
}
/* We can clean these up once everything is moved to driver model */
# define serial_out(value, addr) \
ns16550_writeb ( com_port , \
@ -128,6 +135,11 @@ static int ns16550_readb(NS16550_t port, int offset)
# define serial_in(addr) \
ns16550_readb ( com_port , \
( unsigned char * ) addr - ( unsigned char * ) com_port )
# else
static u32 ns16550_getfcr ( NS16550_t port )
{
return UART_FCRVAL ;
}
# endif
int ns16550_calc_divisor ( NS16550_t port , int clock , int baudrate )
@ -171,7 +183,7 @@ void NS16550_init(NS16550_t com_port, int baud_divisor)
serial_out ( 0x7 , & com_port - > mdr1 ) ; /* mode select reset TL16C750*/
# endif
serial_out ( UART_MCRVAL , & com_port - > mcr ) ;
serial_out ( UART_FCRVAL , & com_port - > fcr ) ;
serial_out ( ns16550_getfcr ( com_port ) , & com_port - > fcr ) ;
if ( baud_divisor ! = - 1 )
NS16550_setbrg ( com_port , baud_divisor ) ;
# if defined(CONFIG_OMAP) || \
@ -192,7 +204,7 @@ void NS16550_reinit(NS16550_t com_port, int baud_divisor)
serial_out ( CONFIG_SYS_NS16550_IER , & com_port - > ier ) ;
NS16550_setbrg ( com_port , 0 ) ;
serial_out ( UART_MCRVAL , & com_port - > mcr ) ;
serial_out ( UART_FCRVAL , & com_port - > fcr ) ;
serial_out ( ns16550_getfcr ( com_port ) , & com_port - > fcr ) ;
NS16550_setbrg ( com_port , baud_divisor ) ;
}
# endif /* CONFIG_NS16550_MIN_FUNCTIONS */
@ -420,6 +432,8 @@ int ns16550_serial_ofdata_to_platdata(struct udevice *dev)
return - EINVAL ;
}
plat - > fcr = UART_FCRVAL ;
return 0 ;
}
# endif