i2c: mxc: add fuse check
[oweals/u-boot.git] / drivers / i2c / mxc_i2c.c
index a03c465c8f3ff75393eeab7bb3e2de1de2290f1c..4d6e0e3e759ebdc6553c3b81d6d3f967cf2b5bca 100644 (file)
@@ -19,6 +19,7 @@
 #include <dm/device_compat.h>
 #include <linux/errno.h>
 #include <asm/mach-imx/mxc_i2c.h>
+#include <asm/mach-imx/sys_proto.h>
 #include <asm/io.h>
 #include <i2c.h>
 #include <watchdog.h>
@@ -747,6 +748,14 @@ void bus_i2c_init(int index, int speed, int unused,
                return;
        }
 
+       if (CONFIG_IS_ENABLED(IMX_MODULE_FUSE)) {
+               if (i2c_fused((ulong)mxc_i2c_buses[index].base)) {
+                       printf("SoC fuse indicates I2C@0x%lx is unavailable.\n",
+                              (ulong)mxc_i2c_buses[index].base);
+                       return;
+               }
+       }
+
        /*
         * Warning: Be careful to allow the assignment to a static
         * variable here. This function could be called while U-Boot is
@@ -892,6 +901,14 @@ static int mxc_i2c_probe(struct udevice *bus)
        if (addr == FDT_ADDR_T_NONE)
                return -EINVAL;
 
+       if (CONFIG_IS_ENABLED(IMX_MODULE_FUSE)) {
+               if (i2c_fused((ulong)addr)) {
+                       printf("SoC fuse indicates I2C@0x%lx is unavailable.\n",
+                              (ulong)addr);
+                       return -ENODEV;
+               }
+       }
+
        i2c_bus->base = addr;
        i2c_bus->index = bus->seq;
        i2c_bus->bus = bus;