|
@@ -21,7 +21,6 @@ struct uart_8250_dma {
|
|
|
|
|
|
/* Filter function */
|
|
|
dma_filter_fn fn;
|
|
|
-
|
|
|
/* Parameter to the filter function */
|
|
|
void *rx_param;
|
|
|
void *tx_param;
|
|
@@ -198,3 +197,20 @@ static inline int serial8250_request_dma(struct uart_8250_port *p)
|
|
|
}
|
|
|
static inline void serial8250_release_dma(struct uart_8250_port *p) { }
|
|
|
#endif
|
|
|
+
|
|
|
+static inline int ns16550a_goto_highspeed(struct uart_8250_port *up)
|
|
|
+{
|
|
|
+ unsigned char status;
|
|
|
+
|
|
|
+ status = serial_in(up, 0x04); /* EXCR2 */
|
|
|
+#define PRESL(x) ((x) & 0x30)
|
|
|
+ if (PRESL(status) == 0x10) {
|
|
|
+ /* already in high speed mode */
|
|
|
+ return 0;
|
|
|
+ } else {
|
|
|
+ status &= ~0xB0; /* Disable LOCK, mask out PRESL[01] */
|
|
|
+ status |= 0x10; /* 1.625 divisor for baud_base --> 921600 */
|
|
|
+ serial_out(up, 0x04, status);
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+}
|