- compatible           : should be "aspeed,ast2400-i2c-bus"
                          or "aspeed,ast2500-i2c-bus"
 - clocks               : root clock of bus, should reference the APB
-                         clock
+                         clock in the second cell
+- resets               : phandle to reset controller with the reset number in
+                         the second cell
 - interrupts           : interrupt number
 - interrupt-parent     : interrupt controller for bus, should reference a
                          aspeed,ast2400-i2c-ic or aspeed,ast2500-i2c-ic
                #interrupt-cells = <1>;
                reg = <0x40 0x40>;
                compatible = "aspeed,ast2400-i2c-bus";
-               clocks = <&clk_apb>;
+               clocks = <&syscon ASPEED_CLK_APB>;
+               resets = <&syscon ASPEED_RESET_I2C>;
                bus-frequency = <100000>;
                interrupts = <0>;
                interrupt-parent = <&i2c_ic>;
 
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
 #include <linux/platform_device.h>
+#include <linux/reset.h>
 #include <linux/slab.h>
 
 /* I2C Register */
        struct i2c_adapter              adap;
        struct device                   *dev;
        void __iomem                    *base;
+       struct reset_control            *rst;
        /* Synchronizes I/O mem access to base. */
        spinlock_t                      lock;
        struct completion               cmd_complete;
        /* We just need the clock rate, we don't actually use the clk object. */
        devm_clk_put(&pdev->dev, parent_clk);
 
+       bus->rst = devm_reset_control_get_shared(&pdev->dev, NULL);
+       if (IS_ERR(bus->rst)) {
+               dev_err(&pdev->dev,
+                       "missing or invalid reset controller device tree entry");
+               return PTR_ERR(bus->rst);
+       }
+       reset_control_deassert(bus->rst);
+
        ret = of_property_read_u32(pdev->dev.of_node,
                                   "bus-frequency", &bus->bus_frequency);
        if (ret < 0) {
 
        spin_unlock_irqrestore(&bus->lock, flags);
 
+       reset_control_assert(bus->rst);
+
        i2c_del_adapter(&bus->adap);
 
        return 0;