From 6be4cb0755b900fac5322b9ab8b32e6c7c504e8d Mon Sep 17 00:00:00 2001 From: Saravana Kannan Date: Thu, 7 Aug 2014 20:04:45 -0700 Subject: [PATCH] PM / devfreq: devbw: Add suspend/resume APIs Absence of traffic is guaranteed when the device sitting behind a devbw device is suspended. In such cases, it is a waste of power to make non-zero bandwidth votes or to scale the devbw device. So, provide APIs to suspend/resume the devbw device as needed. Change-Id: Id58072aec7a9710eb917f248d9b9bd08d3a1ec6a Signed-off-by: Saravana Kannan --- drivers/devfreq/devfreq_devbw.c | 22 +++++++++++++++++----- include/soc/qcom/devfreq_devbw.h | 10 ++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/drivers/devfreq/devfreq_devbw.c b/drivers/devfreq/devfreq_devbw.c index 091238f253e1..b6b87fc29255 100644 --- a/drivers/devfreq/devfreq_devbw.c +++ b/drivers/devfreq/devfreq_devbw.c @@ -214,11 +214,6 @@ int devfreq_add_devbw(struct device *dev) return 0; } -static int devfreq_devbw_probe(struct platform_device *pdev) -{ - return devfreq_add_devbw(&pdev->dev); -} - int devfreq_remove_devbw(struct device *dev) { struct dev_data *d = dev_get_drvdata(dev); @@ -227,6 +222,23 @@ int devfreq_remove_devbw(struct device *dev) return 0; } +int devfreq_suspend_devbw(struct device *dev) +{ + struct dev_data *d = dev_get_drvdata(dev); + return devfreq_suspend_device(d->df); +} + +int devfreq_resume_devbw(struct device *dev) +{ + struct dev_data *d = dev_get_drvdata(dev); + return devfreq_resume_device(d->df); +} + +static int devfreq_devbw_probe(struct platform_device *pdev) +{ + return devfreq_add_devbw(&pdev->dev); +} + static int devfreq_devbw_remove(struct platform_device *pdev) { return devfreq_remove_devbw(&pdev->dev); diff --git a/include/soc/qcom/devfreq_devbw.h b/include/soc/qcom/devfreq_devbw.h index 77f816cddf6b..7edb2abba487 100644 --- a/include/soc/qcom/devfreq_devbw.h +++ b/include/soc/qcom/devfreq_devbw.h @@ -19,6 +19,8 @@ #ifdef CONFIG_MSM_DEVFREQ_DEVBW int devfreq_add_devbw(struct device *dev); int devfreq_remove_devbw(struct device *dev); +int devfreq_suspend_devbw(struct device *dev); +int devfreq_resume_devbw(struct device *dev); #else static inline int devfreq_add_devbw(struct device *dev) { @@ -28,6 +30,14 @@ static inline int devfreq_remove_devbw(struct device *dev) { return 0; } +static inline int devfreq_suspend_devbw(struct device *dev) +{ + return 0; +} +static inline int devfreq_resume_devbw(struct device *dev) +{ + return 0; +} #endif #endif /* _DEVFREQ_DEVBW_H */