Lines Matching +full:- +full:uart
8 * SPDX-License-Identifier: GPL-2.0+
18 #include <asm/arch/uart.h>
34 u8 port_id; /* uart port number */
42 * 3 for 2, ... (2^n - 1) for n, instead, they suggest using these constants:
63 static void __maybe_unused s5p_serial_init(struct s5p_uart *uart) in s5p_serial_init() argument
66 writel(0x3, &uart->ufcon); in s5p_serial_init()
67 writel(0, &uart->umcon); in s5p_serial_init()
69 writel(0x3, &uart->ulcon); in s5p_serial_init()
71 writel(0x245, &uart->ucon); in s5p_serial_init()
74 static void __maybe_unused s5p_serial_baud(struct s5p_uart *uart, uint uclk, in s5p_serial_baud() argument
81 writel(val / 16 - 1, &uart->ubrdiv); in s5p_serial_baud()
84 writew(udivslot[val % 16], &uart->rest.slot); in s5p_serial_baud()
86 writeb(val % 16, &uart->rest.value); in s5p_serial_baud()
92 struct s5p_serial_platdata *plat = dev->platdata; in s5p_serial_setbrg()
93 struct s5p_uart *const uart = plat->reg; in s5p_serial_setbrg() local
105 uclk = get_uart_clk(plat->port_id); in s5p_serial_setbrg()
108 s5p_serial_baud(uart, uclk, baudrate); in s5p_serial_setbrg()
115 struct s5p_serial_platdata *plat = dev->platdata; in s5p_serial_probe()
116 struct s5p_uart *const uart = plat->reg; in s5p_serial_probe() local
118 s5p_serial_init(uart); in s5p_serial_probe()
123 static int serial_err_check(const struct s5p_uart *const uart, int op) in serial_err_check() argument
139 return readl(&uart->uerstat) & mask; in serial_err_check()
144 struct s5p_serial_platdata *plat = dev->platdata; in s5p_serial_getc()
145 struct s5p_uart *const uart = plat->reg; in s5p_serial_getc() local
147 if (!(readl(&uart->ufstat) & RX_FIFO_COUNT_MASK)) in s5p_serial_getc()
148 return -EAGAIN; in s5p_serial_getc()
150 serial_err_check(uart, 0); in s5p_serial_getc()
151 return (int)(readb(&uart->urxh) & 0xff); in s5p_serial_getc()
156 struct s5p_serial_platdata *plat = dev->platdata; in s5p_serial_putc()
157 struct s5p_uart *const uart = plat->reg; in s5p_serial_putc() local
159 if (readl(&uart->ufstat) & TX_FIFO_FULL) in s5p_serial_putc()
160 return -EAGAIN; in s5p_serial_putc()
162 writeb(ch, &uart->utxh); in s5p_serial_putc()
163 serial_err_check(uart, 1); in s5p_serial_putc()
170 struct s5p_serial_platdata *plat = dev->platdata; in s5p_serial_pending()
171 struct s5p_uart *const uart = plat->reg; in s5p_serial_pending() local
172 uint32_t ufstat = readl(&uart->ufstat); in s5p_serial_pending()
182 struct s5p_serial_platdata *plat = dev->platdata; in s5p_serial_ofdata_to_platdata()
187 return -EINVAL; in s5p_serial_ofdata_to_platdata()
189 plat->reg = (struct s5p_uart *)addr; in s5p_serial_ofdata_to_platdata()
190 plat->port_id = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), in s5p_serial_ofdata_to_platdata()
191 "id", dev->seq); in s5p_serial_ofdata_to_platdata()
203 { .compatible = "samsung,exynos4210-uart" },
225 struct s5p_uart *uart = (struct s5p_uart *)CONFIG_DEBUG_UART_BASE; in _debug_uart_init() local
227 s5p_serial_init(uart); in _debug_uart_init()
228 s5p_serial_baud(uart, CONFIG_DEBUG_UART_CLOCK, CONFIG_BAUDRATE); in _debug_uart_init()
233 struct s5p_uart *uart = (struct s5p_uart *)CONFIG_DEBUG_UART_BASE; in _debug_uart_putc() local
235 while (readl(&uart->ufstat) & TX_FIFO_FULL); in _debug_uart_putc()
237 writeb(ch, &uart->utxh); in _debug_uart_putc()