Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions
imx.c File Reference
#include <linux/module.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/platform_device.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/rational.h>
#include <linux/slab.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/pinctrl/consumer.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <linux/platform_data/serial-imx.h>

Go to the source code of this file.

Data Structures

struct  imx_uart_data
 
struct  imx_port
 
struct  imx_port_ucrs
 

Macros

#define URXD0   0x0 /* Receiver Register */
 
#define URTX0   0x40 /* Transmitter Register */
 
#define UCR1   0x80 /* Control Register 1 */
 
#define UCR2   0x84 /* Control Register 2 */
 
#define UCR3   0x88 /* Control Register 3 */
 
#define UCR4   0x8c /* Control Register 4 */
 
#define UFCR   0x90 /* FIFO Control Register */
 
#define USR1   0x94 /* Status Register 1 */
 
#define USR2   0x98 /* Status Register 2 */
 
#define UESC   0x9c /* Escape Character Register */
 
#define UTIM   0xa0 /* Escape Timer Register */
 
#define UBIR   0xa4 /* BRM Incremental Register */
 
#define UBMR   0xa8 /* BRM Modulator Register */
 
#define UBRC   0xac /* Baud Rate Count Register */
 
#define IMX21_ONEMS   0xb0 /* One Millisecond register */
 
#define IMX1_UTS   0xd0 /* UART Test Register on i.mx1 */
 
#define IMX21_UTS   0xb4 /* UART Test Register on all other i.mx*/
 
#define URXD_CHARRDY   (1<<15)
 
#define URXD_ERR   (1<<14)
 
#define URXD_OVRRUN   (1<<13)
 
#define URXD_FRMERR   (1<<12)
 
#define URXD_BRK   (1<<11)
 
#define URXD_PRERR   (1<<10)
 
#define UCR1_ADEN   (1<<15) /* Auto detect interrupt */
 
#define UCR1_ADBR   (1<<14) /* Auto detect baud rate */
 
#define UCR1_TRDYEN   (1<<13) /* Transmitter ready interrupt enable */
 
#define UCR1_IDEN   (1<<12) /* Idle condition interrupt */
 
#define UCR1_RRDYEN   (1<<9) /* Recv ready interrupt enable */
 
#define UCR1_RDMAEN   (1<<8) /* Recv ready DMA enable */
 
#define UCR1_IREN   (1<<7) /* Infrared interface enable */
 
#define UCR1_TXMPTYEN   (1<<6) /* Transimitter empty interrupt enable */
 
#define UCR1_RTSDEN   (1<<5) /* RTS delta interrupt enable */
 
#define UCR1_SNDBRK   (1<<4) /* Send break */
 
#define UCR1_TDMAEN   (1<<3) /* Transmitter ready DMA enable */
 
#define IMX1_UCR1_UARTCLKEN   (1<<2) /* UART clock enabled, i.mx1 only */
 
#define UCR1_DOZE   (1<<1) /* Doze */
 
#define UCR1_UARTEN   (1<<0) /* UART enabled */
 
#define UCR2_ESCI   (1<<15) /* Escape seq interrupt enable */
 
#define UCR2_IRTS   (1<<14) /* Ignore RTS pin */
 
#define UCR2_CTSC   (1<<13) /* CTS pin control */
 
#define UCR2_CTS   (1<<12) /* Clear to send */
 
#define UCR2_ESCEN   (1<<11) /* Escape enable */
 
#define UCR2_PREN   (1<<8) /* Parity enable */
 
#define UCR2_PROE   (1<<7) /* Parity odd/even */
 
#define UCR2_STPB   (1<<6) /* Stop */
 
#define UCR2_WS   (1<<5) /* Word size */
 
#define UCR2_RTSEN   (1<<4) /* Request to send interrupt enable */
 
#define UCR2_ATEN   (1<<3) /* Aging Timer Enable */
 
#define UCR2_TXEN   (1<<2) /* Transmitter enabled */
 
#define UCR2_RXEN   (1<<1) /* Receiver enabled */
 
