Merge tag 'char-misc-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
Linus Torvalds [Thu, 21 Feb 2013 21:57:13 +0000 (13:57 -0800)]
Pull char/misc driver patches from Greg Kroah-Hartman:
 "Here's the big char/misc driver patches for 3.9-rc1.

  Nothing major here, just lots of different driver updates (mei,
  hyperv, ipack, extcon, vmci, etc.).

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

* tag 'char-misc-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (209 commits)
  w1: w1_therm: Add force-pullup option for "broken" sensors
  w1: ds2482: Added 1-Wire pull-up support to the driver
  vme: add missing put_device() after device_register() fails
  extcon: max8997: Use workqueue to check cable state after completing boot of platform
  extcon: max8997: Set default UART/USB path on probe
  extcon: max8997: Consolidate duplicate code for checking ADC/CHG cable type
  extcon: max8997: Set default of ADC debounce time during initialization
  extcon: max8997: Remove duplicate code related to set H/W line path
  extcon: max8997: Move defined constant to header file
  extcon: max77693: Make max77693_extcon_cable static
  extcon: max8997: Remove unreachable code
  extcon: max8997: Make max8997_extcon_cable static
  extcon: max77693: Remove unnecessary goto statement to improve readability
  extcon: max77693: Convert to devm_input_allocate_device()
  extcon: gpio: Rename filename of extcon-gpio.c according to kernel naming style
  CREDITS: update email and address of Harald Hoyer
  extcon: arizona: Use MICDET for final microphone identification
  extcon: arizona: Always take the first HPDET reading as the final one
  extcon: arizona: Clear _trig_sts bits after jack detection
  extcon: arizona: Don't HPDET magic when headphones are enabled
  ...

12 files changed:
1  2 
MAINTAINERS
drivers/Kconfig
drivers/Makefile
drivers/char/hw_random/exynos-rng.c
drivers/char/pcmcia/synclink_cs.c
drivers/ipack/devices/ipoctal.c
drivers/mfd/wm5102-tables.c
drivers/misc/Kconfig
drivers/mmc/host/Kconfig
drivers/net/Kconfig
drivers/net/hyperv/netvsc_drv.c
include/linux/mfd/arizona/pdata.h

