1/* 2 * Driver for OMAP-UART controller. 3 * Based on drivers/serial/8250.c 4 * 5 * Copyright (C) 2010 Texas Instruments. 6 * 7 * Authors: 8 * Govindraj R <govindraj.raja@ti.com> 9 * Thara Gopinath <thara@ti.com> 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or 14 * (at your option) any later version. 15 */ 16 17#ifndef __OMAP_SERIAL_H__ 18#define __OMAP_SERIAL_H__ 19 20#include <linux/serial_core.h> 21#include <linux/platform_device.h> 22 23#include <plat/mux.h> 24 25#define DRIVER_NAME "omap_uart" 26 27/* 28 * Use tty device name as ttyO, [O -> OMAP] 29 * in bootargs we specify as console=ttyO0 if uart1 30 * is used as console uart. 31 */ 32#define OMAP_SERIAL_NAME "ttyO" 33 34#define OMAP_MODE13X_SPEED 230400 35 36/* WER = 0x7F 37 * Enable module level wakeup in WER reg 38 */ 39#define OMAP_UART_WER_MOD_WKUP 0X7F 40 41/* Enable XON/XOFF flow control on output */ 42#define OMAP_UART_SW_TX 0x04 43 44/* Enable XON/XOFF flow control on input */ 45#define OMAP_UART_SW_RX 0x04 46 47#define OMAP_UART_SYSC_RESET 0X07 48#define OMAP_UART_TCR_TRIG 0X0F 49#define OMAP_UART_SW_CLR 0XF0 50#define OMAP_UART_FIFO_CLR 0X06 51 52#define OMAP_UART_DMA_CH_FREE -1 53 54#define RX_TIMEOUT (3 * HZ) 55#define OMAP_MAX_HSUART_PORTS 4 56 57#define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA 58 59struct omap_uart_port_info { 60 bool dma_enabled; /* To specify DMA Mode */ 61 unsigned int uartclk; /* UART clock rate */ 62 void __iomem *membase; /* ioremap cookie or NULL */ 63 resource_size_t mapbase; /* resource base */ 64 unsigned long irqflags; /* request_irq flags */ 65 upf_t flags; /* UPF_* flags */ 66}; 67 68struct uart_omap_dma { 69 u8 uart_dma_tx; 70 u8 uart_dma_rx; 71 int rx_dma_channel; 72 int tx_dma_channel; 73 dma_addr_t rx_buf_dma_phys; 74 dma_addr_t tx_buf_dma_phys; 75 unsigned int uart_base; 76 /* 77 * Buffer for rx dma.It is not required for tx because the buffer 78 * comes from port structure. 79 */ 80 unsigned char *rx_buf; 81 unsigned int prev_rx_dma_pos; 82 int tx_buf_size; 83 int tx_dma_used; 84 int rx_dma_used; 85 spinlock_t tx_lock; 86 spinlock_t rx_lock; 87 /* timer to poll activity on rx dma */ 88 struct timer_list rx_timer; 89 int rx_buf_size; 90 int rx_timeout; 91}; 92 93struct uart_omap_port { 94 struct uart_port port; 95 struct uart_omap_dma uart_dma; 96 struct platform_device *pdev; 97 98 unsigned char ier; 99 unsigned char lcr; 100 unsigned char mcr; 101 unsigned char fcr; 102 unsigned char efr; 103 104 int use_dma; 105 /* 106 * Some bits in registers are cleared on a read, so they must 107 * be saved whenever the register is read but the bits will not 108 * be immediately processed. 109 */ 110 unsigned int lsr_break_flag; 111 unsigned char msr_saved_flags; 112 char name[20]; 113 unsigned long port_activity; 114}; 115 116#endif /* __OMAP_SERIAL_H__ */ 117