#define UCR2_SRST   (1<<0) /* SW reset */
 
#define UCR3_DTREN   (1<<13) /* DTR interrupt enable */
 
#define UCR3_PARERREN   (1<<12) /* Parity enable */
 
#define UCR3_FRAERREN   (1<<11) /* Frame error interrupt enable */
 
#define UCR3_DSR   (1<<10) /* Data set ready */
 
#define UCR3_DCD   (1<<9) /* Data carrier detect */
 
#define UCR3_RI   (1<<8) /* Ring indicator */
 
#define UCR3_TIMEOUTEN   (1<<7) /* Timeout interrupt enable */
 
#define UCR3_RXDSEN   (1<<6) /* Receive status interrupt enable */
 
#define UCR3_AIRINTEN   (1<<5) /* Async IR wake interrupt enable */
 
#define UCR3_AWAKEN   (1<<4) /* Async wake interrupt enable */
 
#define IMX21_UCR3_RXDMUXSEL   (1<<2) /* RXD Muxed Input Select */
 
#define UCR3_INVT   (1<<1) /* Inverted Infrared transmission */
 
#define UCR3_BPEN   (1<<0) /* Preset registers enable */
 
#define UCR4_CTSTL_SHF   10 /* CTS trigger level shift */
 
#define UCR4_CTSTL_MASK   0x3F /* CTS trigger is 6 bits wide */
 
#define UCR4_INVR   (1<<9) /* Inverted infrared reception */
 
#define UCR4_ENIRI   (1<<8) /* Serial infrared interrupt enable */
 
#define UCR4_WKEN   (1<<7) /* Wake interrupt enable */
 
#define UCR4_REF16   (1<<6) /* Ref freq 16 MHz */
 
#define UCR4_IRSC   (1<<5) /* IR special case */
 
#define UCR4_TCEN   (1<<3) /* Transmit complete interrupt enable */
 
#define UCR4_BKEN   (1<<2) /* Break condition interrupt enable */
 
#define UCR4_OREN   (1<<1) /* Receiver overrun interrupt enable */
 
#define UCR4_DREN   (1<<0) /* Recv data ready interrupt enable */
 
#define UFCR_RXTL_SHF   0 /* Receiver trigger level shift */
 
#define UFCR_DCEDTE   (1<<6) /* DCE/DTE mode select */
 
#define UFCR_RFDIV   (7<<7) /* Reference freq divider mask */
 
#define UFCR_RFDIV_REG(x)   (((x) < 7 ? 6 - (x) : 6) << 7)
 
#define UFCR_TXTL_SHF   10 /* Transmitter trigger level shift */
 
#define USR1_PARITYERR   (1<<15) /* Parity error interrupt flag */
 
#define USR1_RTSS   (1<<14) /* RTS pin status */
 
#define USR1_TRDY   (1<<13) /* Transmitter ready interrupt/dma flag */
 
#define USR1_RTSD   (1<<12) /* RTS delta */
 
#define USR1_ESCF   (1<<11) /* Escape seq interrupt flag */
 
#define USR1_FRAMERR   (1<<10) /* Frame error interrupt flag */
 
#define USR1_RRDY   (1<<9) /* Receiver ready interrupt/dma flag */
 
#define USR1_TIMEOUT   (1<<7) /* Receive timeout interrupt status */
 
#define USR1_RXDS   (1<<6) /* Receiver idle interrupt flag */
 
#define USR1_AIRINT   (1<<5) /* Async IR wake interrupt flag */
 
#define USR1_AWAKE   (1<<4) /* Aysnc wake interrupt flag */
 
#define USR2_ADET   (1<<15) /* Auto baud rate detect complete */
 
#define USR2_TXFE   (1<<14) /* Transmit buffer FIFO empty */
 
#define USR2_DTRF   (1<<13) /* DTR edge interrupt flag */
 
#define USR2_IDLE   (1<<12) /* Idle condition */
 
#define USR2_IRINT   (1<<8) /* Serial infrared interrupt flag */
 
#define USR2_WAKE   (1<<7) /* Wake */
 
