diff options
Diffstat (limited to 'drivers/tty')
| -rw-r--r-- | drivers/tty/pty.c | 17 | ||||
| -rw-r--r-- | drivers/tty/serial/8250.c | 8 | ||||
| -rw-r--r-- | drivers/tty/serial/8250_pci.c | 11 | ||||
| -rw-r--r-- | drivers/tty/serial/8250_pnp.c | 3 | ||||
| -rw-r--r-- | drivers/tty/serial/atmel_serial.c | 8 | ||||
| -rw-r--r-- | drivers/tty/serial/max3107-aava.c | 2 | ||||
| -rw-r--r-- | drivers/tty/serial/max3107.c | 2 | ||||
| -rw-r--r-- | drivers/tty/serial/mrst_max3110.c | 2 | ||||
| -rw-r--r-- | drivers/tty/serial/omap-serial.c | 3 | ||||
| -rw-r--r-- | drivers/tty/serial/pch_uart.c | 3 | ||||
| -rw-r--r-- | drivers/tty/serial/samsung.c | 8 | ||||
| -rw-r--r-- | drivers/tty/serial/serial_core.c | 5 | ||||
| -rw-r--r-- | drivers/tty/serial/ucc_uart.c | 2 | ||||
| -rw-r--r-- | drivers/tty/tty_io.c | 3 | 
14 files changed, 52 insertions, 25 deletions
diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c index 98b6e3bdb00..e809e9d4683 100644 --- a/drivers/tty/pty.c +++ b/drivers/tty/pty.c @@ -446,8 +446,19 @@ static inline void legacy_pty_init(void) { }  int pty_limit = NR_UNIX98_PTY_DEFAULT;  static int pty_limit_min;  static int pty_limit_max = NR_UNIX98_PTY_MAX; +static int tty_count;  static int pty_count; +static inline void pty_inc_count(void) +{ +	pty_count = (++tty_count) / 2; +} + +static inline void pty_dec_count(void) +{ +	pty_count = (--tty_count) / 2; +} +  static struct cdev ptmx_cdev;  static struct ctl_table pty_table[] = { @@ -542,6 +553,7 @@ static struct tty_struct *pts_unix98_lookup(struct tty_driver *driver,  static void pty_unix98_shutdown(struct tty_struct *tty)  { +	tty_driver_remove_tty(tty->driver, tty);  	/* We have our own method as we don't use the tty index */  	kfree(tty->termios);  } @@ -588,7 +600,8 @@ static int pty_unix98_install(struct tty_driver *driver, struct tty_struct *tty)  	 */  	tty_driver_kref_get(driver);  	tty->count++; -	pty_count++; +	pty_inc_count(); /* tty */ +	pty_inc_count(); /* tty->link */  	return 0;  err_free_mem:  	deinitialize_tty_struct(o_tty); @@ -602,7 +615,7 @@ err_free_tty:  static void pty_unix98_remove(struct tty_driver *driver, struct tty_struct *tty)  { -	pty_count--; +	pty_dec_count();  }  static const struct tty_operations ptm_unix98_ops = { diff --git a/drivers/tty/serial/8250.c b/drivers/tty/serial/8250.c index f2dfec82faf..7f50999eebc 100644 --- a/drivers/tty/serial/8250.c +++ b/drivers/tty/serial/8250.c @@ -1819,6 +1819,8 @@ static void serial8250_backup_timeout(unsigned long data)  	unsigned int iir, ier = 0, lsr;  	unsigned long flags; +	spin_lock_irqsave(&up->port.lock, flags); +  	/*  	 * Must disable interrupts or else we risk racing with the interrupt  	 * based handler. @@ -1836,10 +1838,8 @@ static void serial8250_backup_timeout(unsigned long data)  	 * the "Diva" UART used on the management processor on many HP  	 * ia64 and parisc boxes.  	 */ -	spin_lock_irqsave(&up->port.lock, flags);  	lsr = serial_in(up, UART_LSR);  	up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; -	spin_unlock_irqrestore(&up->port.lock, flags);  	if ((iir & UART_IIR_NO_INT) && (up->ier & UART_IER_THRI) &&  	    (!uart_circ_empty(&up->port.state->xmit) || up->port.x_char) &&  	    (lsr & UART_LSR_THRE)) { @@ -1848,11 +1848,13 @@ static void serial8250_backup_timeout(unsigned long data)  	}  	if (!(iir & UART_IIR_NO_INT)) -		serial8250_handle_port(up); +		transmit_chars(up);  	if (is_real_interrupt(up->port.irq))  		serial_out(up, UART_IER, ier); +	spin_unlock_irqrestore(&up->port.lock, flags); +  	/* Standard timer interval plus 0.2s to keep the port running */  	mod_timer(&up->timer,  		jiffies + uart_poll_timeout(&up->port) + HZ / 5); diff --git a/drivers/tty/serial/8250_pci.c b/drivers/tty/serial/8250_pci.c index 6b887d90a20..3abeca2a2a1 100644 --- a/drivers/tty/serial/8250_pci.c +++ b/drivers/tty/serial/8250_pci.c @@ -1599,11 +1599,6 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {  		.device         = 0x800D,  		.init		= pci_eg20t_init,  	}, -	{ -		.vendor         = 0x10DB, -		.device         = 0x800D, -		.init		= pci_eg20t_init, -	},  	/*  	 * Cronyx Omega PCI (PLX-chip based)  	 */ @@ -4021,7 +4016,7 @@ static struct pci_device_id serial_pci_tbl[] = {  		0, 0, pbn_NETMOS9900_2s_115200 },  	/* -	 * Best Connectivity PCI Multi I/O cards +	 * Best Connectivity and Rosewill PCI Multi I/O cards  	 */  	{	PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, @@ -4029,6 +4024,10 @@ static struct pci_device_id serial_pci_tbl[] = {  		0, 0, pbn_b0_1_115200 },  	{	PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, +		0xA000, 0x3002, +		0, 0, pbn_b0_bt_2_115200 }, + +	{	PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,  		0xA000, 0x3004,  		0, 0, pbn_b0_bt_4_115200 },  	/* Intel CE4100 */ diff --git a/drivers/tty/serial/8250_pnp.c b/drivers/tty/serial/8250_pnp.c index fc301f6722e..a2f236510ff 100644 --- a/drivers/tty/serial/8250_pnp.c +++ b/drivers/tty/serial/8250_pnp.c @@ -109,6 +109,9 @@ static const struct pnp_device_id pnp_dev_table[] = {  	/* IBM */  	/* IBM Thinkpad 701 Internal Modem Voice */  	{	"IBM0033",		0	}, +	/* Intermec */ +	/* Intermec CV60 touchscreen port */ +	{	"PNP4972",		0	},  	/* Intertex */  	/* Intertex 28k8 33k6 Voice EXT PnP */  	{	"IXDC801",		0	}, diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c index af9b7814965..b922f5d2e61 100644 --- a/drivers/tty/serial/atmel_serial.c +++ b/drivers/tty/serial/atmel_serial.c @@ -1609,9 +1609,11 @@ static struct console atmel_console = {  static int __init atmel_console_init(void)  {  	if (atmel_default_console_device) { -		add_preferred_console(ATMEL_DEVICENAME, -				      atmel_default_console_device->id, NULL); -		atmel_init_port(&atmel_ports[atmel_default_console_device->id], +		struct atmel_uart_data *pdata = +			atmel_default_console_device->dev.platform_data; + +		add_preferred_console(ATMEL_DEVICENAME, pdata->num, NULL); +		atmel_init_port(&atmel_ports[pdata->num],  				atmel_default_console_device);  		register_console(&atmel_console);  	} diff --git a/drivers/tty/serial/max3107-aava.c b/drivers/tty/serial/max3107-aava.c index a1fe304f2f5..d73aadd7a9a 100644 --- a/drivers/tty/serial/max3107-aava.c +++ b/drivers/tty/serial/max3107-aava.c @@ -340,5 +340,5 @@ module_exit(max3107_exit);  MODULE_DESCRIPTION("MAX3107 driver");  MODULE_AUTHOR("Aavamobile"); -MODULE_ALIAS("aava-max3107-spi"); +MODULE_ALIAS("spi:aava-max3107");  MODULE_LICENSE("GPL v2"); diff --git a/drivers/tty/serial/max3107.c b/drivers/tty/serial/max3107.c index 750b4f62731..a8164601c0e 100644 --- a/drivers/tty/serial/max3107.c +++ b/drivers/tty/serial/max3107.c @@ -1209,5 +1209,5 @@ module_exit(max3107_exit);  MODULE_DESCRIPTION("MAX3107 driver");  MODULE_AUTHOR("Aavamobile"); -MODULE_ALIAS("max3107-spi"); +MODULE_ALIAS("spi:max3107");  MODULE_LICENSE("GPL v2"); diff --git a/drivers/tty/serial/mrst_max3110.c b/drivers/tty/serial/mrst_max3110.c index a764bf99743..23bc743f2a2 100644 --- a/drivers/tty/serial/mrst_max3110.c +++ b/drivers/tty/serial/mrst_max3110.c @@ -917,4 +917,4 @@ module_init(serial_m3110_init);  module_exit(serial_m3110_exit);  MODULE_LICENSE("GPL v2"); -MODULE_ALIAS("max3110-uart"); +MODULE_ALIAS("spi:max3110-uart"); diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c index c37df8d0fa2..5e713d3ef1f 100644 --- a/drivers/tty/serial/omap-serial.c +++ b/drivers/tty/serial/omap-serial.c @@ -806,8 +806,7 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,  	serial_omap_set_mctrl(&up->port, up->port.mctrl);  	/* Software Flow Control Configuration */ -	if (termios->c_iflag & (IXON | IXOFF)) -		serial_omap_configure_xonxoff(up, termios); +	serial_omap_configure_xonxoff(up, termios);  	spin_unlock_irqrestore(&up->port.lock, flags);  	dev_dbg(up->port.dev, "serial_omap_set_termios+%d\n", up->pdev->id); diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c index 846dfcd3ce0..b46218d679e 100644 --- a/drivers/tty/serial/pch_uart.c +++ b/drivers/tty/serial/pch_uart.c @@ -598,7 +598,8 @@ static void pch_request_dma(struct uart_port *port)  	dma_cap_zero(mask);  	dma_cap_set(DMA_SLAVE, mask); -	dma_dev = pci_get_bus_and_slot(2, PCI_DEVFN(0xa, 0)); /* Get DMA's dev +	dma_dev = pci_get_bus_and_slot(priv->pdev->bus->number, +				       PCI_DEVFN(0xa, 0)); /* Get DMA's dev  								information */  	/* Set Tx DMA */  	param = &priv->param_tx; diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c index afc62942315..6edafb5ace1 100644 --- a/drivers/tty/serial/samsung.c +++ b/drivers/tty/serial/samsung.c @@ -1225,15 +1225,19 @@ static const struct dev_pm_ops s3c24xx_serial_pm_ops = {  	.suspend = s3c24xx_serial_suspend,  	.resume = s3c24xx_serial_resume,  }; +#define SERIAL_SAMSUNG_PM_OPS	(&s3c24xx_serial_pm_ops) +  #else /* !CONFIG_PM_SLEEP */ -#define s3c24xx_serial_pm_ops	NULL + +#define SERIAL_SAMSUNG_PM_OPS	NULL  #endif /* CONFIG_PM_SLEEP */  int s3c24xx_serial_init(struct platform_driver *drv,  			struct s3c24xx_uart_info *info)  {  	dbg("s3c24xx_serial_init(%p,%p)\n", drv, info); -	drv->driver.pm = &s3c24xx_serial_pm_ops; + +	drv->driver.pm = SERIAL_SAMSUNG_PM_OPS;  	return platform_driver_register(drv);  } diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index db7912cb7ae..a3efbea5dbb 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -200,6 +200,11 @@ static int uart_startup(struct tty_struct *tty, struct uart_state *state, int in  		clear_bit(TTY_IO_ERROR, &tty->flags);  	} +	/* +	 * This is to allow setserial on this port. People may want to set +	 * port/irq/type and then reconfigure the port properly if it failed +	 * now. +	 */  	if (retval && capable(CAP_SYS_ADMIN))  		retval = 0; diff --git a/drivers/tty/serial/ucc_uart.c b/drivers/tty/serial/ucc_uart.c index c327218cad4..9af9f0879a2 100644 --- a/drivers/tty/serial/ucc_uart.c +++ b/drivers/tty/serial/ucc_uart.c @@ -235,7 +235,7 @@ static inline void *qe2cpu_addr(dma_addr_t addr, struct uart_qe_port *qe_port)  		return qe_port->bd_virt + (addr - qe_port->bd_dma_addr);  	/* something nasty happened */ -	printk(KERN_ERR "%s: addr=%x\n", __func__, addr); +	printk(KERN_ERR "%s: addr=%llx\n", __func__, (u64)addr);  	BUG();  	return NULL;  } diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index 150e4f747c7..4f1fc81112e 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -1295,8 +1295,7 @@ static int tty_driver_install_tty(struct tty_driver *driver,   *   *	Locking: tty_mutex for now   */ -static void tty_driver_remove_tty(struct tty_driver *driver, -						struct tty_struct *tty) +void tty_driver_remove_tty(struct tty_driver *driver, struct tty_struct *tty)  {  	if (driver->ops->remove)  		driver->ops->remove(driver, tty);  |