tty: amba-pl011: add register offset table to vendor data
Add the register offset table to the vendor data, allowing vendor
differences to be described in this table.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index 29526a1..4c12207 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -103,6 +103,7 @@
/* There is by now at least one vendor with differing details, so handle it */
struct vendor_data {
+ const u16 *reg_offset;
unsigned int ifls;
unsigned int lcrh_tx;
unsigned int lcrh_rx;
@@ -121,6 +122,7 @@
}
static struct vendor_data vendor_arm = {
+ .reg_offset = pl011_std_offsets,
.ifls = UART011_IFLS_RX4_8|UART011_IFLS_TX4_8,
.lcrh_tx = REG_LCRH,
.lcrh_rx = REG_LCRH,
@@ -133,6 +135,7 @@
};
static struct vendor_data vendor_sbsa = {
+ .reg_offset = pl011_std_offsets,
.oversampling = false,
.dma_threshold = false,
.cts_event_workaround = false,
@@ -146,6 +149,7 @@
}
static struct vendor_data vendor_st = {
+ .reg_offset = pl011_std_offsets,
.ifls = UART011_IFLS_RX_HALF|UART011_IFLS_TX_HALF,
.lcrh_tx = REG_ST_LCRH_TX,
.lcrh_rx = REG_ST_LCRH_RX,
@@ -2426,7 +2430,7 @@
if (IS_ERR(uap->clk))
return PTR_ERR(uap->clk);
- uap->reg_offset = pl011_std_offsets;
+ uap->reg_offset = vendor->reg_offset;
uap->vendor = vendor;
uap->lcrh_rx = vendor->lcrh_rx;
uap->lcrh_tx = vendor->lcrh_tx;
@@ -2508,7 +2512,7 @@
if (!uap)
return -ENOMEM;
- uap->reg_offset = pl011_std_offsets;
+ uap->reg_offset = vendor_sbsa.reg_offset;
uap->vendor = &vendor_sbsa;
uap->fifosize = 32;
uap->port.irq = platform_get_irq(pdev, 0);