#define USR2_RTSF   (1<<4) /* RTS edge interrupt flag */
 
#define USR2_TXDC   (1<<3) /* Transmitter complete */
 
#define USR2_BRCD   (1<<2) /* Break condition */
 
#define USR2_ORE   (1<<1) /* Overrun error */
 
#define USR2_RDR   (1<<0) /* Recv data ready */
 
#define UTS_FRCPERR   (1<<13) /* Force parity error */
 
#define UTS_LOOP   (1<<12) /* Loop tx and rx */
 
#define UTS_TXEMPTY   (1<<6) /* TxFIFO empty */
 
#define UTS_RXEMPTY   (1<<5) /* RxFIFO empty */
 
#define UTS_TXFULL   (1<<4) /* TxFIFO full */
 
#define UTS_RXFULL   (1<<3) /* RxFIFO full */
 
#define UTS_SOFTRST   (1<<0) /* Software reset */
 
#define SERIAL_IMX_MAJOR   207
 
#define MINOR_START   16
 
#define DEV_NAME   "ttymxc"
 
#define MCTRL_TIMEOUT   (250*HZ/1000)
 
#define DRIVER_NAME   "IMX-uart"
 
#define UART_NR   8
 
#define USE_IRDA(sport)   (0)
 
#define TXTL   2 /* reset default */
 
#define RXTL   1 /* reset default */
 
#define CTSTL   16
 
#define IMX_CONSOLE   NULL
 

Enumerations

enum  imx_uart_type { IMX1_UART, IMX21_UART }
 

Functions

 MODULE_DEVICE_TABLE (platform, imx_uart_devtype)
 
 MODULE_DEVICE_TABLE (of, imx_uart_dt_ids)
 
 module_init (imx_serial_init)
 
 module_exit (imx_serial_exit)
 
 MODULE_AUTHOR ("Sascha Hauer")
 
 MODULE_DESCRIPTION ("IMX generic serial port driver")
 
 MODULE_LICENSE ("GPL")
 
 MODULE_ALIAS ("platform:imx-uart")
 

Macro Definition Documentation

#define CTSTL   16

Definition at line 680 of file imx.c.

#define DEV_NAME   "ttymxc"

Definition at line 172 of file imx.c.

#define DRIVER_NAME   "IMX-uart"

Definition at line 182 of file imx.c.

#define IMX1_UCR1_UARTCLKEN   (1<<2) /* UART clock enabled, i.mx1 only */

Definition at line 93 of file imx.c.

#define IMX1_UTS   0xd0 /* UART Test Register on i.mx1 */

Definition at line 72 of file imx.c.

#define IMX21_ONEMS   0xb0 /* One Millisecond register */

Definition at line 71 of file imx.c.

#define IMX21_UCR3_RXDMUXSEL   (1<<2) /* RXD Muxed Input Select */

Definition at line 120 of file imx.c.

#define IMX21_UTS   0xb4 /* UART Test Register on all other i.mx*/

Definition at line 73 of file imx.c.

#define IMX_CONSOLE   NULL

Definition at line 1353 of file imx.c.

#define MCTRL_TIMEOUT   (250*HZ/1000)

Definition at line 180 of file imx.c.

#define MINOR_START   16

Definition at line 171 of file imx.c.

#define RXTL   1 /* reset default */

Definition at line 666 of file imx.c.

#define SERIAL_IMX_MAJOR   207

Definition at line 170 of file imx.c.

#define TXTL   2 /* reset default */

Definition at line 665 of file imx.c.

#define UART_NR   8

Definition at line 184 of file imx.c.

#define UBIR   0xa4 /* BRM Incremental Register */

Definition at line 68 of file imx.c.

#define UBMR   0xa8 /* BRM Modulator Register */

Definition at line 69 of file imx.c.

#define UBRC   0xac /* Baud Rate Count Register */

Definition at line 70 of file imx.c.

#define UCR1   0x80 /* Control Register 1 */

Definition at line 59 of file imx.c.

#define UCR1_ADBR   (1<<14) /* Auto detect baud rate */

