struct resource r[2];
                struct fsl_i2c_platform_data i2c_data;
                const unsigned char *flags = NULL;
+               int idx;
+               const u32 *iprop;
 
                memset(&r, 0, sizeof(r));
                memset(&i2c_data, 0, sizeof(i2c_data));
 
                of_irq_to_resource(np, 0, &r[1]);
 
-               i2c_dev = platform_device_register_simple("fsl-i2c", i, r, 2);
+               iprop = of_get_property(np, "cell-index", NULL);
+               idx = iprop ? *iprop : i;
+
+               i2c_dev = platform_device_register_simple("fsl-i2c", idx, r, 2);
                if (IS_ERR(i2c_dev)) {
                        ret = PTR_ERR(i2c_dev);
                        goto err;
                if (ret)
                        goto unreg;
 
-               of_register_i2c_devices(np, i++);
+               of_register_i2c_devices(np, idx);
+               i++;
        }
 
        return 0;