forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/drivers/tty/serial/8250/8250_ingenic.c
....@@ -129,20 +129,19 @@
129129 return 0;
130130 }
131131
132
-EARLYCON_DECLARE(jz4740_uart, ingenic_early_console_setup);
133132 OF_EARLYCON_DECLARE(jz4740_uart, "ingenic,jz4740-uart",
134133 ingenic_early_console_setup);
135134
136
-EARLYCON_DECLARE(jz4770_uart, ingenic_early_console_setup);
137135 OF_EARLYCON_DECLARE(jz4770_uart, "ingenic,jz4770-uart",
138136 ingenic_early_console_setup);
139137
140
-EARLYCON_DECLARE(jz4775_uart, ingenic_early_console_setup);
141138 OF_EARLYCON_DECLARE(jz4775_uart, "ingenic,jz4775-uart",
142139 ingenic_early_console_setup);
143140
144
-EARLYCON_DECLARE(jz4780_uart, ingenic_early_console_setup);
145141 OF_EARLYCON_DECLARE(jz4780_uart, "ingenic,jz4780-uart",
142
+ ingenic_early_console_setup);
143
+
144
+OF_EARLYCON_DECLARE(x1000_uart, "ingenic,x1000-uart",
146145 ingenic_early_console_setup);
147146
148147 static void ingenic_uart_serial_out(struct uart_port *p, int offset, int value)
....@@ -208,12 +207,11 @@
208207 static int ingenic_uart_probe(struct platform_device *pdev)
209208 {
210209 struct uart_8250_port uart = {};
211
- struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
212
- struct resource *irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
213210 struct ingenic_uart_data *data;
214211 const struct ingenic_uart_config *cdata;
215212 const struct of_device_id *match;
216
- int err, line;
213
+ struct resource *regs;
214
+ int irq, err, line;
217215
218216 match = of_match_device(of_match, &pdev->dev);
219217 if (!match) {
....@@ -222,8 +220,13 @@
222220 }
223221 cdata = match->data;
224222
225
- if (!regs || !irq) {
226
- dev_err(&pdev->dev, "no registers/irq defined\n");
223
+ irq = platform_get_irq(pdev, 0);
224
+ if (irq < 0)
225
+ return irq;
226
+
227
+ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
228
+ if (!regs) {
229
+ dev_err(&pdev->dev, "no registers defined\n");
227230 return -EINVAL;
228231 }
229232
....@@ -239,7 +242,7 @@
239242 uart.port.regshift = 2;
240243 uart.port.serial_out = ingenic_uart_serial_out;
241244 uart.port.serial_in = ingenic_uart_serial_in;
242
- uart.port.irq = irq->start;
245
+ uart.port.irq = irq;
243246 uart.port.dev = &pdev->dev;
244247 uart.port.fifosize = cdata->fifosize;
245248 uart.tx_loadsz = cdata->tx_loadsz;
....@@ -256,22 +259,14 @@
256259 return -ENOMEM;
257260
258261 data->clk_module = devm_clk_get(&pdev->dev, "module");
259
- if (IS_ERR(data->clk_module)) {
260
- err = PTR_ERR(data->clk_module);
261
- if (err != -EPROBE_DEFER)
262
- dev_err(&pdev->dev,
263
- "unable to get module clock: %d\n", err);
264
- return err;
265
- }
262
+ if (IS_ERR(data->clk_module))
263
+ return dev_err_probe(&pdev->dev, PTR_ERR(data->clk_module),
264
+ "unable to get module clock\n");
266265
267266 data->clk_baud = devm_clk_get(&pdev->dev, "baud");
268
- if (IS_ERR(data->clk_baud)) {
269
- err = PTR_ERR(data->clk_baud);
270
- if (err != -EPROBE_DEFER)
271
- dev_err(&pdev->dev,
272
- "unable to get baud clock: %d\n", err);
273
- return err;
274
- }
267
+ if (IS_ERR(data->clk_baud))
268
+ return dev_err_probe(&pdev->dev, PTR_ERR(data->clk_baud),
269
+ "unable to get baud clock\n");
275270
276271 err = clk_prepare_enable(data->clk_module);
277272 if (err) {
....@@ -328,12 +323,18 @@
328323 .fifosize = 64,
329324 };
330325
326
+static const struct ingenic_uart_config x1000_uart_config = {
327
+ .tx_loadsz = 32,
328
+ .fifosize = 64,
329
+};
330
+
331331 static const struct of_device_id of_match[] = {
332332 { .compatible = "ingenic,jz4740-uart", .data = &jz4740_uart_config },
333333 { .compatible = "ingenic,jz4760-uart", .data = &jz4760_uart_config },
334334 { .compatible = "ingenic,jz4770-uart", .data = &jz4760_uart_config },
335335 { .compatible = "ingenic,jz4775-uart", .data = &jz4760_uart_config },
336336 { .compatible = "ingenic,jz4780-uart", .data = &jz4780_uart_config },
337
+ { .compatible = "ingenic,x1000-uart", .data = &x1000_uart_config },
337338 { /* sentinel */ }
338339 };
339340 MODULE_DEVICE_TABLE(of, of_match);