Merge branch 'i2c/for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 19 Oct 2014 19:50:44 +0000 (12:50 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 19 Oct 2014 19:50:44 +0000 (12:50 -0700)
Pull i2c updates from Wolfram Sang:
 "Highlights from the I2C subsystem for 3.18:

   - new drivers for Axxia AM55xx, and Hisilicon hix5hd2 SoC.

   - designware driver gained AMD support, exynos gained exynos7 support

  The rest is usual driver stuff.  Hopefully no lowlights this time"

* 'i2c/for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  i2c: i801: Add Device IDs for Intel Sunrise Point PCH
  i2c: hix5hd2: add i2c controller driver
  i2c-imx: Disable the clock on probe failure
  i2c: designware: Add support for AMD I2C controller
  i2c: designware: Rework probe() to get clock a bit later
  i2c: designware: Default to fast mode in case of ACPI
  i2c: axxia: Add I2C driver for AXM55xx
  i2c: exynos: add support for HSI2C module on Exynos7
  i2c: mxs: detect No Slave Ack on SELECT in PIO mode
  i2c: cros_ec: Remove EC_I2C_FLAG_10BIT
  i2c: cros-ec-tunnel: Add of match table
  i2c: rcar: remove sign-compare flaw
  i2c: ismt: Use minimum descriptor size
  i2c: imx: Add arbitration lost check
  i2c: rk3x: Remove unlikely() annotations
  i2c: rcar: check for no IRQ in rcar_i2c_irq()
  i2c: rcar: make rcar_i2c_prepare_msg() *void*
  i2c: rcar: simplify check for last message
  i2c: designware: add support of platform data to set I2C mode
  i2c: designware: add support of I2C standard mode

1  2 
drivers/i2c/busses/Kconfig
drivers/i2c/busses/i2c-cros-ec-tunnel.c
drivers/i2c/busses/i2c-rk3x.c

index 2e45ae3796f1bae03b685982608e8db23f6da54a,fd5f10a862092bf7cebd7b32d657afc9ace1de7b..917c3585f45bc16123a24e113e3847c17d011ca5
@@@ -77,6 -77,16 +77,16 @@@ config I2C_AMD811
          This driver can also be built as a module.  If so, the module
          will be called i2c-amd8111.
  
+ config I2C_HIX5HD2
+       tristate "Hix5hd2 high-speed I2C driver"
+       depends on ARCH_HIX5HD2
+       help
+         Say Y here to include support for high-speed I2C controller in the
+         Hisilicon based hix5hd2 SoCs.
+         This driver can also be built as a module.  If so, the module
+         will be called i2c-hix5hd2.
  config I2C_I801
        tristate "Intel 82801 (ICH/PCH)"
        depends on PCI
            Wildcat Point (PCH)
            Wildcat Point-LP (PCH)
            BayTrail (SOC)
+           Sunrise Point-H (PCH)
  
          This driver can also be built as a module.  If so, the module
          will be called i2c-i801.
@@@ -337,6 -348,17 +348,17 @@@ config I2C_AU155
          This driver can also be built as a module.  If so, the module
          will be called i2c-au1550.
  
+ config I2C_AXXIA
+       tristate "Axxia I2C controller"
+       depends on ARCH_AXXIA || COMPILE_TEST
+       default ARCH_AXXIA
+       help
+         Say yes if you want to support the I2C bus on Axxia platforms.
+         Please note that this controller is limited to transfers of maximum
+         255 bytes in length. Any attempt to to a larger transfer will return
+         an error.
  config I2C_BCM2835
        tristate "Broadcom BCM2835 I2C controller"
        depends on ARCH_BCM2835
@@@ -357,7 -379,7 +379,7 @@@ config I2C_BCM_KON
          If you say yes to this option, support will be included for the
          I2C interface on the Broadcom Kona family of processors.
  
 -        If you do not need KONA I2C inteface, say N.
 +        If you do not need KONA I2C interface, say N.
  
  config I2C_BLACKFIN_TWI
        tristate "Blackfin TWI I2C support"
@@@ -423,6 -445,7 +445,7 @@@ config I2C_DESIGNWARE_COR
  config I2C_DESIGNWARE_PLATFORM
        tristate "Synopsys DesignWare Platform"
        select I2C_DESIGNWARE_CORE
+       depends on (ACPI && COMMON_CLK) || !ACPI
        help
          If you say yes to this option, support will be included for the
          Synopsys DesignWare I2C adapter. Only master mode is supported.
