diff options
-rw-r--r-- | drivers/base/power/domain.c | 6 | ||||
-rw-r--r-- | include/linux/pm_domain.h | 2 |
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index cd400575ee0e..2a9f4c5025e3 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c | |||
@@ -1436,6 +1436,9 @@ int __pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev, | |||
1436 | 1436 | ||
1437 | spin_unlock_irq(&dev->power.lock); | 1437 | spin_unlock_irq(&dev->power.lock); |
1438 | 1438 | ||
1439 | if (genpd->attach_dev) | ||
1440 | genpd->attach_dev(dev); | ||
1441 | |||
1439 | mutex_lock(&gpd_data->lock); | 1442 | mutex_lock(&gpd_data->lock); |
1440 | gpd_data->base.dev = dev; | 1443 | gpd_data->base.dev = dev; |
1441 | list_add_tail(&gpd_data->base.list_node, &genpd->dev_list); | 1444 | list_add_tail(&gpd_data->base.list_node, &genpd->dev_list); |
@@ -1528,6 +1531,9 @@ int pm_genpd_remove_device(struct generic_pm_domain *genpd, | |||
1528 | genpd->device_count--; | 1531 | genpd->device_count--; |
1529 | genpd->max_off_time_changed = true; | 1532 | genpd->max_off_time_changed = true; |
1530 | 1533 | ||
1534 | if (genpd->detach_dev) | ||
1535 | genpd->detach_dev(dev); | ||
1536 | |||
1531 | spin_lock_irq(&dev->power.lock); | 1537 | spin_lock_irq(&dev->power.lock); |
1532 | 1538 | ||
1533 | dev->pm_domain = NULL; | 1539 | dev->pm_domain = NULL; |
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 292079d8da6b..9a93e622bdea 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h | |||
@@ -73,6 +73,8 @@ struct generic_pm_domain { | |||
73 | bool cached_power_down_ok; | 73 | bool cached_power_down_ok; |
74 | struct device_node *of_node; /* Node in device tree */ | 74 | struct device_node *of_node; /* Node in device tree */ |
75 | struct gpd_cpu_data *cpu_data; | 75 | struct gpd_cpu_data *cpu_data; |
76 | void (*attach_dev)(struct device *dev); | ||
77 | void (*detach_dev)(struct device *dev); | ||
76 | }; | 78 | }; |
77 | 79 | ||
78 | static inline struct generic_pm_domain *pd_to_genpd(struct dev_pm_domain *pd) | 80 | static inline struct generic_pm_domain *pd_to_genpd(struct dev_pm_domain *pd) |