Messages in this thread | | | Date | Thu, 24 Aug 2017 12:58:55 +0900 | From | Chanwoo Choi <> | Subject | Re: [PATCH 12/12] PM / devfreq: Add opp_notifier_cb() function pointer to support OPP notifier |
| |
Dear all,
On 2017년 08월 24일 10:42, Chanwoo Choi wrote: > The devfreq uses the OPP interface as a mandatory method > and so the devfreq has to support the OPP notifier in order to > catch the OPP events. So, this patch adds the new opp_notifier_cb() > function pointer in the struct devfreq_dev_profile. The user can > add the their own callback function to receive the OPP events. > > Also, the devfreq provides the default OPP notifeir callback > in order to remake the frequency table when OPP events happen. > - default_opp_notifier_cb() > > After merged the commit 0ec09ac2cebe ("PM / devfreq: Set the > freq_table of devfreq device"), if the freq_table is NULL, > the devfreq_add_device() makes the freq_table by using OPP interface. > In this case, the devfreq should handle the freq_table > when OPP events happen such as OPP_EVENT_REMOVE, OPP_EVENT_ADD. > > When the dev_pm_opp_add/remove() are called, the devfreq core > has to remake the frequency table with the changed OPP information > in the default_opp_notifier_cb(). > > Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> > --- > drivers/devfreq/devfreq.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- > include/linux/devfreq.h | 12 ++++++++++++ > 2 files changed, 57 insertions(+), 1 deletion(-) > > diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c > index 7efa867e4aea..d313bed95871 100644 > --- a/drivers/devfreq/devfreq.c > +++ b/drivers/devfreq/devfreq.c > @@ -163,6 +163,39 @@ static int set_freq_table(struct devfreq *devfreq) > return 0; > } > > +static int default_opp_notifier_cb(struct notifier_block *nb, > + unsigned long opp_event, void *opp) > +{ > + struct devfreq *devfreq = container_of(nb, struct devfreq, nb); > + struct devfreq_dev_profile *profile = devfreq->profile; > + struct device *dev = devfreq->dev.parent; > + int ret = 0; > + > + mutex_lock(&devfreq->lock); > + > + switch (opp_event) { > + case OPP_EVENT_ADD: > + case OPP_EVENT_REMOVE: > + /* Free the frequency table */ > + profile->max_state = 0; > + kfree(dev, profile->freq_table);
It is my mistake when changing from devm_kfree to kfree. I'll fix on next patchset.
[ditto]
-- Best Regards, Chanwoo Choi Samsung Electronics
| |