1#include <linux/bitops.h>
2#include <linux/serial_core.h>
3#include <linux/io.h>
4#include <linux/gpio.h>
5
6#define SCI_MAJOR 204
7#define SCI_MINOR_START 8
8
9
10
11
12
13
14enum {
15 SCSMR,
16 SCBRR,
17 SCSCR,
18 SCxSR,
19 SCFCR,
20 SCFDR,
21 SCxTDR,
22 SCxRDR,
23 SCLSR,
24 SCTFDR,
25 SCRFDR,
26 SCSPTR,
27 HSSRR,
28 SCPCR,
29 SCPDR,
30 SCDL,
31 SCCKS,
32 HSRTRGR,
33 HSTTRGR,
34
35 SCIx_NR_REGS,
36};
37
38
39
40#define SCSMR_C_A BIT(7)
41#define SCSMR_CSYNC BIT(7)
42#define SCSMR_ASYNC 0
43#define SCSMR_CHR BIT(6)
44#define SCSMR_PE BIT(5)
45#define SCSMR_ODD BIT(4)
46#define SCSMR_STOP BIT(3)
47#define SCSMR_CKS 0x0003
48
49
50#define SCSMR_CKEDG BIT(12)
51#define SCSMR_SRC_MASK 0x0700
52#define SCSMR_SRC_16 0x0000
53#define SCSMR_SRC_5 0x0100
54#define SCSMR_SRC_7 0x0200
55#define SCSMR_SRC_11 0x0300
56#define SCSMR_SRC_13 0x0400
57#define SCSMR_SRC_17 0x0500
58#define SCSMR_SRC_19 0x0600
59#define SCSMR_SRC_27 0x0700
60
61
62#define SCSCR_TDRQE BIT(15)
63#define SCSCR_RDRQE BIT(14)
64
65
66#define SCI_TDRE BIT(7)
67#define SCI_RDRF BIT(6)
68#define SCI_ORER BIT(5)
69#define SCI_FER BIT(4)
70#define SCI_PER BIT(3)
71#define SCI_TEND BIT(2)
72#define SCI_RESERVED 0x03
73
74#define SCI_DEFAULT_ERROR_MASK (SCI_PER | SCI_FER)
75
76#define SCI_RDxF_CLEAR (u32)(~(SCI_RESERVED | SCI_RDRF))
77#define SCI_ERROR_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
78#define SCI_TDxE_CLEAR (u32)(~(SCI_RESERVED | SCI_TEND | SCI_TDRE))
79#define SCI_BREAK_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
80
81
82#define SCIF_ER BIT(7)
83#define SCIF_TEND BIT(6)
84#define SCIF_TDFE BIT(5)
85#define SCIF_BRK BIT(4)
86#define SCIF_FER BIT(3)
87#define SCIF_PER BIT(2)
88#define SCIF_RDF BIT(1)
89#define SCIF_DR BIT(0)
90
91#define SCIF_PERC 0xf000
92#define SCIF_FERC 0x0f00
93
94#define SCIFA_ORER BIT(9)
95
96#define SCIF_DEFAULT_ERROR_MASK (SCIF_PER | SCIF_FER | SCIF_BRK | SCIF_ER)
97
98#define SCIF_RDxF_CLEAR (u32)(~(SCIF_DR | SCIF_RDF))
99#define SCIF_ERROR_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_ER))
100#define SCIF_TDxE_CLEAR (u32)(~(SCIF_TDFE))
101#define SCIF_BREAK_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_BRK))
102
103
104#define SCFCR_RTRG1 BIT(7)
105#define SCFCR_RTRG0 BIT(6)
106#define SCFCR_TTRG1 BIT(5)
107#define SCFCR_TTRG0 BIT(4)
108#define SCFCR_MCE BIT(3)
109#define SCFCR_TFRST BIT(2)
110#define SCFCR_RFRST BIT(1)
111#define SCFCR_LOOP BIT(0)
112
113
114#define SCLSR_TO BIT(2)
115#define SCLSR_ORER BIT(0)
116
117
118#define SCSPTR_RTSIO BIT(7)
119#define SCSPTR_RTSDT BIT(6)
120#define SCSPTR_CTSIO BIT(5)
121#define SCSPTR_CTSDT BIT(4)
122#define SCSPTR_SCKIO BIT(3)
123#define SCSPTR_SCKDT BIT(2)
124#define SCSPTR_SPB2IO BIT(1)
125#define SCSPTR_SPB2DT BIT(0)
126
127
128#define HSCIF_SRE BIT(15)
129
130
131#define SCPCR_RTSC BIT(4)
132#define SCPCR_CTSC BIT(3)
133#define SCPCR_SCKC BIT(2)
134#define SCPCR_RXDC BIT(1)
135#define SCPCR_TXDC BIT(0)
136
137
138#define SCPDR_RTSD BIT(4)
139#define SCPDR_CTSD BIT(3)
140#define SCPDR_SCKD BIT(2)
141#define SCPDR_RXDD BIT(1)
142#define SCPDR_TXDD BIT(0)
143
144
145
146
147
148
149
150#define SCCKS_CKS BIT(15)
151#define SCCKS_XIN BIT(14)
152
153#define SCxSR_TEND(port) (((port)->type == PORT_SCI) ? SCI_TEND : SCIF_TEND)
154#define SCxSR_RDxF(port) (((port)->type == PORT_SCI) ? SCI_RDRF : SCIF_DR | SCIF_RDF)
155#define SCxSR_TDxE(port) (((port)->type == PORT_SCI) ? SCI_TDRE : SCIF_TDFE)
156#define SCxSR_FER(port) (((port)->type == PORT_SCI) ? SCI_FER : SCIF_FER)
157#define SCxSR_PER(port) (((port)->type == PORT_SCI) ? SCI_PER : SCIF_PER)
158#define SCxSR_BRK(port) (((port)->type == PORT_SCI) ? 0x00 : SCIF_BRK)
159
160#define SCxSR_ERRORS(port) (to_sci_port(port)->params->error_mask)
161
162#define SCxSR_RDxF_CLEAR(port) \
163 (((port)->type == PORT_SCI) ? SCI_RDxF_CLEAR : SCIF_RDxF_CLEAR)
164#define SCxSR_ERROR_CLEAR(port) \
165 (to_sci_port(port)->params->error_clear)
166#define SCxSR_TDxE_CLEAR(port) \
167 (((port)->type == PORT_SCI) ? SCI_TDxE_CLEAR : SCIF_TDxE_CLEAR)
168#define SCxSR_BREAK_CLEAR(port) \
169 (((port)->type == PORT_SCI) ? SCI_BREAK_CLEAR : SCIF_BREAK_CLEAR)
170