forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/tty/serial/8250/8250_uniphier.c
....@@ -12,9 +12,6 @@
1212
1313 #include "8250.h"
1414
15
-/* Most (but not all) of UniPhier UART devices have 64-depth FIFO. */
16
-#define UNIPHIER_UART_DEFAULT_FIFO_SIZE 64
17
-
1815 /*
1916 * This hardware is similar to 8250, but its register map is a bit different:
2017 * - MMIO32 (regshift = 2)
....@@ -78,7 +75,7 @@
7875 break;
7976 case UART_LCR:
8077 valshift = 8;
81
- /* fall through */
78
+ fallthrough;
8279 case UART_MCR:
8380 offset = UNIPHIER_UART_LCR_MCR;
8481 break;
....@@ -104,7 +101,7 @@
104101 case UART_SCR:
105102 /* No SCR for this hardware. Use CHAR as a scratch register */
106103 valshift = 8;
107
- /* fall through */
104
+ fallthrough;
108105 case UART_FCR:
109106 offset = UNIPHIER_UART_CHAR_FCR;
110107 break;
....@@ -112,7 +109,7 @@
112109 valshift = 8;
113110 /* Divisor latch access bit does not exist. */
114111 value &= ~UART_LCR_DLAB;
115
- /* fall through */
112
+ fallthrough;
116113 case UART_MCR:
117114 offset = UNIPHIER_UART_LCR_MCR;
118115 break;
....@@ -158,42 +155,6 @@
158155 writel(value, up->port.membase + UNIPHIER_UART_DLR);
159156 }
160157
161
-static int uniphier_of_serial_setup(struct device *dev, struct uart_port *port,
162
- struct uniphier8250_priv *priv)
163
-{
164
- int ret;
165
- u32 prop;
166
- struct device_node *np = dev->of_node;
167
-
168
- ret = of_alias_get_id(np, "serial");
169
- if (ret < 0) {
170
- dev_err(dev, "failed to get alias id\n");
171
- return ret;
172
- }
173
- port->line = ret;
174
-
175
- /* Get clk rate through clk driver */
176
- priv->clk = devm_clk_get(dev, NULL);
177
- if (IS_ERR(priv->clk)) {
178
- dev_err(dev, "failed to get clock\n");
179
- return PTR_ERR(priv->clk);
180
- }
181
-
182
- ret = clk_prepare_enable(priv->clk);
183
- if (ret < 0)
184
- return ret;
185
-
186
- port->uartclk = clk_get_rate(priv->clk);
187
-
188
- /* Check for fifo size */
189
- if (of_property_read_u32(np, "fifo-size", &prop) == 0)
190
- port->fifosize = prop;
191
- else
192
- port->fifosize = UNIPHIER_UART_DEFAULT_FIFO_SIZE;
193
-
194
- return 0;
195
-}
196
-
197158 static int uniphier_uart_probe(struct platform_device *pdev)
198159 {
199160 struct device *dev = &pdev->dev;
....@@ -215,10 +176,8 @@
215176 return -ENOMEM;
216177
217178 irq = platform_get_irq(pdev, 0);
218
- if (irq < 0) {
219
- dev_err(dev, "failed to get IRQ number\n");
179
+ if (irq < 0)
220180 return irq;
221
- }
222181
223182 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
224183 if (!priv)
....@@ -226,9 +185,24 @@
226185
227186 memset(&up, 0, sizeof(up));
228187
229
- ret = uniphier_of_serial_setup(dev, &up.port, priv);
230
- if (ret < 0)
188
+ ret = of_alias_get_id(dev->of_node, "serial");
189
+ if (ret < 0) {
190
+ dev_err(dev, "failed to get alias id\n");
231191 return ret;
192
+ }
193
+ up.port.line = ret;
194
+
195
+ priv->clk = devm_clk_get(dev, NULL);
196
+ if (IS_ERR(priv->clk)) {
197
+ dev_err(dev, "failed to get clock\n");
198
+ return PTR_ERR(priv->clk);
199
+ }
200
+
201
+ ret = clk_prepare_enable(priv->clk);
202
+ if (ret)
203
+ return ret;
204
+
205
+ up.port.uartclk = clk_get_rate(priv->clk);
232206
233207 spin_lock_init(&priv->atomic_write_lock);
234208
....@@ -241,10 +215,14 @@
241215
242216 up.port.type = PORT_16550A;
243217 up.port.iotype = UPIO_MEM32;
218
+ up.port.fifosize = 64;
244219 up.port.regshift = UNIPHIER_UART_REGSHIFT;
245220 up.port.flags = UPF_FIXED_PORT | UPF_FIXED_TYPE;
246221 up.capabilities = UART_CAP_FIFO;
247222
223
+ if (of_property_read_bool(dev->of_node, "auto-flow-control"))
224
+ up.capabilities |= UART_CAP_AFE;
225
+
248226 up.port.serial_in = uniphier_serial_in;
249227 up.port.serial_out = uniphier_serial_out;
250228 up.dl_read = uniphier_serial_dl_read;