Merge branch 'i2c/precise-locking-names_immutable' into i2c/for-4.19
authorWolfram Sang <wsa@the-dreams.de>
Thu, 12 Jul 2018 22:12:53 +0000 (00:12 +0200)
committerWolfram Sang <wsa@the-dreams.de>
Thu, 12 Jul 2018 22:12:53 +0000 (00:12 +0200)
1  2 
drivers/i2c/busses/i2c-gpio.c
drivers/i2c/muxes/i2c-mux-pca9541.c
include/linux/i2c.h

@@@ -101,13 -101,19 +101,13 @@@ DEFINE_DEBUGFS_ATTRIBUTE(fops_##wire, f
  WIRE_ATTRIBUTE(scl);
  WIRE_ATTRIBUTE(sda);
  
 -static int fops_incomplete_transfer_set(void *data, u64 addr)
 +static void i2c_gpio_incomplete_transfer(struct i2c_gpio_private_data *priv,
 +                                      u32 pattern, u8 pattern_size)
  {
 -      struct i2c_gpio_private_data *priv = data;
        struct i2c_algo_bit_data *bit_data = &priv->bit_data;
 -      int i, pattern;
 -
 -      if (addr > 0x7f)
 -              return -EINVAL;
 -
 -      /* ADDR (7 bit) + RD (1 bit) + SDA hi (1 bit) */
 -      pattern = (addr << 2) | 3;
 +      int i;
  
-       i2c_lock_adapter(&priv->adap);
+       i2c_lock_bus(&priv->adap, I2C_LOCK_ROOT_ADAPTER);
  
        /* START condition */
        setsda(bit_data, 0);
                udelay(bit_data->udelay);
        }
  
-       i2c_unlock_adapter(&priv->adap);
+       i2c_unlock_bus(&priv->adap, I2C_LOCK_ROOT_ADAPTER);
 +}
 +
 +static int fops_incomplete_addr_phase_set(void *data, u64 addr)
 +{
 +      struct i2c_gpio_private_data *priv = data;
 +      u32 pattern;
 +
 +      if (addr > 0x7f)
 +              return -EINVAL;
 +
 +      /* ADDR (7 bit) + RD (1 bit) + Client ACK, keep SDA hi (1 bit) */
 +      pattern = (addr << 2) | 3;
 +
 +      i2c_gpio_incomplete_transfer(priv, pattern, 9);
 +
 +      return 0;
 +}
 +DEFINE_DEBUGFS_ATTRIBUTE(fops_incomplete_addr_phase, NULL, fops_incomplete_addr_phase_set, "%llu\n");
 +
 +static int fops_incomplete_write_byte_set(void *data, u64 addr)
 +{
 +      struct i2c_gpio_private_data *priv = data;
 +      u32 pattern;
 +
 +      if (addr > 0x7f)
 +              return -EINVAL;
 +
 +      /* ADDR (7 bit) + WR (1 bit) + Client ACK (1 bit) */
 +      pattern = (addr << 2) | 1;
 +      /* 0x00 (8 bit) + Client ACK, keep SDA hi (1 bit) */
 +      pattern = (pattern << 9) | 1;
 +
 +      i2c_gpio_incomplete_transfer(priv, pattern, 18);
  
        return 0;
  }
Simple merge
Simple merge