Definition at line 83 of file imx.c.

#define UCR1_ADEN   (1<<15) /* Auto detect interrupt */

Definition at line 82 of file imx.c.

#define UCR1_DOZE   (1<<1) /* Doze */

Definition at line 94 of file imx.c.

#define UCR1_IDEN   (1<<12) /* Idle condition interrupt */

Definition at line 85 of file imx.c.

#define UCR1_IREN   (1<<7) /* Infrared interface enable */

Definition at line 88 of file imx.c.

#define UCR1_RDMAEN   (1<<8) /* Recv ready DMA enable */

Definition at line 87 of file imx.c.

#define UCR1_RRDYEN   (1<<9) /* Recv ready interrupt enable */

Definition at line 86 of file imx.c.

#define UCR1_RTSDEN   (1<<5) /* RTS delta interrupt enable */

Definition at line 90 of file imx.c.

#define UCR1_SNDBRK   (1<<4) /* Send break */

Definition at line 91 of file imx.c.

#define UCR1_TDMAEN   (1<<3) /* Transmitter ready DMA enable */

Definition at line 92 of file imx.c.

#define UCR1_TRDYEN   (1<<13) /* Transmitter ready interrupt enable */

Definition at line 84 of file imx.c.

#define UCR1_TXMPTYEN   (1<<6) /* Transimitter empty interrupt enable */

Definition at line 89 of file imx.c.

#define UCR1_UARTEN   (1<<0) /* UART enabled */

Definition at line 95 of file imx.c.

#define UCR2   0x84 /* Control Register 2 */

Definition at line 60 of file imx.c.

#define UCR2_ATEN   (1<<3) /* Aging Timer Enable */

Definition at line 106 of file imx.c.

#define UCR2_CTS   (1<<12) /* Clear to send */

Definition at line 99 of file imx.c.

#define UCR2_CTSC   (1<<13) /* CTS pin control */

Definition at line 98 of file imx.c.

#define UCR2_ESCEN   (1<<11) /* Escape enable */

Definition at line 100 of file imx.c.

#define UCR2_ESCI   (1<<15) /* Escape seq interrupt enable */

Definition at line 96 of file imx.c.

#define UCR2_IRTS   (1<<14) /* Ignore RTS pin */

Definition at line 97 of file imx.c.

#define UCR2_PREN   (1<<8) /* Parity enable */

Definition at line 101 of file imx.c.

#define UCR2_PROE   (1<<7) /* Parity odd/even */

Definition at line 102 of file imx.c.

#define UCR2_RTSEN   (1<<4) /* Request to send interrupt enable */

Definition at line 105 of file imx.c.

#define UCR2_RXEN   (1<<1) /* Receiver enabled */

Definition at line 108 of file imx.c.

#define UCR2_SRST   (1<<0) /* SW reset */

Definition at line 109 of file imx.c.

#define UCR2_STPB   (1<<6) /* Stop */

Definition at line 103 of file imx.c.

#define UCR2_TXEN   (1<<2) /* Transmitter enabled */

Definition at line 107 of file imx.c.

#define UCR2_WS   (1<<5) /* Word size */

Definition at line 104 of file imx.c.

#define UCR3   0x88 /* Control Register 3 */

Definition at line 61 of file imx.c.

#define UCR3_AIRINTEN   (1<<5) /* Async IR wake interrupt enable */

Definition at line 118 of file imx.c.

#define UCR3_AWAKEN   (1<<4) /* Async wake interrupt enable */

Definition at line 119 of file imx.c.

#define UCR3_BPEN   (1<<0) /* Preset registers enable */

Definition at line 122 of file imx.c.

#define UCR3_DCD   (1<<9) /* Data carrier detect */

Definition at line 114 of file imx.c.

#define UCR3_DSR   (1<<10) /* Data set ready */

Definition at line 113 of file imx.c.

#define UCR3_DTREN   (1<<13) /* DTR interrupt enable */

Definition at line 110 of file imx.c.

#define UCR3_FRAERREN   (1<<11) /* Frame error interrupt enable */

