forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-02-19 1c055e55a242a33e574e48be530e06770a210dcd
kernel/drivers/tty/serial/lpc32xx_hs.c
....@@ -23,10 +23,9 @@
2323 #include <linux/nmi.h>
2424 #include <linux/io.h>
2525 #include <linux/irq.h>
26
-#include <linux/gpio.h>
2726 #include <linux/of.h>
28
-#include <mach/platform.h>
29
-#include <mach/hardware.h>
27
+#include <linux/sizes.h>
28
+#include <linux/soc/nxp/lpc32xx-misc.h>
3029
3130 /*
3231 * High Speed UART register offsets
....@@ -80,6 +79,8 @@
8079 #define LPC32XX_HSU_TX_TL4B (0x1 << 0)
8180 #define LPC32XX_HSU_TX_TL8B (0x2 << 0)
8281 #define LPC32XX_HSU_TX_TL16B (0x3 << 0)
82
+
83
+#define LPC32XX_MAIN_OSC_FREQ 13000000
8384
8485 #define MODNAME "lpc32xx_hsuart"
8586
....@@ -169,6 +170,8 @@
169170
170171 if (options)
171172 uart_parse_options(options, &baud, &parity, &bits, &flow);
173
+
174
+ lpc32xx_loopback_set(port->mapbase, 0); /* get out of loopback mode */
172175
173176 return uart_set_options(port, co, baud, parity, bits, flow);
174177 }
....@@ -341,7 +344,7 @@
341344 LPC32XX_HSUART_IIR(port->membase));
342345 port->icount.overrun++;
343346 tty_insert_flip_char(tport, 0, TTY_OVERRUN);
344
- tty_schedule_flip(tport);
347
+ tty_flip_buffer_push(tport);
345348 }
346349
347350 /* Data received? */
....@@ -433,35 +436,6 @@
433436 tmp &= ~LPC32XX_HSU_BREAK;
434437 writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
435438 spin_unlock_irqrestore(&port->lock, flags);
436
-}
437
-
438
-/* LPC3250 Errata HSUART.1: Hang workaround via loopback mode on inactivity */
439
-static void lpc32xx_loopback_set(resource_size_t mapbase, int state)
440
-{
441
- int bit;
442
- u32 tmp;
443
-
444
- switch (mapbase) {
445
- case LPC32XX_HS_UART1_BASE:
446
- bit = 0;
447
- break;
448
- case LPC32XX_HS_UART2_BASE:
449
- bit = 1;
450
- break;
451
- case LPC32XX_HS_UART7_BASE:
452
- bit = 6;
453
- break;
454
- default:
455
- WARN(1, "lpc32xx_hs: Warning: Unknown port at %08x\n", mapbase);
456
- return;
457
- }
458
-
459
- tmp = readl(LPC32XX_UARTCTL_CLOOP);
460
- if (state)
461
- tmp |= (1 << bit);
462
- else
463
- tmp &= ~(1 << bit);
464
- writel(tmp, LPC32XX_UARTCTL_CLOOP);
465439 }
466440
467441 /* port->lock is not held. */
....@@ -683,11 +657,8 @@
683657 p->port.membase = NULL;
684658
685659 ret = platform_get_irq(pdev, 0);
686
- if (ret < 0) {
687
- dev_err(&pdev->dev, "Error getting irq for HS UART port %d\n",
688
- uarts_registered);
660
+ if (ret < 0)
689661 return ret;
690
- }
691662 p->port.irq = ret;
692663
693664 p->port.iotype = UPIO_MEM32;