#include <linux/compiler.h>
#define SR_TX_FIFO_FULL BIT(3)
#define SR_TX_FIFO_EMPTY BIT(2)
#define SR_RX_FIFO_VALID_DATA BIT(0)
#define SR_RX_FIFO_FULL BIT(1)
#define ULITE_CONTROL_RST_TX 0x01
#define ULITE_CONTROL_RST_RX 0x02
struct uartlite_platdata {
static int uartlite_serial_putc(struct udevice *dev, const char ch)
struct uartlite_platdata *plat = dev_get_platdata(dev);
struct uartlite *regs = plat->regs;
if (in_be32(®s->status) & SR_TX_FIFO_FULL)
out_be32(®s->tx_fifo, ch & 0xff);
static int uartlite_serial_getc(struct udevice *dev)
struct uartlite_platdata *plat = dev_get_platdata(dev);
struct uartlite *regs = plat->regs;
if (!(in_be32(®s->status) & SR_RX_FIFO_VALID_DATA))
return in_be32(®s->rx_fifo) & 0xff;
static int uartlite_serial_pending(struct udevice *dev, bool input)
struct uartlite_platdata *plat = dev_get_platdata(dev);
struct uartlite *regs = plat->regs;