diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-03-17 11:21:20 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-03-17 11:21:20 -0400 |
| commit | 47239561e39bceefecc3cd67f71fcf86a198a8ff (patch) | |
| tree | 9823d0973494ea8acabb744bc3aba42b610fb434 /drivers/serial | |
| parent | ed681a91ab805341675d166a9592551093c0a2d9 (diff) | |
| parent | 5bee17f18b595937e6beafeee5197868a3f74a06 (diff) | |
Merge branch 'linus' into core/printk
Diffstat (limited to 'drivers/serial')
| -rw-r--r-- | drivers/serial/8250.c | 15 | ||||
| -rw-r--r-- | drivers/serial/8250_pci.c | 36 | ||||
| -rw-r--r-- | drivers/serial/atmel_serial.c | 4 | ||||
| -rw-r--r-- | drivers/serial/jsm/jsm_driver.c | 3 | ||||
| -rw-r--r-- | drivers/serial/sh-sci.h | 2 |
5 files changed, 59 insertions, 1 deletions
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 0d934bfbdd9b..b4b39811b445 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
| @@ -2083,6 +2083,20 @@ static int serial8250_startup(struct uart_port *port) | |||
| 2083 | 2083 | ||
| 2084 | serial8250_set_mctrl(&up->port, up->port.mctrl); | 2084 | serial8250_set_mctrl(&up->port, up->port.mctrl); |
| 2085 | 2085 | ||
| 2086 | /* Serial over Lan (SoL) hack: | ||
| 2087 | Intel 8257x Gigabit ethernet chips have a | ||
| 2088 | 16550 emulation, to be used for Serial Over Lan. | ||
| 2089 | Those chips take a longer time than a normal | ||
| 2090 | serial device to signalize that a transmission | ||
| 2091 | data was queued. Due to that, the above test generally | ||
| 2092 | fails. One solution would be to delay the reading of | ||
| 2093 | iir. However, this is not reliable, since the timeout | ||
| 2094 | is variable. So, let's just don't test if we receive | ||
| 2095 | TX irq. This way, we'll never enable UART_BUG_TXEN. | ||
| 2096 | */ | ||
| 2097 | if (up->port.flags & UPF_NO_TXEN_TEST) | ||
| 2098 | goto dont_test_tx_en; | ||
| 2099 | |||
| 2086 | /* | 2100 | /* |
| 2087 | * Do a quick test to see if we receive an | 2101 | * Do a quick test to see if we receive an |
| 2088 | * interrupt when we enable the TX irq. | 2102 | * interrupt when we enable the TX irq. |
| @@ -2102,6 +2116,7 @@ static int serial8250_startup(struct uart_port *port) | |||
| 2102 | up->bugs &= ~UART_BUG_TXEN; | 2116 | up->bugs &= ~UART_BUG_TXEN; |
| 2103 | } | 2117 | } |
| 2104 | 2118 | ||
| 2119 | dont_test_tx_en: | ||
| 2105 | spin_unlock_irqrestore(&up->port.lock, flags); | 2120 | spin_unlock_irqrestore(&up->port.lock, flags); |
| 2106 | 2121 | ||
| 2107 | /* | 2122 | /* |
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 536d8e510f66..533f82025adf 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c | |||
| @@ -798,6 +798,21 @@ pci_default_setup(struct serial_private *priv, | |||
| 798 | return setup_port(priv, port, bar, offset, board->reg_shift); | 798 | return setup_port(priv, port, bar, offset, board->reg_shift); |
| 799 | } | 799 | } |
| 800 | 800 | ||
| 801 | static int skip_tx_en_setup(struct serial_private *priv, | ||
| 802 | const struct pciserial_board *board, | ||
| 803 | struct uart_port *port, int idx) | ||
| 804 | { | ||
| 805 | port->flags |= UPF_NO_TXEN_TEST; | ||
| 806 | printk(KERN_DEBUG "serial8250: skipping TxEn test for device " | ||
| 807 | "[%04x:%04x] subsystem [%04x:%04x]\n", | ||
| 808 | priv->dev->vendor, | ||
| 809 | priv->dev->device, | ||
| 810 | priv->dev->subsystem_vendor, | ||
| 811 | priv->dev->subsystem_device); | ||
| 812 | |||
| 813 | return pci_default_setup(priv, board, port, idx); | ||
| 814 | } | ||
| 815 | |||
| 801 | /* This should be in linux/pci_ids.h */ | 816 | /* This should be in linux/pci_ids.h */ |
| 802 | #define PCI_VENDOR_ID_SBSMODULARIO 0x124B | 817 | #define PCI_VENDOR_ID_SBSMODULARIO 0x124B |
| 803 | #define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B | 818 | #define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B |
| @@ -864,6 +879,27 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { | |||
| 864 | .init = pci_inteli960ni_init, | 879 | .init = pci_inteli960ni_init, |
| 865 | .setup = pci_default_setup, | 880 | .setup = pci_default_setup, |
| 866 | }, | 881 | }, |
| 882 | { | ||
| 883 | .vendor = PCI_VENDOR_ID_INTEL, | ||
| 884 | .device = PCI_DEVICE_ID_INTEL_8257X_SOL, | ||
| 885 | .subvendor = PCI_ANY_ID, | ||
| 886 | .subdevice = PCI_ANY_ID, | ||
| 887 | .setup = skip_tx_en_setup, | ||
| 888 | }, | ||
| 889 | { | ||
| 890 | .vendor = PCI_VENDOR_ID_INTEL, | ||
| 891 | .device = PCI_DEVICE_ID_INTEL_82573L_SOL, | ||
| 892 | .subvendor = PCI_ANY_ID, | ||
| 893 | .subdevice = PCI_ANY_ID, | ||
| 894 | .setup = skip_tx_en_setup, | ||
| 895 | }, | ||
| 896 | { | ||
| 897 | .vendor = PCI_VENDOR_ID_INTEL, | ||
| 898 | .device = PCI_DEVICE_ID_INTEL_82573E_SOL, | ||
| 899 | .subvendor = PCI_ANY_ID, | ||
| 900 | .subdevice = PCI_ANY_ID, | ||
| 901 | .setup = skip_tx_en_setup, | ||
| 902 | }, | ||
| 867 | /* | 903 | /* |
| 868 | * ITE | 904 | * ITE |
| 869 | */ | 905 | */ |
diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c index 89362d733d62..8f58f7ff0dd7 100644 --- a/drivers/serial/atmel_serial.c +++ b/drivers/serial/atmel_serial.c | |||
| @@ -877,6 +877,10 @@ static int atmel_startup(struct uart_port *port) | |||
| 877 | } | 877 | } |
| 878 | } | 878 | } |
| 879 | 879 | ||
| 880 | /* Save current CSR for comparison in atmel_tasklet_func() */ | ||
| 881 | atmel_port->irq_status_prev = UART_GET_CSR(port); | ||
| 882 | atmel_port->irq_status = atmel_port->irq_status_prev; | ||
| 883 | |||
| 880 | /* | 884 | /* |
| 881 | * Finally, enable the serial port | 885 | * Finally, enable the serial port |
| 882 | */ | 886 | */ |
diff --git a/drivers/serial/jsm/jsm_driver.c b/drivers/serial/jsm/jsm_driver.c index 92187e28608a..ac79cbe4c2cf 100644 --- a/drivers/serial/jsm/jsm_driver.c +++ b/drivers/serial/jsm/jsm_driver.c | |||
| @@ -84,6 +84,8 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 84 | brd->pci_dev = pdev; | 84 | brd->pci_dev = pdev; |
| 85 | if (pdev->device == PCIE_DEVICE_ID_NEO_4_IBM) | 85 | if (pdev->device == PCIE_DEVICE_ID_NEO_4_IBM) |
| 86 | brd->maxports = 4; | 86 | brd->maxports = 4; |
| 87 | else if (pdev->device == PCI_DEVICE_ID_DIGI_NEO_8) | ||
| 88 | brd->maxports = 8; | ||
| 87 | else | 89 | else |
| 88 | brd->maxports = 2; | 90 | brd->maxports = 2; |
| 89 | 91 | ||
| @@ -212,6 +214,7 @@ static struct pci_device_id jsm_pci_tbl[] = { | |||
| 212 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_NEO_2RJ45), 0, 0, 2 }, | 214 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_NEO_2RJ45), 0, 0, 2 }, |
| 213 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_NEO_2RJ45PRI), 0, 0, 3 }, | 215 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_NEO_2RJ45PRI), 0, 0, 3 }, |
| 214 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCIE_DEVICE_ID_NEO_4_IBM), 0, 0, 4 }, | 216 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCIE_DEVICE_ID_NEO_4_IBM), 0, 0, 4 }, |
| 217 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_DIGI_NEO_8), 0, 0, 5 }, | ||
| 215 | { 0, } | 218 | { 0, } |
| 216 | }; | 219 | }; |
| 217 | MODULE_DEVICE_TABLE(pci, jsm_pci_tbl); | 220 | MODULE_DEVICE_TABLE(pci, jsm_pci_tbl); |
diff --git a/drivers/serial/sh-sci.h b/drivers/serial/sh-sci.h index 3599828b9766..022e89ffec1d 100644 --- a/drivers/serial/sh-sci.h +++ b/drivers/serial/sh-sci.h | |||
| @@ -133,7 +133,7 @@ | |||
| 133 | # define SCSPTR3 0xffed0024 /* 16 bit SCIF */ | 133 | # define SCSPTR3 0xffed0024 /* 16 bit SCIF */ |
| 134 | # define SCSPTR4 0xffee0024 /* 16 bit SCIF */ | 134 | # define SCSPTR4 0xffee0024 /* 16 bit SCIF */ |
| 135 | # define SCSPTR5 0xffef0024 /* 16 bit SCIF */ | 135 | # define SCSPTR5 0xffef0024 /* 16 bit SCIF */ |
| 136 | # define SCIF_OPER 0x0001 /* Overrun error bit */ | 136 | # define SCIF_ORER 0x0001 /* Overrun error bit */ |
| 137 | # define SCSCR_INIT(port) 0x3a /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */ | 137 | # define SCSCR_INIT(port) 0x3a /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */ |
| 138 | #elif defined(CONFIG_CPU_SUBTYPE_SH7201) || \ | 138 | #elif defined(CONFIG_CPU_SUBTYPE_SH7201) || \ |
| 139 | defined(CONFIG_CPU_SUBTYPE_SH7203) || \ | 139 | defined(CONFIG_CPU_SUBTYPE_SH7203) || \ |