Definition at line 112 of file imx.c.

#define UCR3_INVT   (1<<1) /* Inverted Infrared transmission */

Definition at line 121 of file imx.c.

#define UCR3_PARERREN   (1<<12) /* Parity enable */

Definition at line 111 of file imx.c.

#define UCR3_RI   (1<<8) /* Ring indicator */

Definition at line 115 of file imx.c.

#define UCR3_RXDSEN   (1<<6) /* Receive status interrupt enable */

Definition at line 117 of file imx.c.

#define UCR3_TIMEOUTEN   (1<<7) /* Timeout interrupt enable */

Definition at line 116 of file imx.c.

#define UCR4   0x8c /* Control Register 4 */

Definition at line 62 of file imx.c.

#define UCR4_BKEN   (1<<2) /* Break condition interrupt enable */

Definition at line 131 of file imx.c.

#define UCR4_CTSTL_MASK   0x3F /* CTS trigger is 6 bits wide */

Definition at line 124 of file imx.c.

#define UCR4_CTSTL_SHF   10 /* CTS trigger level shift */

Definition at line 123 of file imx.c.

#define UCR4_DREN   (1<<0) /* Recv data ready interrupt enable */

Definition at line 133 of file imx.c.

#define UCR4_ENIRI   (1<<8) /* Serial infrared interrupt enable */

Definition at line 126 of file imx.c.

#define UCR4_INVR   (1<<9) /* Inverted infrared reception */

Definition at line 125 of file imx.c.

#define UCR4_IRSC   (1<<5) /* IR special case */

Definition at line 129 of file imx.c.

#define UCR4_OREN   (1<<1) /* Receiver overrun interrupt enable */

Definition at line 132 of file imx.c.

#define UCR4_REF16   (1<<6) /* Ref freq 16 MHz */

Definition at line 128 of file imx.c.

#define UCR4_TCEN   (1<<3) /* Transmit complete interrupt enable */

Definition at line 130 of file imx.c.

#define UCR4_WKEN   (1<<7) /* Wake interrupt enable */

Definition at line 127 of file imx.c.

#define UESC   0x9c /* Escape Character Register */

Definition at line 66 of file imx.c.

#define UFCR   0x90 /* FIFO Control Register */

Definition at line 63 of file imx.c.

#define UFCR_DCEDTE   (1<<6) /* DCE/DTE mode select */

Definition at line 135 of file imx.c.

#define UFCR_RFDIV   (7<<7) /* Reference freq divider mask */

Definition at line 136 of file imx.c.

#define UFCR_RFDIV_REG (   x)    (((x) < 7 ? 6 - (x) : 6) << 7)

Definition at line 137 of file imx.c.

#define UFCR_RXTL_SHF   0 /* Receiver trigger level shift */

Definition at line 134 of file imx.c.

#define UFCR_TXTL_SHF   10 /* Transmitter trigger level shift */

Definition at line 138 of file imx.c.

#define URTX0   0x40 /* Transmitter Register */

Definition at line 58 of file imx.c.

#define URXD0   0x0 /* Receiver Register */

Definition at line 57 of file imx.c.

#define URXD_BRK   (1<<11)

Definition at line 80 of file imx.c.

#define URXD_CHARRDY   (1<<15)

Definition at line 76 of file imx.c.

#define URXD_ERR   (1<<14)

Definition at line 77 of file imx.c.

#define URXD_FRMERR   (1<<12)

Definition at line 79 of file imx.c.

#define URXD_OVRRUN   (1<<13)

Definition at line 78 of file imx.c.

#define URXD_PRERR   (1<<10)

Definition at line 81 of file imx.c.

#define USE_IRDA (   sport)    (0)

Definition at line 222 of file imx.c.

#define USR1   0x94 /* Status Register 1 */

Definition at line 64 of file imx.c.

#define USR1_AIRINT   (1<<5) /* Async IR wake interrupt flag */

Definition at line 148 of file imx.c.

#define USR1_AWAKE   (1<<4) /* Aysnc wake interrupt flag */

