summaryrefslogtreecommitdiffstats
path: root/drivers/tty
diff options
context:
space:
mode:
authorAndre Przywara2015-05-21 18:26:22 +0200
committerGreg Kroah-Hartman2015-05-24 22:08:51 +0200
commitcefc2d1d66f0e0f9fbe72558c27ceeb076073f38 (patch)
treee6ae7bffb9f35c2b2abdbcb99b8ee5c33d43419c /drivers/tty
parentdrivers: PL011: allow avoiding UART enabling/disabling (diff)
downloadkernel-qcow2-linux-cefc2d1d66f0e0f9fbe72558c27ceeb076073f38.tar.gz
kernel-qcow2-linux-cefc2d1d66f0e0f9fbe72558c27ceeb076073f38.tar.xz
kernel-qcow2-linux-cefc2d1d66f0e0f9fbe72558c27ceeb076073f38.zip
drivers: PL011: allow to supply fixed option string
The SBSA UART has a fixed baud rate and flow control setting, which cannot be changed or queried by software. Add a vendor specific property to always return fixed values when trying to read the console options. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Tested-by: Mark Langsdorf <mlangsdo@redhat.com> Tested-by: Naresh Bhat <nbhat@cavium.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/amba-pl011.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index 3f6b9150e575..6558400f766f 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -79,6 +79,7 @@ struct vendor_data {
bool dma_threshold;
bool cts_event_workaround;
bool always_enabled;
+ bool fixed_options;
unsigned int (*get_fifosize)(struct amba_device *dev);
};
@@ -96,6 +97,7 @@ static struct vendor_data vendor_arm = {
.dma_threshold = false,
.cts_event_workaround = false,
.always_enabled = false,
+ .fixed_options = false,
.get_fifosize = get_fifosize_arm,
};
@@ -112,6 +114,7 @@ static struct vendor_data vendor_st = {
.dma_threshold = true,
.cts_event_workaround = true,
.always_enabled = false,
+ .fixed_options = false,
.get_fifosize = get_fifosize_st,
};
@@ -160,6 +163,7 @@ struct uart_amba_port {
unsigned int lcrh_rx; /* vendor-specific */
unsigned int old_cr; /* state during shutdown */
bool autorts;
+ unsigned int fixed_baud; /* vendor-set fixed baud rate */
char type[12];
#ifdef CONFIG_DMA_ENGINE
/* DMA stuff */
@@ -2076,10 +2080,15 @@ static int __init pl011_console_setup(struct console *co, char *options)
uap->port.uartclk = clk_get_rate(uap->clk);
- if (options)
- uart_parse_options(options, &baud, &parity, &bits, &flow);
- else
- pl011_console_get_options(uap, &baud, &parity, &bits);
+ if (uap->vendor->fixed_options) {
+ baud = uap->fixed_baud;
+ } else {
+ if (options)
+ uart_parse_options(options,
+ &baud, &parity, &bits, &flow);
+ else
+ pl011_console_get_options(uap, &baud, &parity, &bits);
+ }
return uart_set_options(&uap->port, co, baud, parity, bits, flow);
}