diff --cc MAINTAINERS
Simple merge
diff --cc drivers/Kconfig
Simple merge
Simple merge
Simple merge
@@@ -765,8 -771,11 +771,8 @@@ static void bh_handler(struct work_stru
        struct tty_struct *tty;
        int action;
  
 -      if (!info)
 -              return;
 -
        if (debug_level >= DEBUG_LEVEL_BH)
-               printk( "%s(%d):bh_handler(%s) entry\n",
+               printk("%s(%d):bh_handler(%s) entry\n",
                        __FILE__,__LINE__,info->device_name);
  
        info->bh_running = true;
@@@ -889,8 -898,16 +896,8 @@@ static void rx_ready_async(MGSLPC_INFO 
        unsigned char data, status, flag;
        int fifo_count;
        int work = 0;
-       struct mgsl_icount *icount = &info->icount;
+       struct mgsl_icount *icount = &info->icount;
  
 -      if (!tty) {
 -              /* tty is not available anymore */
 -              issue_command(info, CHA, CMD_RXRESET);
 -              if (debug_level >= DEBUG_LEVEL_ISR)
 -                      printk("%s(%d):rx_ready_async(tty=NULL)\n", __FILE__, __LINE__);
 -              return;
 -      }
 -
        if (tcd) {
                /* early termination, get FIFO count from RBCL register */
                fifo_count = (unsigned char)(read_reg(info, CHA+RBCL) & 0x1f);
@@@ -1342,8 -1359,8 +1349,8 @@@ static void shutdown(MGSLPC_INFO * info
        /* TODO:disable interrupts instead of reset to preserve signal states */
        reset_device(info);
  
-       if (!tty || tty->termios.c_cflag & HUPCL) {
+       if (!tty || tty->termios.c_cflag & HUPCL) {
 -              info->serial_signals &= ~(SerialSignal_DTR + SerialSignal_RTS);
 +              info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
                set_signals(info);
        }
  
@@@ -1405,12 -1422,12 +1412,12 @@@ static void mgslpc_change_params(MGSLPC
  
        cflag = tty->termios.c_cflag;
  
 -      /* if B0 rate (hangup) specified then negate DTR and RTS */
 -      /* otherwise assert DTR and RTS */
 +      /* if B0 rate (hangup) specified then negate RTS and DTR */
 +      /* otherwise assert RTS and DTR */
-       if (cflag & CBAUD)
+       if (cflag & CBAUD)
 -              info->serial_signals |= SerialSignal_RTS + SerialSignal_DTR;
 +              info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR;
        else
 -              info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR);
 +              info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
  
        /* byte size and parity */
  
@@@ -2301,10 -2318,10 +2308,10 @@@ static void mgslpc_set_termios(struct t
        /* Handle transition to B0 status */
        if (old_termios->c_cflag & CBAUD &&
            !(tty->termios.c_cflag & CBAUD)) {
 -              info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR);
 +              info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
-               spin_lock_irqsave(&info->lock,flags);
-               set_signals(info);
-               spin_unlock_irqrestore(&info->lock,flags);
+               spin_lock_irqsave(&info->lock, flags);
+               set_signals(info);
+               spin_unlock_irqrestore(&info->lock, flags);
        }
  
        /* Handle transition away from B0 status */
@@@ -2462,13 -2479,13 +2469,13 @@@ static void dtr_rts(struct tty_port *po
        MGSLPC_INFO *info = container_of(port, MGSLPC_INFO, port);
        unsigned long flags;
  
-       spin_lock_irqsave(&info->lock,flags);
+       spin_lock_irqsave(&info->lock, flags);
        if (onoff)
 -              info->serial_signals |= SerialSignal_RTS + SerialSignal_DTR;
 +              info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR;
        else
 -              info->serial_signals &= ~SerialSignal_RTS + SerialSignal_DTR;
 +              info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
        set_signals(info);
-       spin_unlock_irqrestore(&info->lock,flags);
+       spin_unlock_irqrestore(&info->lock, flags);
  }
  
  
@@@ -133,11 -123,11 +123,11 @@@ static int ipoctal_get_icount(struct tt
        return 0;
  }
  
 -static void ipoctal_irq_rx(struct ipoctal_channel *channel,
 -                         struct tty_struct *tty, u8 sr)
 +static void ipoctal_irq_rx(struct ipoctal_channel *channel, u8 sr)
  {
 +      struct tty_port *port = &channel->tty_port;
        unsigned char value;
-       unsigned char flag = TTY_NORMAL;
+       unsigned char flag;
        u8 isr;
  
        do {
@@@ -208,11 -188,13 +188,8 @@@ static void ipoctal_irq_tx(struct ipoct
  static void ipoctal_irq_channel(struct ipoctal_channel *channel)
  {
        u8 isr, sr;
 -      struct tty_struct *tty;
 -
 -      tty = tty_port_tty_get(&channel->tty_port);
 -      if (!tty)
 -              return;
  
-       /* If there is no client, skip the check */
-       if (!atomic_read(&channel->open))
-               return;
+       spin_lock(&channel->lock);
        /* The HW is organized in pair of channels.  See which register we need
         * to read from */
        isr = ioread8(&channel->block_regs->r.isr);
        if ((isr & channel->isr_tx_rdy_mask) && (sr & SR_TX_READY))
                ipoctal_irq_tx(channel);
  
-       tty_flip_buffer_push(&channel->tty_port);
 -      tty_kref_put(tty);
+       spin_unlock(&channel->lock);
  }
  
  static irqreturn_t ipoctal_irq_handler(void *arg)
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -98,13 -96,15 +98,22 @@@ struct arizona_pdata 
        /** Pin state for GPIO pins */
        int gpio_defaults[ARIZONA_MAX_GPIO];
  
 +      /**
 +       * Maximum number of channels clocks will be generated for,
 +       * useful for systems where and I2S bus with multiple data
 +       * lines is mastered.
 +       */
 +      int max_channels_clocked[ARIZONA_MAX_AIF];
 +
+       /** GPIO5 is used for jack detection */
+       bool jd_gpio5;
+       /** Use the headphone detect circuit to identify the accessory */
+       bool hpdet_acc_id;
+       /** GPIO used for mic isolation with HPDET */
+       int hpdet_id_gpio;
        /** GPIO for mic detection polarity */
        int micd_pol_gpio;