Definition at line 149 of file imx.c.

#define USR1_ESCF   (1<<11) /* Escape seq interrupt flag */

Definition at line 143 of file imx.c.

#define USR1_FRAMERR   (1<<10) /* Frame error interrupt flag */

Definition at line 144 of file imx.c.

#define USR1_PARITYERR   (1<<15) /* Parity error interrupt flag */

Definition at line 139 of file imx.c.

#define USR1_RRDY   (1<<9) /* Receiver ready interrupt/dma flag */

Definition at line 145 of file imx.c.

#define USR1_RTSD   (1<<12) /* RTS delta */

Definition at line 142 of file imx.c.

#define USR1_RTSS   (1<<14) /* RTS pin status */

Definition at line 140 of file imx.c.

#define USR1_RXDS   (1<<6) /* Receiver idle interrupt flag */

Definition at line 147 of file imx.c.

#define USR1_TIMEOUT   (1<<7) /* Receive timeout interrupt status */

Definition at line 146 of file imx.c.

#define USR1_TRDY   (1<<13) /* Transmitter ready interrupt/dma flag */

Definition at line 141 of file imx.c.

#define USR2   0x98 /* Status Register 2 */

Definition at line 65 of file imx.c.

#define USR2_ADET   (1<<15) /* Auto baud rate detect complete */

Definition at line 150 of file imx.c.

#define USR2_BRCD   (1<<2) /* Break condition */

Definition at line 158 of file imx.c.

#define USR2_DTRF   (1<<13) /* DTR edge interrupt flag */

Definition at line 152 of file imx.c.

#define USR2_IDLE   (1<<12) /* Idle condition */

Definition at line 153 of file imx.c.

#define USR2_IRINT   (1<<8) /* Serial infrared interrupt flag */

Definition at line 154 of file imx.c.

#define USR2_ORE   (1<<1) /* Overrun error */

Definition at line 159 of file imx.c.

#define USR2_RDR   (1<<0) /* Recv data ready */

Definition at line 160 of file imx.c.

#define USR2_RTSF   (1<<4) /* RTS edge interrupt flag */

Definition at line 156 of file imx.c.

#define USR2_TXDC   (1<<3) /* Transmitter complete */

Definition at line 157 of file imx.c.

#define USR2_TXFE   (1<<14) /* Transmit buffer FIFO empty */

Definition at line 151 of file imx.c.

#define USR2_WAKE   (1<<7) /* Wake */

Definition at line 155 of file imx.c.

#define UTIM   0xa0 /* Escape Timer Register */

Definition at line 67 of file imx.c.

#define UTS_FRCPERR   (1<<13) /* Force parity error */

Definition at line 161 of file imx.c.

#define UTS_LOOP   (1<<12) /* Loop tx and rx */

Definition at line 162 of file imx.c.

#define UTS_RXEMPTY   (1<<5) /* RxFIFO empty */

Definition at line 164 of file imx.c.

#define UTS_RXFULL   (1<<3) /* RxFIFO full */

Definition at line 166 of file imx.c.

#define UTS_SOFTRST   (1<<0) /* Software reset */

Definition at line 167 of file imx.c.

#define UTS_TXEMPTY   (1<<6) /* TxFIFO empty */

Definition at line 163 of file imx.c.

#define UTS_TXFULL   (1<<4) /* TxFIFO full */

Definition at line 165 of file imx.c.

Enumeration Type Documentation

Enumerator:
IMX1_UART 
IMX21_UART 

Definition at line 187 of file imx.c.

Function Documentation

MODULE_ALIAS ( "platform:imx-uart )
MODULE_AUTHOR ( "Sascha Hauer"  )
MODULE_DESCRIPTION ( "IMX generic serial port driver )
MODULE_DEVICE_TABLE ( platform  ,
imx_uart_devtype   
)
MODULE_DEVICE_TABLE ( of  ,
imx_uart_dt_ids   
)
module_exit ( imx_serial_exit  )
module_init ( imx_serial_init  )
MODULE_LICENSE ( "GPL"  )