Merge tag 'tty-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Linus Torvalds [Mon, 1 Oct 2012 19:26:52 +0000 (12:26 -0700)]
Pull TTY changes from Greg Kroah-Hartman:
 "As we skipped the merge window for 3.6-rc1 for the tty tree,
  everything is now settled down and working properly, so we are ready
  for 3.7-rc1.  Here's the patchset, it's big, but the large changes are
  removing a firmware file and adding a staging tty driver (it depended
  on the tty core changes, so it's going through this tree instead of
  the staging tree.)

  All of these patches have been in the linux-next tree for a while.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>"

Fix up more-or-less trivial conflicts in
 - drivers/char/pcmcia/synclink_cs.c:
    tty NULL dereference fix vs tty_port_cts_enabled() helper function
 - drivers/staging/{Kconfig,Makefile}:
    add-add conflict (dgrp driver added close to other staging drivers)
 - drivers/staging/ipack/devices/ipoctal.c:
    "split ipoctal_channel from iopctal" vs "TTY: use tty_port_register_device"

* tag 'tty-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (235 commits)
  tty/serial: Add kgdb_nmi driver
  tty/serial/amba-pl011: Quiesce interrupts in poll_get_char
  tty/serial/amba-pl011: Implement poll_init callback
  tty/serial/core: Introduce poll_init callback
  kdb: Turn KGDB_KDB=n stubs into static inlines
  kdb: Implement disable_nmi command
  kernel/debug: Mask KGDB NMI upon entry
  serial: pl011: handle corruption at high clock speeds
  serial: sccnxp: Make 'default' choice in switch last
  serial: sccnxp: Remove mask termios caps for SW flow control
  serial: sccnxp: Report actual baudrate back to core
  serial: samsung: Add poll_get_char & poll_put_char
  Powerpc 8xx CPM_UART setting MAXIDL register proportionaly to baud rate
  Powerpc 8xx CPM_UART maxidl should not depend on fifo size
  Powerpc 8xx CPM_UART too many interrupts
  Powerpc 8xx CPM_UART desynchronisation
  serial: set correct baud_base for EXSYS EX-41092 Dual 16950
  serial: omap: fix the reciever line error case
  8250: blacklist Winbond CIR port
  8250_pnp: do pnp probe before legacy probe
  ...

1  2 
drivers/char/pcmcia/synclink_cs.c
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/ipack/devices/ipoctal.c
drivers/staging/serqt_usb2/serqt_usb2.c
drivers/tty/serial/8250/8250_pci.c