@@@ -465,7 -488,7 +488,7 @@@ config I2C_EG20
  
  config I2C_EXYNOS5
        tristate "Exynos5 high-speed I2C driver"
-       depends on ARCH_EXYNOS5 && OF
+       depends on ARCH_EXYNOS && OF
        default y
        help
          High-speed I2C controller on Exynos5 based Samsung SoCs.
index 8ca5cbbcec915072cfa8a8de4d9d8df7c708dd82,fc89c13b16325a99ec09015a7a080fc221d19c83..875c22ae54004d4aba33c4a72c4bc398d47ac0a8
@@@ -16,8 -16,6 +16,8 @@@
  #include <linux/platform_device.h>
  #include <linux/slab.h>
  
 +#define I2C_MAX_RETRIES 3
 +
  /**
   * struct ec_i2c_device - Driver data for I2C tunnel
   *
@@@ -96,7 -94,7 +96,7 @@@ static int ec_i2c_construct_message(u8 
                msg->addr_flags = i2c_msg->addr;
  
                if (i2c_msg->flags & I2C_M_TEN)
-                       msg->addr_flags |= EC_I2C_FLAG_10BIT;
+                       return -EINVAL;
  
                if (i2c_msg->flags & I2C_M_RD) {
                        msg->addr_flags |= EC_I2C_FLAG_READ;
@@@ -220,7 -218,9 +220,9 @@@ static int ec_i2c_xfer(struct i2c_adapt
                }
        }
  
-       ec_i2c_construct_message(request, i2c_msgs, num, bus_num);
+       result = ec_i2c_construct_message(request, i2c_msgs, num, bus_num);
+       if (result)
+               goto exit;
  
        msg.version = 0;
        msg.command = EC_CMD_I2C_PASSTHRU;
        msg.indata = response;
        msg.insize = response_len;
  
 -      result = bus->ec->cmd_xfer(bus->ec, &msg);
 +      result = cros_ec_cmd_xfer(bus->ec, &msg);
        if (result < 0)
                goto exit;
  
@@@ -292,7 -292,6 +294,7 @@@ static int ec_i2c_probe(struct platform
        bus->adap.algo_data = bus;
        bus->adap.dev.parent = &pdev->dev;
        bus->adap.dev.of_node = np;
 +      bus->adap.retries = I2C_MAX_RETRIES;
  
        err = i2c_add_adapter(&bus->adap);
        if (err) {
@@@ -313,11 -312,20 +315,20 @@@ static int ec_i2c_remove(struct platfor
        return 0;
  }
  
+ #ifdef CONFIG_OF
+ static const struct of_device_id cros_ec_i2c_of_match[] = {
+       { .compatible = "google,cros-ec-i2c-tunnel" },
+       {},
+ };
+ MODULE_DEVICE_TABLE(of, cros_ec_i2c_of_match);
+ #endif
  static struct platform_driver ec_i2c_tunnel_driver = {
        .probe = ec_i2c_probe,
        .remove = ec_i2c_remove,
        .driver = {
                .name = "cros-ec-i2c-tunnel",
+               .of_match_table = of_match_ptr(cros_ec_i2c_of_match),
        },
  };
  
index b38b0529946a1ca1c0e463f4a25e5cbbf021f329,b41d979656697a4fa4bc1b5ddd2e56d1c70c550a..f486d0eac4d0202e3933f58a87f0537a587ee5ae
@@@ -208,7 -208,7 +208,7 @@@ static void rk3x_i2c_prepare_read(struc
         * The hw can read up to 32 bytes at a time. If we need more than one
         * chunk, send an ACK after the last byte of the current chunk.
         */
-       if (unlikely(len > 32)) {
+       if (len > 32) {
                len = 32;
                con &= ~REG_CON_LASTACK;
        } else {
@@@ -238,7 -238,7 +238,7 @@@ static void rk3x_i2c_fill_transmit_buf(
        for (i = 0; i < 8; ++i) {
                val = 0;
                for (j = 0; j < 4; ++j) {
 -                      if (i2c->processed == i2c->msg->len)
 +                      if ((i2c->processed == i2c->msg->len) && (cnt != 0))
                                break;
  
                        if (i2c->processed == 0 && cnt == 0)
@@@ -403,7 -403,7 +403,7 @@@ static irqreturn_t rk3x_i2c_irq(int irq
        }
  
        /* is there anything left to handle? */
-       if (unlikely((ipd & REG_INT_ALL) == 0))
+       if ((ipd & REG_INT_ALL) == 0)
                goto out;
  
        switch (i2c->state) {