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
15enum {
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 SCI_TDRE BIT(7)
68#define SCI_RDRF BIT(6)
69#define SCI_ORER BIT(5)
70#define SCI_FER BIT(4)
71#define SCI_PER BIT(3)
72#define SCI_TEND BIT(2)
73#define SCI_RESERVED 0x03
74
75#define SCI_DEFAULT_ERROR_MASK (SCI_PER | SCI_FER)
76
77#define SCI_RDxF_CLEAR (u32)(~(SCI_RESERVED | SCI_RDRF))
78#define SCI_ERROR_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
79#define SCI_TDxE_CLEAR (u32)(~(SCI_RESERVED | SCI_TEND | SCI_TDRE))
80#define SCI_BREAK_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
81
82
83#define SCIF_ER BIT(7)
84#define SCIF_TEND BIT(6)
85#define SCIF_TDFE BIT(5)
86#define SCIF_BRK BIT(4)
87#define SCIF_FER BIT(3)
88#define SCIF_PER BIT(2)
89#define SCIF_RDF BIT(1)
90#define SCIF_DR BIT(0)
91
92#define SCIF_PERC 0xf000
93#define SCIF_FERC 0x0f00
94
95#define SCIFA_ORER BIT(9)
96
97#define SCIF_DEFAULT_ERROR_MASK (SCIF_PER | SCIF_FER | SCIF_BRK | SCIF_ER)
98
99#define SCIF_RDxF_CLEAR (u32)(~(SCIF_DR | SCIF_RDF))
100#define SCIF_ERROR_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_ER))
101#define SCIF_TDxE_CLEAR (u32)(~(SCIF_TDFE))
102#define SCIF_BREAK_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_BRK))
103
104
105#define SCFCR_RTRG1 BIT(7)
106#define SCFCR_RTRG0 BIT(6)
107#define SCFCR_TTRG1 BIT(5)
108#define SCFCR_TTRG0 BIT(4)
109#define SCFCR_MCE BIT(3)
110#define SCFCR_TFRST BIT(2)
111#define SCFCR_RFRST BIT(1)
112#define SCFCR_LOOP BIT(0)
113
114
115#define SCLSR_TO BIT(2)
116#define SCLSR_ORER BIT(0)
117
118
119#define SCSPTR_RTSIO BIT(7)
120#define SCSPTR_RTSDT BIT(6)
121#define SCSPTR_CTSIO BIT(5)
122#define SCSPTR_CTSDT BIT(4)
123#define SCSPTR_SCKIO BIT(3)
124#define SCSPTR_SCKDT BIT(2)
125#define SCSPTR_SPB2IO BIT(1)
126#define SCSPTR_SPB2DT BIT(0)
127
128
129#define HSCIF_SRE BIT(15)
130
131
132#define SCPCR_RTSC BIT(4)
133#define SCPCR_CTSC BIT(3)
134#define SCPCR_SCKC BIT(2)
135#define SCPCR_RXDC BIT(1)
136#define SCPCR_TXDC BIT(0)
137
138
139#define SCPDR_RTSD BIT(4)
140#define SCPDR_CTSD BIT(3)
141#define SCPDR_SCKD BIT(2)
142#define SCPDR_RXDD BIT(1)
143#define SCPDR_TXDD BIT(0)
144
145
146
147
148
149
150
151#define SCCKS_CKS BIT(15)
152#define SCCKS_XIN BIT(14)
153
154#define SCxSR_TEND(port) (((port)->type == PORT_SCI) ? SCI_TEND : SCIF_TEND)
155#define SCxSR_RDxF(port) (((port)->type == PORT_SCI) ? SCI_RDRF : SCIF_DR | SCIF_RDF)
156#define SCxSR_TDxE(port) (((port)->type == PORT_SCI) ? SCI_TDRE : SCIF_TDFE)
157#define SCxSR_FER(port) (((port)->type == PORT_SCI) ? SCI_FER : SCIF_FER)
158#define SCxSR_PER(port) (((port)->type == PORT_SCI) ? SCI_PER : SCIF_PER)
159#define SCxSR_BRK(port) (((port)->type == PORT_SCI) ? 0x00 : SCIF_BRK)
160
161#define SCxSR_ERRORS(port) (to_sci_port(port)->params->error_mask)
162
163#define SCxSR_RDxF_CLEAR(port) \
164 (((port)->type == PORT_SCI) ? SCI_RDxF_CLEAR : SCIF_RDxF_CLEAR)
165#define SCxSR_ERROR_CLEAR(port) \
166 (to_sci_port(port)->params->error_clear)
167#define SCxSR_TDxE_CLEAR(port) \
168 (((port)->type == PORT_SCI) ? SCI_TDxE_CLEAR : SCIF_TDxE_CLEAR)
169#define SCxSR_BREAK_CLEAR(port) \
170 (((port)->type == PORT_SCI) ? SCI_BREAK_CLEAR : SCIF_BREAK_CLEAR)
171