@@@ -1058,7 -1050,7 +1058,7 @@@ static void cts_change(MGSLPC_INFO *inf
        wake_up_interruptible(&info->status_event_wait_q);
        wake_up_interruptible(&info->event_wait_q);
  
-       if (tty && (info->port.flags & ASYNC_CTS_FLOW)) {
 -      if (tty_port_cts_enabled(&info->port)) {
++      if (tty && tty_port_cts_enabled(&info->port)) {
                if (tty->hw_stopped) {
                        if (info->serial_signals & SerialSignal_CTS) {
                                if (debug_level >= DEBUG_LEVEL_ISR)
@@@ -134,12 -136,6 +134,14 @@@ source "drivers/staging/csr/Kconfig
  
  source "drivers/staging/omap-thermal/Kconfig"
  
 +source "drivers/staging/ramster/Kconfig"
 +
 +source "drivers/staging/silicom/Kconfig"
 +
 +source "drivers/staging/ced1401/Kconfig"
 +
 +source "drivers/staging/imx-drm/Kconfig"
 +
+ source "drivers/staging/dgrp/Kconfig"
  endif # STAGING
@@@ -59,7 -60,4 +59,8 @@@ obj-$(CONFIG_USB_G_CCG)               += ccg
  obj-$(CONFIG_WIMAX_GDM72XX)   += gdm72xx/
  obj-$(CONFIG_CSR_WIFI)                += csr/
  obj-$(CONFIG_OMAP_BANDGAP)    += omap-thermal/
 +obj-$(CONFIG_ZCACHE2)         += ramster/
 +obj-$(CONFIG_NET_VENDOR_SILICOM)      += silicom/
 +obj-$(CONFIG_CED1401)         += ced1401/
 +obj-$(CONFIG_DRM_IMX)         += imx-drm/
+ obj-$(CONFIG_DGRP)            += dgrp/
@@@ -429,26 -490,19 +429,26 @@@ static int ipoctal_inst_slot(struct ipo
        ipoctal->tty_drv = tty;
  
        for (i = 0; i < NR_CHANNELS; i++) {
 -              tty_port_init(&ipoctal->tty_port[i]);
 -              tty_port_alloc_xmit_buf(&ipoctal->tty_port[i]);
 -              ipoctal->tty_port[i].ops = &ipoctal_tty_port_ops;
 -
 -              ipoctal_reset_stats(&ipoctal->chan_stats[i]);
 -              ipoctal->nb_bytes[i] = 0;
 -              init_waitqueue_head(&ipoctal->queue[i]);
 -
 -              spin_lock_init(&ipoctal->lock[i]);
 -              ipoctal->pointer_read[i] = 0;
 -              ipoctal->pointer_write[i] = 0;
 -              ipoctal->nb_bytes[i] = 0;
 -              tty_port_register_device(&ipoctal->tty_port[i], tty, i, NULL);
 +              struct device *tty_dev;
 +
 +              channel = &ipoctal->channel[i];
 +              tty_port_init(&channel->tty_port);
 +              tty_port_alloc_xmit_buf(&channel->tty_port);
 +              channel->tty_port.ops = &ipoctal_tty_port_ops;
 +
 +              ipoctal_reset_stats(&channel->stats);
 +              channel->nb_bytes = 0;
 +              init_waitqueue_head(&channel->queue);
 +
 +              spin_lock_init(&channel->lock);
 +              channel->pointer_read = 0;
 +              channel->pointer_write = 0;
-               tty_dev = tty_register_device(tty, i, NULL);
++              tty_dev = tty_port_register_device(&channel->tty_port, tty, i, NULL);
 +              if (IS_ERR(tty_dev)) {
 +                      dev_err(&ipoctal->dev->dev, "Failed to register tty device.\n");
 +                      continue;
 +              }
 +              dev_set_drvdata(tty_dev, channel);
  
                /*
                 * Enable again the RX. TX will be enabled when
@@@ -540,17 -613,23 +540,17 @@@ static void ipoctal_set_termios(struct 
        unsigned char mr1 = 0;
        unsigned char mr2 = 0;
        unsigned char csr = 0;
 -      unsigned int channel = tty->index;
 -      struct ipoctal *ipoctal = tty->driver_data;
 +      struct ipoctal_channel *channel = tty->driver_data;
        speed_t baud;
  
-       cflag = tty->termios->c_cflag;
+       cflag = tty->termios.c_cflag;
  
        /* Disable and reset everything before change the setup */
 -      ipoctal_write_io_reg(ipoctal, &ipoctal->chan_regs[channel].u.w.cr,
 -                           CR_DISABLE_RX | CR_DISABLE_TX);
 -      ipoctal_write_cr_cmd(ipoctal, &ipoctal->chan_regs[channel].u.w.cr,
 -                           CR_CMD_RESET_RX);
 -      ipoctal_write_cr_cmd(ipoctal, &ipoctal->chan_regs[channel].u.w.cr,
 -                           CR_CMD_RESET_TX);
 -      ipoctal_write_cr_cmd(ipoctal, &ipoctal->chan_regs[channel].u.w.cr,
 -                           CR_CMD_RESET_ERR_STATUS);
 -      ipoctal_write_cr_cmd(ipoctal, &ipoctal->chan_regs[channel].u.w.cr,
 -                           CR_CMD_RESET_MR);
 +      iowrite8(CR_DISABLE_RX | CR_DISABLE_TX, &channel->regs->w.cr);
 +      iowrite8(CR_CMD_RESET_RX, &channel->regs->w.cr);
 +      iowrite8(CR_CMD_RESET_TX, &channel->regs->w.cr);
 +      iowrite8(CR_CMD_RESET_ERR_STATUS, &channel->regs->w.cr);
 +      iowrite8(CR_CMD_RESET_MR, &channel->regs->w.cr);
  
        /* Set Bits per chars */
        switch (cflag & CSIZE) {
Simple merge