Merge tag 'i2c-for-6.6-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 30 Sep 2023 17:07:33 +0000 (10:07 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 30 Sep 2023 17:07:33 +0000 (10:07 -0700)
Pull i2c fixes from Wolfram Sang:
 "Usual business: a driver fix, a DT fix, a minor core fix"

* tag 'i2c-for-6.6-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  i2c: npcm7xx: Fix callback completion ordering
  i2c: mux: Avoid potential false error message in i2c_mux_add_adapter
  dt-bindings: i2c: mxs: Pass ref and 'unevaluatedProperties: false'

Documentation/devicetree/bindings/i2c/i2c-mxs.yaml
drivers/i2c/busses/i2c-npcm7xx.c
drivers/i2c/i2c-mux.c

index 21ae7bc..171a414 100644 (file)
@@ -9,6 +9,9 @@ title: Freescale MXS Inter IC (I2C) Controller
 maintainers:
   - Shawn Guo <shawnguo@kernel.org>
 
+allOf:
+  - $ref: /schemas/i2c/i2c-controller.yaml#
+
 properties:
   compatible:
     enum:
@@ -37,7 +40,7 @@ required:
   - dmas
   - dma-names
 
-additionalProperties: false
+unevaluatedProperties: false
 
 examples:
   - |
index 495a8b5..ae4bae6 100644 (file)
@@ -694,6 +694,7 @@ static void npcm_i2c_callback(struct npcm_i2c *bus,
 {
        struct i2c_msg *msgs;
        int msgs_num;
+       bool do_complete = false;
 
        msgs = bus->msgs;
        msgs_num = bus->msgs_num;
@@ -722,23 +723,17 @@ static void npcm_i2c_callback(struct npcm_i2c *bus,
                                 msgs[1].flags & I2C_M_RD)
                                msgs[1].len = info;
                }
-               if (completion_done(&bus->cmd_complete) == false)
-                       complete(&bus->cmd_complete);
-       break;
-
+               do_complete = true;
+               break;
        case I2C_NACK_IND:
                /* MASTER transmit got a NACK before tx all bytes */
                bus->cmd_err = -ENXIO;
-               if (bus->master_or_slave == I2C_MASTER)
-                       complete(&bus->cmd_complete);
-
+               do_complete = true;
                break;
        case I2C_BUS_ERR_IND:
                /* Bus error */
                bus->cmd_err = -EAGAIN;
-               if (bus->master_or_slave == I2C_MASTER)
-                       complete(&bus->cmd_complete);
-
+               do_complete = true;
                break;
        case I2C_WAKE_UP_IND:
                /* I2C wake up */
@@ -752,6 +747,8 @@ static void npcm_i2c_callback(struct npcm_i2c *bus,
        if (bus->slave)
                bus->master_or_slave = I2C_SLAVE;
 #endif
+       if (do_complete)
+               complete(&bus->cmd_complete);
 }
 
 static u8 npcm_i2c_fifo_usage(struct npcm_i2c *bus)
index 313904b..57ff09f 100644 (file)
@@ -341,7 +341,7 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc,
                priv->adap.lock_ops = &i2c_parent_lock_ops;
 
        /* Sanity check on class */
-       if (i2c_mux_parent_classes(parent) & class)
+       if (i2c_mux_parent_classes(parent) & class & ~I2C_CLASS_DEPRECATED)
                dev_err(&parent->dev,
                        "Segment %d behind mux can't share classes with ancestors\n",
                        chan_id);