aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/serial
diff options
context:
space:
mode:
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>2015-03-13 11:44:26 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-03-26 18:01:37 -0400
commit90b9aacf912af38a177114ca232051c61be8b93e (patch)
treee95b98f787665393fd12d92f25cfa3a784f032ba /drivers/tty/serial
parent594eb4a4be013b27a4ed28ccf5a3431432723719 (diff)
serial: 8250_pci: add Intel Tangier support
Intel Tangier contains 4 HSUART ports as found on Intel Edison board which are 8250 compatible. The patch adds necessary bits to the driver. Note that the HSU port0 is currently unavailable and thus not supported. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty/serial')
-rw-r--r--drivers/tty/serial/8250/8250_pci.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index 0be8dd84f9dc..98e5a6d9cfef 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -1540,6 +1540,14 @@ static void intel_mid_set_termios(struct uart_port *p,
1540 1540
1541 serial8250_do_set_termios(p, termios, old); 1541 serial8250_do_set_termios(p, termios, old);
1542} 1542}
1543
1544static void intel_mid_set_termios_38_4M(struct uart_port *p,
1545 struct ktermios *termios,
1546 struct ktermios *old)
1547{
1548 intel_mid_set_termios(p, termios, old, 38400000);
1549}
1550
1543static void intel_mid_set_termios_50M(struct uart_port *p, 1551static void intel_mid_set_termios_50M(struct uart_port *p,
1544 struct ktermios *termios, 1552 struct ktermios *termios,
1545 struct ktermios *old) 1553 struct ktermios *old)
@@ -1636,6 +1644,27 @@ static int pnw_serial_setup(struct serial_private *priv,
1636 return intel_mid_serial_setup(priv, board, port, idx, index, dma_dev); 1644 return intel_mid_serial_setup(priv, board, port, idx, index, dma_dev);
1637} 1645}
1638 1646
1647#define PCI_DEVICE_ID_INTEL_TNG_UART 0x1191
1648
1649static int tng_serial_setup(struct serial_private *priv,
1650 const struct pciserial_board *board,
1651 struct uart_8250_port *port, int idx)
1652{
1653 struct pci_dev *pdev = priv->dev;
1654 struct pci_dev *dma_dev;
1655 int index = PCI_FUNC(pdev->devfn);
1656
1657 /* Currently no support for HSU port0 */
1658 if (index-- == 0)
1659 return -ENODEV;
1660
1661 dma_dev = pci_get_slot(pdev->bus, PCI_DEVFN(5, 0));
1662
1663 port->port.set_termios = intel_mid_set_termios_38_4M;
1664
1665 return intel_mid_serial_setup(priv, board, port, idx, index, dma_dev);
1666}
1667
1639static int 1668static int
1640pci_omegapci_setup(struct serial_private *priv, 1669pci_omegapci_setup(struct serial_private *priv,
1641 const struct pciserial_board *board, 1670 const struct pciserial_board *board,
@@ -2114,6 +2143,13 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
2114 }, 2143 },
2115 { 2144 {
2116 .vendor = PCI_VENDOR_ID_INTEL, 2145 .vendor = PCI_VENDOR_ID_INTEL,
2146 .device = PCI_DEVICE_ID_INTEL_TNG_UART,
2147 .subvendor = PCI_ANY_ID,
2148 .subdevice = PCI_ANY_ID,
2149 .setup = tng_serial_setup,
2150 },
2151 {
2152 .vendor = PCI_VENDOR_ID_INTEL,
2117 .device = PCI_DEVICE_ID_INTEL_BSW_UART1, 2153 .device = PCI_DEVICE_ID_INTEL_BSW_UART1,
2118 .subvendor = PCI_ANY_ID, 2154 .subvendor = PCI_ANY_ID,
2119 .subdevice = PCI_ANY_ID, 2155 .subdevice = PCI_ANY_ID,
@@ -2990,6 +3026,7 @@ enum pci_board_num_t {
2990 pbn_ce4100_1_115200, 3026 pbn_ce4100_1_115200,
2991 pbn_byt, 3027 pbn_byt,
2992 pbn_pnw, 3028 pbn_pnw,
3029 pbn_tng,
2993 pbn_qrk, 3030 pbn_qrk,
2994 pbn_omegapci, 3031 pbn_omegapci,
2995 pbn_NETMOS9900_2s_115200, 3032 pbn_NETMOS9900_2s_115200,
@@ -3761,6 +3798,11 @@ static struct pciserial_board pci_boards[] = {
3761 .num_ports = 1, 3798 .num_ports = 1,
3762 .base_baud = 115200, 3799 .base_baud = 115200,
3763 }, 3800 },
3801 [pbn_tng] = {
3802 .flags = FL_BASE0,
3803 .num_ports = 1,
3804 .base_baud = 1843200,
3805 },
3764 [pbn_qrk] = { 3806 [pbn_qrk] = {
3765 .flags = FL_BASE0, 3807 .flags = FL_BASE0,
3766 .num_ports = 1, 3808 .num_ports = 1,
@@ -5507,6 +5549,13 @@ static struct pci_device_id serial_pci_tbl[] = {
5507 pbn_pnw}, 5549 pbn_pnw},
5508 5550
5509 /* 5551 /*
5552 * Intel Tangier
5553 */
5554 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TNG_UART,
5555 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5556 pbn_tng},
5557
5558 /*
5510 * Intel Quark x1000 5559 * Intel Quark x1000
5511 */ 5560 */
5512 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_UART, 5561 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_UART,