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