lockdep: Optimize the memory usage of circular queue
[linux-2.6-microblaze.git] / drivers / mfd / madera-core.c
index 7e0835c..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[] = {
@@ -55,8 +58,8 @@ static const char * const cs47l15_supplies[] = {
 
 static const struct mfd_cell cs47l15_devs[] = {
        { .name = "madera-pinctrl", },
-       { .name = "madera-irq" },
-       { .name = "madera-gpio" },
+       { .name = "madera-irq", },
+       { .name = "madera-gpio", },
        {
                .name = "madera-extcon",
                .parent_supplies = cs47l15_supplies,
@@ -108,7 +111,7 @@ static const char * const cs47l85_supplies[] = {
 static const struct mfd_cell cs47l85_devs[] = {
        { .name = "madera-pinctrl", },
        { .name = "madera-irq", },
-       { .name = "madera-micsupp" },
+       { .name = "madera-micsupp", },
        { .name = "madera-gpio", },
        {
                .name = "madera-extcon",
@@ -155,10 +158,10 @@ static const char * const cs47l92_supplies[] = {
 };
 
 static const struct mfd_cell cs47l92_devs[] = {
-       { .name = "madera-pinctrl" },
+       { .name = "madera-pinctrl", },
        { .name = "madera-irq", },
        { .name = "madera-micsupp", },
-       { .name = "madera-gpio" },
+       { .name = "madera-gpio", },
        {
                .name = "madera-extcon",
                .parent_supplies = cs47l92_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,