Commit 045ecc26 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'tty-3.9-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty

Pull TTY/serial fixes from Greg Kroah-Hartman:
 "Here are some tty/serial driver fixes for 3.9.

  The big thing here is the fix for the huge mess we caused renaming the
  8250 driver accidentally in the 3.7 kernel release, without realizing
  that there were users of the module options that suddenly broke.  This
  is now resolved, and, to top the injury off, we have a backwards-
  compatible option for those users who got used to the new name since
  3.7.  Ugh, sorry about that.

  Other than that, some other minor fixes for issues that have been
  reported by users."

* tag 'tty-3.9-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
  Xilinx: ARM: UART: clear pending irqs before enabling irqs
  TTY: 8250, deprecated 8250_core.* options
  TTY: 8250, revert module name change
  serial: 8250_pci: Add WCH CH352 quirk to avoid Xscale detection
  tty: atmel_serial_probe(): index of atmel_ports[] fix
parents 865752ed 855f6fd9
...@@ -3418,6 +3418,7 @@ MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA"); ...@@ -3418,6 +3418,7 @@ MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA");
#endif #endif
MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR); MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR);
#ifdef CONFIG_SERIAL_8250_DEPRECATED_OPTIONS
#ifndef MODULE #ifndef MODULE
/* This module was renamed to 8250_core in 3.7. Keep the old "8250" name /* This module was renamed to 8250_core in 3.7. Keep the old "8250" name
* working as well for the module options so we don't break people. We * working as well for the module options so we don't break people. We
...@@ -3432,7 +3433,7 @@ MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR); ...@@ -3432,7 +3433,7 @@ MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR);
static void __used s8250_options(void) static void __used s8250_options(void)
{ {
#undef MODULE_PARAM_PREFIX #undef MODULE_PARAM_PREFIX
#define MODULE_PARAM_PREFIX "8250." #define MODULE_PARAM_PREFIX "8250_core."
module_param_cb(share_irqs, &param_ops_uint, &share_irqs, 0644); module_param_cb(share_irqs, &param_ops_uint, &share_irqs, 0644);
module_param_cb(nr_uarts, &param_ops_uint, &nr_uarts, 0644); module_param_cb(nr_uarts, &param_ops_uint, &nr_uarts, 0644);
...@@ -3444,5 +3445,6 @@ static void __used s8250_options(void) ...@@ -3444,5 +3445,6 @@ static void __used s8250_options(void)
#endif #endif
} }
#else #else
MODULE_ALIAS("8250"); MODULE_ALIAS("8250_core");
#endif
#endif #endif
...@@ -1554,6 +1554,7 @@ pci_wch_ch353_setup(struct serial_private *priv, ...@@ -1554,6 +1554,7 @@ pci_wch_ch353_setup(struct serial_private *priv,
#define PCI_DEVICE_ID_PLX_CRONYX_OMEGA 0xc001 #define PCI_DEVICE_ID_PLX_CRONYX_OMEGA 0xc001
#define PCI_DEVICE_ID_INTEL_PATSBURG_KT 0x1d3d #define PCI_DEVICE_ID_INTEL_PATSBURG_KT 0x1d3d
#define PCI_VENDOR_ID_WCH 0x4348 #define PCI_VENDOR_ID_WCH 0x4348
#define PCI_DEVICE_ID_WCH_CH352_2S 0x3253
#define PCI_DEVICE_ID_WCH_CH353_4S 0x3453 #define PCI_DEVICE_ID_WCH_CH353_4S 0x3453
#define PCI_DEVICE_ID_WCH_CH353_2S1PF 0x5046 #define PCI_DEVICE_ID_WCH_CH353_2S1PF 0x5046
#define PCI_DEVICE_ID_WCH_CH353_2S1P 0x7053 #define PCI_DEVICE_ID_WCH_CH353_2S1P 0x7053
...@@ -2172,6 +2173,14 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { ...@@ -2172,6 +2173,14 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
.subdevice = PCI_ANY_ID, .subdevice = PCI_ANY_ID,
.setup = pci_wch_ch353_setup, .setup = pci_wch_ch353_setup,
}, },
/* WCH CH352 2S card (16550 clone) */
{
.vendor = PCI_VENDOR_ID_WCH,
.device = PCI_DEVICE_ID_WCH_CH352_2S,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
.setup = pci_wch_ch353_setup,
},
/* /*
* ASIX devices with FIFO bug * ASIX devices with FIFO bug
*/ */
...@@ -4870,6 +4879,10 @@ static struct pci_device_id serial_pci_tbl[] = { ...@@ -4870,6 +4879,10 @@ static struct pci_device_id serial_pci_tbl[] = {
PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
0, 0, pbn_b0_bt_2_115200 }, 0, 0, pbn_b0_bt_2_115200 },
{ PCI_VENDOR_ID_WCH, PCI_DEVICE_ID_WCH_CH352_2S,
PCI_ANY_ID, PCI_ANY_ID,
0, 0, pbn_b0_bt_2_115200 },
/* /*
* Commtech, Inc. Fastcom adapters * Commtech, Inc. Fastcom adapters
*/ */
......
...@@ -33,6 +33,23 @@ config SERIAL_8250 ...@@ -33,6 +33,23 @@ config SERIAL_8250
Most people will say Y or M here, so that they can use serial mice, Most people will say Y or M here, so that they can use serial mice,
modems and similar devices connecting to the standard serial ports. modems and similar devices connecting to the standard serial ports.
config SERIAL_8250_DEPRECATED_OPTIONS
bool "Support 8250_core.* kernel options (DEPRECATED)"
depends on SERIAL_8250
default y
---help---
In 3.7 we renamed 8250 to 8250_core by mistake, so now we have to
accept kernel parameters in both forms like 8250_core.nr_uarts=4 and
8250.nr_uarts=4. We now renamed the module back to 8250, but if
anybody noticed in 3.7 and changed their userspace we still have to
keep the 8350_core.* options around until they revert the changes
they already did.
If 8250 is built as a module, this adds 8250_core alias instead.
If you did not notice yet and/or you have userspace from pre-3.7, it
is safe (and recommended) to say N here.
config SERIAL_8250_PNP config SERIAL_8250_PNP
bool "8250/16550 PNP device support" if EXPERT bool "8250/16550 PNP device support" if EXPERT
depends on SERIAL_8250 && PNP depends on SERIAL_8250 && PNP
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
# Makefile for the 8250 serial device drivers. # Makefile for the 8250 serial device drivers.
# #
obj-$(CONFIG_SERIAL_8250) += 8250_core.o obj-$(CONFIG_SERIAL_8250) += 8250.o
8250_core-y := 8250.o 8250-y := 8250_core.o
8250_core-$(CONFIG_SERIAL_8250_PNP) += 8250_pnp.o 8250-$(CONFIG_SERIAL_8250_PNP) += 8250_pnp.o
8250_core-$(CONFIG_SERIAL_8250_DMA) += 8250_dma.o 8250-$(CONFIG_SERIAL_8250_DMA) += 8250_dma.o
obj-$(CONFIG_SERIAL_8250_GSC) += 8250_gsc.o obj-$(CONFIG_SERIAL_8250_GSC) += 8250_gsc.o
obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o
obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o
......
...@@ -158,7 +158,7 @@ struct atmel_uart_port { ...@@ -158,7 +158,7 @@ struct atmel_uart_port {
}; };
static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART]; static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART];
static unsigned long atmel_ports_in_use; static DECLARE_BITMAP(atmel_ports_in_use, ATMEL_MAX_UART);
#ifdef SUPPORT_SYSRQ #ifdef SUPPORT_SYSRQ
static struct console atmel_console; static struct console atmel_console;
...@@ -1769,15 +1769,14 @@ static int atmel_serial_probe(struct platform_device *pdev) ...@@ -1769,15 +1769,14 @@ static int atmel_serial_probe(struct platform_device *pdev)
if (ret < 0) if (ret < 0)
/* port id not found in platform data nor device-tree aliases: /* port id not found in platform data nor device-tree aliases:
* auto-enumerate it */ * auto-enumerate it */
ret = find_first_zero_bit(&atmel_ports_in_use, ret = find_first_zero_bit(atmel_ports_in_use, ATMEL_MAX_UART);
sizeof(atmel_ports_in_use));
if (ret > ATMEL_MAX_UART) { if (ret >= ATMEL_MAX_UART) {
ret = -ENODEV; ret = -ENODEV;
goto err; goto err;
} }
if (test_and_set_bit(ret, &atmel_ports_in_use)) { if (test_and_set_bit(ret, atmel_ports_in_use)) {
/* port already in use */ /* port already in use */
ret = -EBUSY; ret = -EBUSY;
goto err; goto err;
...@@ -1857,7 +1856,7 @@ static int atmel_serial_remove(struct platform_device *pdev) ...@@ -1857,7 +1856,7 @@ static int atmel_serial_remove(struct platform_device *pdev)
/* "port" is allocated statically, so we shouldn't free it */ /* "port" is allocated statically, so we shouldn't free it */
clear_bit(port->line, &atmel_ports_in_use); clear_bit(port->line, atmel_ports_in_use);
clk_put(atmel_port->clk); clk_put(atmel_port->clk);
......
...@@ -578,6 +578,8 @@ static int xuartps_startup(struct uart_port *port) ...@@ -578,6 +578,8 @@ static int xuartps_startup(struct uart_port *port)
/* Receive Timeout register is enabled with value of 10 */ /* Receive Timeout register is enabled with value of 10 */
xuartps_writel(10, XUARTPS_RXTOUT_OFFSET); xuartps_writel(10, XUARTPS_RXTOUT_OFFSET);
/* Clear out any pending interrupts before enabling them */
xuartps_writel(xuartps_readl(XUARTPS_ISR_OFFSET), XUARTPS_ISR_OFFSET);
/* Set the Interrupt Registers with desired interrupts */ /* Set the Interrupt Registers with desired interrupts */
xuartps_writel(XUARTPS_IXR_TXEMPTY | XUARTPS_IXR_PARITY | xuartps_writel(XUARTPS_IXR_TXEMPTY | XUARTPS_IXR_PARITY |
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment