lockdep: Optimize the memory usage of circular queue
[linux-2.6-microblaze.git] / drivers / mfd / madera-core.c
index 4724c1a..8a8d733 100644 (file)
@@ -44,7 +44,10 @@ static const char * const madera_core_supplies[] = {
 };
 
 static const struct mfd_cell madera_ldo1_devs[] = {
-       { .name = "madera-ldo1", },
+       {
+               .name = "madera-ldo1",
+               .level = MFD_DEP_LEVEL_HIGH,
+       },
 };
 
 static const char * const cs47l15_supplies[] = {
@@ -743,18 +746,22 @@ int madera_dev_exit(struct madera *madera)
        /* Prevent any IRQs being serviced while we clean up */
        disable_irq(madera->irq);
 
-       /*
-        * DCVDD could be supplied by a child node, we must disable it before
-        * removing the children, and prevent PM runtime from turning it back on
-        */
-       pm_runtime_disable(madera->dev);
+       pm_runtime_get_sync(madera->dev);
 
-       clk_disable_unprepare(madera->mclk[MADERA_MCLK2].clk);
+       mfd_remove_devices(madera->dev);
+
+       pm_runtime_disable(madera->dev);
 
        regulator_disable(madera->dcvdd);
        regulator_put(madera->dcvdd);
 
-       mfd_remove_devices(madera->dev);
+       mfd_remove_devices_late(madera->dev);
+
+       pm_runtime_set_suspended(madera->dev);
+       pm_runtime_put_noidle(madera->dev);
+
+       clk_disable_unprepare(madera->mclk[MADERA_MCLK2].clk);
+
        madera_enable_hard_reset(madera);
 
        regulator_bulk_disable(madera->num_core_supplies,