Commit 9263a06a authored by Linus Torvalds's avatar Linus Torvalds

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

Pull tty/serial fixes from Greg KH:
 "Here are some small tty/serial driver fixes for 4.1-rc2.

  They include some minor fixes that resolve reported issues, and a new
  device quirk.

  All have been in linux-next succesfully"

* tag 'tty-4.1-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
  serial: 8250_pci: Add support for 16 port Exar boards
  serial: samsung: fix serial console break
  tty/serial: at91: maxburst was missing for dma transfers
  serial: of-serial: Remove device_type = "serial" registration
  serial: xilinx: Use platform_get_irq to get irq description structure
  serial: core: Fix kernel-doc build warnings
  tty: Re-add external interface for tty_set_termios()
parents dcca8de0 96a5d18b
...@@ -1998,6 +1998,8 @@ pci_wch_ch38x_setup(struct serial_private *priv, ...@@ -1998,6 +1998,8 @@ pci_wch_ch38x_setup(struct serial_private *priv,
#define PCIE_DEVICE_ID_WCH_CH382_2S1P 0x3250 #define PCIE_DEVICE_ID_WCH_CH382_2S1P 0x3250
#define PCIE_DEVICE_ID_WCH_CH384_4S 0x3470 #define PCIE_DEVICE_ID_WCH_CH384_4S 0x3470
#define PCI_DEVICE_ID_EXAR_XR17V8358 0x8358
/* Unknown vendors/cards - this should not be in linux/pci_ids.h */ /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
#define PCI_SUBDEVICE_ID_UNKNOWN_0x1588 0x1588 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1588 0x1588
...@@ -2520,6 +2522,13 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { ...@@ -2520,6 +2522,13 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
.subdevice = PCI_ANY_ID, .subdevice = PCI_ANY_ID,
.setup = pci_xr17v35x_setup, .setup = pci_xr17v35x_setup,
}, },
{
.vendor = PCI_VENDOR_ID_EXAR,
.device = PCI_DEVICE_ID_EXAR_XR17V8358,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
.setup = pci_xr17v35x_setup,
},
/* /*
* Xircom cards * Xircom cards
*/ */
...@@ -2999,6 +3008,7 @@ enum pci_board_num_t { ...@@ -2999,6 +3008,7 @@ enum pci_board_num_t {
pbn_exar_XR17V352, pbn_exar_XR17V352,
pbn_exar_XR17V354, pbn_exar_XR17V354,
pbn_exar_XR17V358, pbn_exar_XR17V358,
pbn_exar_XR17V8358,
pbn_exar_ibm_saturn, pbn_exar_ibm_saturn,
pbn_pasemi_1682M, pbn_pasemi_1682M,
pbn_ni8430_2, pbn_ni8430_2,
...@@ -3685,6 +3695,14 @@ static struct pciserial_board pci_boards[] = { ...@@ -3685,6 +3695,14 @@ static struct pciserial_board pci_boards[] = {
.reg_shift = 0, .reg_shift = 0,
.first_offset = 0, .first_offset = 0,
}, },
[pbn_exar_XR17V8358] = {
.flags = FL_BASE0,
.num_ports = 16,
.base_baud = 7812500,
.uart_offset = 0x400,
.reg_shift = 0,
.first_offset = 0,
},
[pbn_exar_ibm_saturn] = { [pbn_exar_ibm_saturn] = {
.flags = FL_BASE0, .flags = FL_BASE0,
.num_ports = 1, .num_ports = 1,
...@@ -5080,7 +5098,7 @@ static struct pci_device_id serial_pci_tbl[] = { ...@@ -5080,7 +5098,7 @@ static struct pci_device_id serial_pci_tbl[] = {
0, 0,
0, pbn_exar_XR17C158 }, 0, pbn_exar_XR17C158 },
/* /*
* Exar Corp. XR17V35[248] Dual/Quad/Octal PCIe UARTs * Exar Corp. XR17V[48]35[248] Dual/Quad/Octal/Hexa PCIe UARTs
*/ */
{ PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17V352, { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17V352,
PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
...@@ -5094,7 +5112,10 @@ static struct pci_device_id serial_pci_tbl[] = { ...@@ -5094,7 +5112,10 @@ static struct pci_device_id serial_pci_tbl[] = {
PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
0, 0,
0, pbn_exar_XR17V358 }, 0, pbn_exar_XR17V358 },
{ PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17V8358,
PCI_ANY_ID, PCI_ANY_ID,
0,
0, pbn_exar_XR17V8358 },
/* /*
* Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke) * Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke)
*/ */
......
...@@ -880,6 +880,7 @@ static int atmel_prepare_tx_dma(struct uart_port *port) ...@@ -880,6 +880,7 @@ static int atmel_prepare_tx_dma(struct uart_port *port)
config.direction = DMA_MEM_TO_DEV; config.direction = DMA_MEM_TO_DEV;
config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
config.dst_addr = port->mapbase + ATMEL_US_THR; config.dst_addr = port->mapbase + ATMEL_US_THR;
config.dst_maxburst = 1;
ret = dmaengine_slave_config(atmel_port->chan_tx, ret = dmaengine_slave_config(atmel_port->chan_tx,
&config); &config);
...@@ -1059,6 +1060,7 @@ static int atmel_prepare_rx_dma(struct uart_port *port) ...@@ -1059,6 +1060,7 @@ static int atmel_prepare_rx_dma(struct uart_port *port)
config.direction = DMA_DEV_TO_MEM; config.direction = DMA_DEV_TO_MEM;
config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
config.src_addr = port->mapbase + ATMEL_US_RHR; config.src_addr = port->mapbase + ATMEL_US_RHR;
config.src_maxburst = 1;
ret = dmaengine_slave_config(atmel_port->chan_rx, ret = dmaengine_slave_config(atmel_port->chan_rx,
&config); &config);
......
...@@ -346,7 +346,6 @@ static const struct of_device_id of_platform_serial_table[] = { ...@@ -346,7 +346,6 @@ static const struct of_device_id of_platform_serial_table[] = {
{ .compatible = "ibm,qpace-nwp-serial", { .compatible = "ibm,qpace-nwp-serial",
.data = (void *)PORT_NWPSERIAL, }, .data = (void *)PORT_NWPSERIAL, },
#endif #endif
{ .type = "serial", .data = (void *)PORT_UNKNOWN, },
{ /* end of list */ }, { /* end of list */ },
}; };
......
...@@ -1068,8 +1068,9 @@ static int s3c64xx_serial_startup(struct uart_port *port) ...@@ -1068,8 +1068,9 @@ static int s3c64xx_serial_startup(struct uart_port *port)
spin_lock_irqsave(&port->lock, flags); spin_lock_irqsave(&port->lock, flags);
ufcon = rd_regl(port, S3C2410_UFCON); ufcon = rd_regl(port, S3C2410_UFCON);
ufcon |= S3C2410_UFCON_RESETRX | S3C2410_UFCON_RESETTX | ufcon |= S3C2410_UFCON_RESETRX | S5PV210_UFCON_RXTRIG8;
S5PV210_UFCON_RXTRIG8; if (!uart_console(port))
ufcon |= S3C2410_UFCON_RESETTX;
wr_regl(port, S3C2410_UFCON, ufcon); wr_regl(port, S3C2410_UFCON, ufcon);
enable_rx_pio(ourport); enable_rx_pio(ourport);
......
...@@ -1770,7 +1770,7 @@ static const struct file_operations uart_proc_fops = { ...@@ -1770,7 +1770,7 @@ static const struct file_operations uart_proc_fops = {
* @port: the port to write the message * @port: the port to write the message
* @s: array of characters * @s: array of characters
* @count: number of characters in string to write * @count: number of characters in string to write
* @write: function to write character to port * @putchar: function to write character to port
*/ */
void uart_console_write(struct uart_port *port, const char *s, void uart_console_write(struct uart_port *port, const char *s,
unsigned int count, unsigned int count,
......
...@@ -632,7 +632,8 @@ MODULE_DEVICE_TABLE(of, ulite_of_match); ...@@ -632,7 +632,8 @@ MODULE_DEVICE_TABLE(of, ulite_of_match);
static int ulite_probe(struct platform_device *pdev) static int ulite_probe(struct platform_device *pdev)
{ {
struct resource *res, *res2; struct resource *res;
int irq;
int id = pdev->id; int id = pdev->id;
#ifdef CONFIG_OF #ifdef CONFIG_OF
const __be32 *prop; const __be32 *prop;
...@@ -646,11 +647,11 @@ static int ulite_probe(struct platform_device *pdev) ...@@ -646,11 +647,11 @@ static int ulite_probe(struct platform_device *pdev)
if (!res) if (!res)
return -ENODEV; return -ENODEV;
res2 = platform_get_resource(pdev, IORESOURCE_IRQ, 0); irq = platform_get_irq(pdev, 0);
if (!res2) if (irq <= 0)
return -ENODEV; return -ENXIO;
return ulite_assign(&pdev->dev, id, res->start, res2->start); return ulite_assign(&pdev->dev, id, res->start, irq);
} }
static int ulite_remove(struct platform_device *pdev) static int ulite_remove(struct platform_device *pdev)
......
...@@ -1331,9 +1331,9 @@ static SIMPLE_DEV_PM_OPS(cdns_uart_dev_pm_ops, cdns_uart_suspend, ...@@ -1331,9 +1331,9 @@ static SIMPLE_DEV_PM_OPS(cdns_uart_dev_pm_ops, cdns_uart_suspend,
*/ */
static int cdns_uart_probe(struct platform_device *pdev) static int cdns_uart_probe(struct platform_device *pdev)
{ {
int rc, id; int rc, id, irq;
struct uart_port *port; struct uart_port *port;
struct resource *res, *res2; struct resource *res;
struct cdns_uart *cdns_uart_data; struct cdns_uart *cdns_uart_data;
cdns_uart_data = devm_kzalloc(&pdev->dev, sizeof(*cdns_uart_data), cdns_uart_data = devm_kzalloc(&pdev->dev, sizeof(*cdns_uart_data),
...@@ -1380,9 +1380,9 @@ static int cdns_uart_probe(struct platform_device *pdev) ...@@ -1380,9 +1380,9 @@ static int cdns_uart_probe(struct platform_device *pdev)
goto err_out_clk_disable; goto err_out_clk_disable;
} }
res2 = platform_get_resource(pdev, IORESOURCE_IRQ, 0); irq = platform_get_irq(pdev, 0);
if (!res2) { if (irq <= 0) {
rc = -ENODEV; rc = -ENXIO;
goto err_out_clk_disable; goto err_out_clk_disable;
} }
...@@ -1411,7 +1411,7 @@ static int cdns_uart_probe(struct platform_device *pdev) ...@@ -1411,7 +1411,7 @@ static int cdns_uart_probe(struct platform_device *pdev)
* and triggers invocation of the config_port() entry point. * and triggers invocation of the config_port() entry point.
*/ */
port->mapbase = res->start; port->mapbase = res->start;
port->irq = res2->start; port->irq = irq;
port->dev = &pdev->dev; port->dev = &pdev->dev;
port->uartclk = clk_get_rate(cdns_uart_data->uartclk); port->uartclk = clk_get_rate(cdns_uart_data->uartclk);
port->private_data = cdns_uart_data; port->private_data = cdns_uart_data;
......
...@@ -536,7 +536,7 @@ EXPORT_SYMBOL(tty_termios_hw_change); ...@@ -536,7 +536,7 @@ EXPORT_SYMBOL(tty_termios_hw_change);
* Locking: termios_rwsem * Locking: termios_rwsem
*/ */
static int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios) int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios)
{ {
struct ktermios old_termios; struct ktermios old_termios;
struct tty_ldisc *ld; struct tty_ldisc *ld;
...@@ -569,6 +569,7 @@ static int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios) ...@@ -569,6 +569,7 @@ static int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios)
up_write(&tty->termios_rwsem); up_write(&tty->termios_rwsem);
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(tty_set_termios);
/** /**
* set_termios - set termios values for a tty * set_termios - set termios values for a tty
......
...@@ -491,6 +491,7 @@ static inline speed_t tty_get_baud_rate(struct tty_struct *tty) ...@@ -491,6 +491,7 @@ static inline speed_t tty_get_baud_rate(struct tty_struct *tty)
extern void tty_termios_copy_hw(struct ktermios *new, struct ktermios *old); extern void tty_termios_copy_hw(struct ktermios *new, struct ktermios *old);
extern int tty_termios_hw_change(struct ktermios *a, struct ktermios *b); extern int tty_termios_hw_change(struct ktermios *a, struct ktermios *b);
extern int tty_set_termios(struct tty_struct *tty, struct ktermios *kt);
extern struct tty_ldisc *tty_ldisc_ref(struct tty_struct *); extern struct tty_ldisc *tty_ldisc_ref(struct tty_struct *);
extern void tty_ldisc_deref(struct tty_ldisc *); extern void tty_ldisc_deref(struct tty_ldisc *);
......
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