dm: treewide: Rename auto_alloc_size members to be shorter
[platform/kernel/u-boot.git] / drivers / i2c / xilinx_xiic.c
index e4ca0ab..72199a6 100644 (file)
@@ -15,6 +15,7 @@
 #include <i2c.h>
 #include <wait_bit.h>
 #include <asm/io.h>
+#include <dm/device_compat.h>
 
 struct xilinx_xiic_priv {
        void __iomem            *base;
@@ -266,8 +267,20 @@ static void xiic_reinit(struct xilinx_xiic_priv *priv)
 
 static int xilinx_xiic_xfer(struct udevice *dev, struct i2c_msg *msg, int nmsgs)
 {
+       struct xilinx_xiic_priv *priv = dev_get_priv(dev);
        int ret = 0;
 
+       ret = wait_for_bit_8(priv->base + XIIC_SR_REG_OFFSET,
+                            XIIC_SR_BUS_BUSY_MASK, false, 1000, true);
+
+       if (ret == -ETIMEDOUT)
+               dev_err(dev, "timeout waiting for bus not busy condition\n");
+
+       if (ret)
+               return ret;
+
+       xiic_reinit(priv);
+
        for (; nmsgs > 0; nmsgs--, msg++) {
                if (msg->flags & I2C_M_RD)
                        ret = xilinx_xiic_read_common(dev, msg, nmsgs);
@@ -335,6 +348,6 @@ U_BOOT_DRIVER(xilinx_xiic) = {
        .id             = UCLASS_I2C,
        .of_match       = xilinx_xiic_ids,
        .probe          = xilinx_xiic_probe,
-       .priv_auto_alloc_size = sizeof(struct xilinx_xiic_priv),
+       .priv_auto      = sizeof(struct xilinx_xiic_priv),
        .ops            = &xilinx_xiic_ops,
 };