serial: 16550: Add getfcr accessor
Add function which allows fetching the default FCR register setting from platform data for DM , while retaining old behavior for non-DM by returning UART_FCRVAL. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Tom Rini <trini@konsulko.com> Cc: Simon Glass <sjg@chromium.org> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
8ea05705a7
commit
65f83802b7
@ -121,6 +121,13 @@ static int ns16550_readb(NS16550_t port, int offset)
|
|||||||
return serial_in_shift(addr + plat->reg_offset, plat->reg_shift);
|
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 */
|
/* We can clean these up once everything is moved to driver model */
|
||||||
#define serial_out(value, addr) \
|
#define serial_out(value, addr) \
|
||||||
ns16550_writeb(com_port, \
|
ns16550_writeb(com_port, \
|
||||||
@ -128,6 +135,11 @@ static int ns16550_readb(NS16550_t port, int offset)
|
|||||||
#define serial_in(addr) \
|
#define serial_in(addr) \
|
||||||
ns16550_readb(com_port, \
|
ns16550_readb(com_port, \
|
||||||
(unsigned char *)addr - (unsigned char *)com_port)
|
(unsigned char *)addr - (unsigned char *)com_port)
|
||||||
|
#else
|
||||||
|
static u32 ns16550_getfcr(NS16550_t port)
|
||||||
|
{
|
||||||
|
return UART_FCRVAL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ns16550_calc_divisor(NS16550_t port, int clock, int baudrate)
|
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*/
|
serial_out(0x7, &com_port->mdr1); /* mode select reset TL16C750*/
|
||||||
#endif
|
#endif
|
||||||
serial_out(UART_MCRVAL, &com_port->mcr);
|
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)
|
if (baud_divisor != -1)
|
||||||
NS16550_setbrg(com_port, baud_divisor);
|
NS16550_setbrg(com_port, baud_divisor);
|
||||||
#if defined(CONFIG_OMAP) || \
|
#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);
|
serial_out(CONFIG_SYS_NS16550_IER, &com_port->ier);
|
||||||
NS16550_setbrg(com_port, 0);
|
NS16550_setbrg(com_port, 0);
|
||||||
serial_out(UART_MCRVAL, &com_port->mcr);
|
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);
|
NS16550_setbrg(com_port, baud_divisor);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_NS16550_MIN_FUNCTIONS */
|
#endif /* CONFIG_NS16550_MIN_FUNCTIONS */
|
||||||
@ -420,6 +432,8 @@ int ns16550_serial_ofdata_to_platdata(struct udevice *dev)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plat->fcr = UART_FCRVAL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,6 +57,7 @@ struct ns16550_platdata {
|
|||||||
int reg_shift;
|
int reg_shift;
|
||||||
int clock;
|
int clock;
|
||||||
int reg_offset;
|
int reg_offset;
|
||||||
|
u32 fcr;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct udevice;
|
struct udevice;
|
||||||
|
Loading…
Reference in New Issue
Block a user