Skip to content

Commit

Permalink
Merge tag 'tty-3.3-rc3' tty-next
Browse files Browse the repository at this point in the history
This is needed to handle the 8250 file merge mess properly for future
patches.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Greg Kroah-Hartman committed Feb 10, 2012
2 parents 19e00f2 + 418a936 commit 5a22e30
Show file tree
Hide file tree
Showing 34 changed files with 1,152 additions and 230 deletions.
14 changes: 14 additions & 0 deletions Documentation/devicetree/bindings/tty/serial/efm32-uart.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
* Energymicro efm32 UART

Required properties:
- compatible : Should be "efm32,uart"
- reg : Address and length of the register set
- interrupts : Should contain uart interrupt

Example:

uart@0x4000c400 {
compatible = "efm32,uart";
reg = <0x4000c400 0x400>;
interrupts = <15>;
};
9 changes: 3 additions & 6 deletions drivers/isdn/capi/capi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1015,14 +1015,11 @@ capinc_tty_install(struct tty_driver *driver, struct tty_struct *tty)
{
int idx = tty->index;
struct capiminor *mp = capiminor_get(idx);
int ret = tty_init_termios(tty);
int ret = tty_standard_install(driver, tty);

if (ret == 0) {
tty_driver_kref_get(driver);
tty->count++;
if (ret == 0)
tty->driver_data = mp;
driver->ttys[idx] = tty;
} else
else
capiminor_put(mp);
return ret;
}
Expand Down
6 changes: 1 addition & 5 deletions drivers/misc/pti.c
Original file line number Diff line number Diff line change
Expand Up @@ -481,13 +481,9 @@ static int pti_tty_install(struct tty_driver *driver, struct tty_struct *tty)
{
int idx = tty->index;
struct pti_tty *pti_tty_data;
int ret = tty_init_termios(tty);
int ret = tty_standard_install(driver, tty);

if (ret == 0) {
tty_driver_kref_get(driver);
tty->count++;
driver->ttys[idx] = tty;

pti_tty_data = kmalloc(sizeof(struct pti_tty), GFP_KERNEL);
if (pti_tty_data == NULL)
return -ENOMEM;
Expand Down
9 changes: 3 additions & 6 deletions drivers/mmc/card/sdio_uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -750,15 +750,12 @@ static int sdio_uart_install(struct tty_driver *driver, struct tty_struct *tty)
{
int idx = tty->index;
struct sdio_uart_port *port = sdio_uart_port_get(idx);
int ret = tty_init_termios(tty);
int ret = tty_standard_install(driver, tty);

if (ret == 0) {
tty_driver_kref_get(driver);
tty->count++;
if (ret == 0)
/* This is the ref sdio_uart_port get provided */
tty->driver_data = port;
driver->ttys[idx] = tty;
} else
else
sdio_uart_port_put(port);
return ret;
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/hvc/hvc_beat.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ static int __init hvc_beat_init(void)
if (!firmware_has_feature(FW_FEATURE_BEAT))
return -ENODEV;

hp = hvc_alloc(0, NO_IRQ, &hvc_beat_get_put_ops, 16);
hp = hvc_alloc(0, 0, &hvc_beat_get_put_ops, 16);
if (IS_ERR(hp))
return PTR_ERR(hp);
hvc_beat_dev = hp;
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/hvc/hvc_rtas.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ static int __init hvc_rtas_init(void)

/* Allocate an hvc_struct for the console device we instantiated
* earlier. Save off hp so that we can return it on exit */
hp = hvc_alloc(hvc_rtas_cookie, NO_IRQ, &hvc_rtas_get_put_ops, 16);
hp = hvc_alloc(hvc_rtas_cookie, 0, &hvc_rtas_get_put_ops, 16);
if (IS_ERR(hp))
return PTR_ERR(hp);

Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/hvc/hvc_udbg.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ static int __init hvc_udbg_init(void)

BUG_ON(hvc_udbg_dev);

hp = hvc_alloc(0, NO_IRQ, &hvc_udbg_ops, 16);
hp = hvc_alloc(0, 0, &hvc_udbg_ops, 16);
if (IS_ERR(hp))
return PTR_ERR(hp);

Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/hvc/hvc_xen.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ static int __init xen_hvc_init(void)
xencons_irq = bind_evtchn_to_irq(xen_start_info->console.domU.evtchn);
}
if (xencons_irq < 0)
xencons_irq = 0; /* NO_IRQ */
xencons_irq = 0;
else
irq_set_noprobe(xencons_irq);

Expand Down
4 changes: 2 additions & 2 deletions drivers/tty/hvc/hvcs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1203,7 +1203,7 @@ static void hvcs_close(struct tty_struct *tty, struct file *filp)
{
struct hvcs_struct *hvcsd;
unsigned long flags;
int irq = NO_IRQ;
int irq;

/*
* Is someone trying to close the file associated with this device after
Expand Down Expand Up @@ -1264,7 +1264,7 @@ static void hvcs_hangup(struct tty_struct * tty)
struct hvcs_struct *hvcsd = tty->driver_data;
unsigned long flags;
int temp_open_count;
int irq = NO_IRQ;
int irq;

spin_lock_irqsave(&hvcsd->lock, flags);
/* Preserve this so that we know how many kref refs to put */
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/hvc/hvsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1237,7 +1237,7 @@ static int __init hvsi_console_init(void)
hp->state = HVSI_CLOSED;
hp->vtermno = *vtermno;
hp->virq = irq_create_mapping(NULL, irq[0]);
if (hp->virq == NO_IRQ) {
if (hp->virq == 0) {
printk(KERN_ERR "%s: couldn't create irq mapping for 0x%x\n",
__func__, irq[0]);
continue;
Expand Down
8 changes: 2 additions & 6 deletions drivers/tty/nozomi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1602,13 +1602,9 @@ static int ntty_install(struct tty_driver *driver, struct tty_struct *tty)
int ret;
if (!port || !dc || dc->state != NOZOMI_STATE_READY)
return -ENODEV;
ret = tty_init_termios(tty);
if (ret == 0) {
tty_driver_kref_get(driver);
tty->count++;
ret = tty_standard_install(driver, tty);
if (ret == 0)
tty->driver_data = port;
driver->ttys[tty->index] = tty;
}
return ret;
}

Expand Down
68 changes: 5 additions & 63 deletions drivers/tty/pty.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
#include <linux/major.h>
#include <linux/mm.h>
#include <linux/init.h>
#include <linux/sysctl.h>
#include <linux/device.h>
#include <linux/uaccess.h>
#include <linux/bitops.h>
Expand Down Expand Up @@ -55,11 +54,8 @@ static void pty_close(struct tty_struct *tty, struct file *filp)
wake_up_interruptible(&tty->link->write_wait);
if (tty->driver->subtype == PTY_TYPE_MASTER) {
set_bit(TTY_OTHER_CLOSED, &tty->flags);
#ifdef CONFIG_UNIX98_PTYS
if (tty->driver == ptm_driver)
devpts_pty_kill(tty->link);
#endif
tty_unlock();
devpts_pty_kill(tty->link);
tty_vhangup(tty->link);
tty_lock();
}
Expand Down Expand Up @@ -439,55 +435,9 @@ static inline void legacy_pty_init(void) { }

/* Unix98 devices */
#ifdef CONFIG_UNIX98_PTYS
/*
* sysctl support for setting limits on the number of Unix98 ptys allocated.
* Otherwise one can eat up all kernel memory by opening /dev/ptmx repeatedly.
*/
int pty_limit = NR_UNIX98_PTY_DEFAULT;
static int pty_limit_min;
static int pty_limit_max = NR_UNIX98_PTY_MAX;
static int pty_count;

static struct cdev ptmx_cdev;

static struct ctl_table pty_table[] = {
{
.procname = "max",
.maxlen = sizeof(int),
.mode = 0644,
.data = &pty_limit,
.proc_handler = proc_dointvec_minmax,
.extra1 = &pty_limit_min,
.extra2 = &pty_limit_max,
}, {
.procname = "nr",
.maxlen = sizeof(int),
.mode = 0444,
.data = &pty_count,
.proc_handler = proc_dointvec,
},
{}
};

static struct ctl_table pty_kern_table[] = {
{
.procname = "pty",
.mode = 0555,
.child = pty_table,
},
{}
};

static struct ctl_table pty_root_table[] = {
{
.procname = "kernel",
.mode = 0555,
.child = pty_kern_table,
},
{}
};


static int pty_unix98_ioctl(struct tty_struct *tty,
unsigned int cmd, unsigned long arg)
{
Expand Down Expand Up @@ -515,10 +465,8 @@ static int pty_unix98_ioctl(struct tty_struct *tty,
static struct tty_struct *ptm_unix98_lookup(struct tty_driver *driver,
struct inode *ptm_inode, int idx)
{
struct tty_struct *tty = devpts_get_tty(ptm_inode, idx);
if (tty)
tty = tty->link;
return tty;
/* Master must be open via /dev/ptmx */
return ERR_PTR(-EIO);
}

/**
Expand Down Expand Up @@ -589,7 +537,6 @@ static int pty_unix98_install(struct tty_driver *driver, struct tty_struct *tty)
*/
tty_driver_kref_get(driver);
tty->count++;
pty_count++;
return 0;
err_free_mem:
deinitialize_tty_struct(o_tty);
Expand All @@ -603,7 +550,6 @@ static int pty_unix98_install(struct tty_driver *driver, struct tty_struct *tty)

static void ptm_unix98_remove(struct tty_driver *driver, struct tty_struct *tty)
{
pty_count--;
}

static void pts_unix98_remove(struct tty_driver *driver, struct tty_struct *tty)
Expand Down Expand Up @@ -667,17 +613,15 @@ static int ptmx_open(struct inode *inode, struct file *filp)
return retval;

/* find a device that is not in use. */
tty_lock();
index = devpts_new_index(inode);
tty_unlock();
if (index < 0) {
retval = index;
goto err_file;
}

mutex_lock(&tty_mutex);
tty_lock();
tty = tty_init_dev(ptm_driver, index, 1);
tty = tty_init_dev(ptm_driver, index);
mutex_unlock(&tty_mutex);

if (IS_ERR(tty)) {
Expand All @@ -704,8 +648,8 @@ static int ptmx_open(struct inode *inode, struct file *filp)
tty_release(inode, filp);
return retval;
out:
devpts_kill_index(inode, index);
tty_unlock();
devpts_kill_index(inode, index);
err_file:
tty_free_file(filp);
return retval;
Expand Down Expand Up @@ -762,8 +706,6 @@ static void __init unix98_pty_init(void)
if (tty_register_driver(pts_driver))
panic("Couldn't register Unix98 pts driver");

register_sysctl_table(pty_root_table);

/* Now create the /dev/ptmx special device */
tty_default_fops(&ptmx_fops);
ptmx_fops.open = ptmx_open;
Expand Down
4 changes: 2 additions & 2 deletions drivers/tty/serial/21285.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ static int serial21285_verify_port(struct uart_port *port, struct serial_struct
int ret = 0;
if (ser->type != PORT_UNKNOWN && ser->type != PORT_21285)
ret = -EINVAL;
if (ser->irq != NO_IRQ)
if (ser->irq <= 0)
ret = -EINVAL;
if (ser->baud_base != port->uartclk / 16)
ret = -EINVAL;
Expand Down Expand Up @@ -360,7 +360,7 @@ static struct uart_ops serial21285_ops = {
static struct uart_port serial21285_port = {
.mapbase = 0x42000160,
.iotype = UPIO_MEM,
.irq = NO_IRQ,
.irq = 0,
.fifosize = 16,
.ops = &serial21285_ops,
.flags = UPF_BOOT_AUTOCONF,
Expand Down
21 changes: 7 additions & 14 deletions drivers/tty/serial/8250/8250.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,6 @@ static unsigned int skip_txen_test; /* force skip of txen test at init time */
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)


/*
* We default to IRQ0 for the "no irq" hack. Some
* machine types want others as well - they're free
* to redefine this in their header file.
*/
#define is_real_interrupt(irq) ((irq) != 0)

#ifdef CONFIG_SERIAL_8250_DETECT_IRQ
#define CONFIG_SERIAL_DETECT_IRQ 1
#endif
Expand Down Expand Up @@ -1750,7 +1743,7 @@ static void serial8250_backup_timeout(unsigned long data)
* Must disable interrupts or else we risk racing with the interrupt
* based handler.
*/
if (is_real_interrupt(up->port.irq)) {
if (up->port.irq) {
ier = serial_in(up, UART_IER);
serial_out(up, UART_IER, 0);
}
Expand All @@ -1775,7 +1768,7 @@ static void serial8250_backup_timeout(unsigned long data)
if (!(iir & UART_IIR_NO_INT))
serial8250_tx_chars(up);

if (is_real_interrupt(up->port.irq))
if (up->port.irq)
serial_out(up, UART_IER, ier);

spin_unlock_irqrestore(&up->port.lock, flags);
Expand Down Expand Up @@ -2028,7 +2021,7 @@ static int serial8250_startup(struct uart_port *port)
serial_outp(up, UART_LCR, 0);
}

if (is_real_interrupt(up->port.irq)) {
if (up->port.irq) {
unsigned char iir1;
/*
* Test for UARTs that do not reassert THRE when the
Expand Down Expand Up @@ -2083,7 +2076,7 @@ static int serial8250_startup(struct uart_port *port)
* hardware interrupt, we use a timer-based system. The original
* driver used to do this with IRQ0.
*/
if (!is_real_interrupt(up->port.irq)) {
if (!up->port.irq) {
up->timer.data = (unsigned long)up;
mod_timer(&up->timer, jiffies + uart_poll_timeout(port));
} else {
Expand All @@ -2099,13 +2092,13 @@ static int serial8250_startup(struct uart_port *port)

spin_lock_irqsave(&up->port.lock, flags);
if (up->port.flags & UPF_FOURPORT) {
if (!is_real_interrupt(up->port.irq))
if (!up->port.irq)
up->port.mctrl |= TIOCM_OUT1;
} else
/*
* Most PC uarts need OUT2 raised to enable interrupts.
*/
if (is_real_interrupt(up->port.irq))
if (up->port.irq)
up->port.mctrl |= TIOCM_OUT2;

serial8250_set_mctrl(&up->port, up->port.mctrl);
Expand Down Expand Up @@ -2223,7 +2216,7 @@ static void serial8250_shutdown(struct uart_port *port)

del_timer_sync(&up->timer);
up->timer.function = serial8250_timeout;
if (is_real_interrupt(up->port.irq))
if (up->port.irq)
serial_unlink_irq_chain(up);
}

Expand Down
Loading

0 comments on commit 5a22e30

Please sign in to comment.