Re: [PATCH v2 02/11] PM / devfreq: Remove devfreq_get_devfreq_by_phandle function

From: Lukasz Luba
Date: Thu Jan 09 2020 - 05:57:13 EST




On 1/9/20 10:54 AM, Chanwoo Choi wrote:
On 1/9/20 7:37 PM, Lukasz Luba wrote:
Hi Chanwoo,

On 12/20/19 12:24 AM, Chanwoo Choi wrote:
Previously, devfreq core support 'devfreq' property in order to get
the devfreq device by phandle. But, 'devfreq' property name is not proper
on devicetree binding because this name doesn't mean the any h/w attribute.

The devfreq core hand over the right to decide the property name
for getting the devfreq device on devicetree. Each devfreq driver
will decide the property name on devicetree binding and then get
the devfreq device by using devfreq_get_devfreq_by_node().

Signed-off-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx>
---
 drivers/devfreq/devfreq.c | 35 -----------------------------------
 drivers/devfreq/exynos-bus.c | 12 +++++++++++-
 include/linux/devfreq.h | 8 --------
 3 files changed, 11 insertions(+), 44 deletions(-)

diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index cb8ca81c8973..c3d3c7c802a0 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -991,48 +991,13 @@ struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node)
 Â return ERR_PTR(-ENODEV);
 }
-
-/*
- * devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree
- * @dev - instance to the given device
- * @index - index into list of devfreq
- *
- * return the instance of devfreq device
- */
-struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
-{
-ÂÂÂ struct device_node *node;
-ÂÂÂ struct devfreq *devfreq;
-
-ÂÂÂ if (!dev)
-ÂÂÂÂÂÂÂ return ERR_PTR(-EINVAL);
-
-ÂÂÂ if (!dev->of_node)
-ÂÂÂÂÂÂÂ return ERR_PTR(-EINVAL);
-
-ÂÂÂ node = of_parse_phandle(dev->of_node, "devfreq", index);
-ÂÂÂ if (!node)
-ÂÂÂÂÂÂÂ return ERR_PTR(-ENODEV);
-
-ÂÂÂ devfreq = devfreq_get_devfreq_by_node(node);
-ÂÂÂ of_node_put(node);
-
-ÂÂÂ return devfreq;
-}
-
 #else
 struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node)
 {
ÂÂÂÂÂ return ERR_PTR(-ENODEV);
 }
-
-struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
-{
-ÂÂÂ return ERR_PTR(-ENODEV);
-}
 #endif /* CONFIG_OF */
 EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_node);
-EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_phandle);
  /**
ÂÂ * devm_devfreq_remove_device() - Resource-managed devfreq_remove_device()
diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c
index 7f5917d59072..1bc4e3c81115 100644
--- a/drivers/devfreq/exynos-bus.c
+++ b/drivers/devfreq/exynos-bus.c
@@ -86,6 +86,16 @@ static int exynos_bus_get_event(struct exynos_bus *bus,
ÂÂÂÂÂ return ret;
 }
 +static struct devfreq *exynos_bus_get_parent_devfreq(struct device_node *np)
+{
+ÂÂÂ struct device_node *node = of_parse_phandle(np, "devfreq", 0);
+
+ÂÂÂ if (!node)
+ÂÂÂÂÂÂÂ return ERR_PTR(-ENODEV);
+
+ÂÂÂ return devfreq_get_devfreq_by_node(node);
+}
+
 /*
ÂÂ * devfreq function for both simple-ondemand and passive governor
ÂÂ */
@@ -353,7 +363,7 @@ static int exynos_bus_profile_init_passive(struct exynos_bus *bus,
ÂÂÂÂÂ profile->exit = exynos_bus_passive_exit;
 Â /* Get the instance of parent devfreq device */
-ÂÂÂ parent_devfreq = devfreq_get_devfreq_by_phandle(dev, 0);
+ÂÂÂ parent_devfreq = exynos_bus_get_parent_devfreq(dev->of_node);
ÂÂÂÂÂ if (IS_ERR(parent_devfreq))
ÂÂÂÂÂÂÂÂÂ return -EPROBE_DEFER;

These changes won't apply, probably I need some base for it.

I developed it on devfreq-next branch[1]
[1] https://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git/log/?h=devfreq-next

And I try to apply these patchset to linux-next[2] with tags/next-20200109.
But, patch10/11 of deviceetree has some merge conflict
because patch[3] related to exynos-bus was merged.
[2] https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/log/
[3] https://patchwork.kernel.org/cover/11303235/
- [v2,0/2] Exynos5422: fix bus related OPPs for Odroid XU3/XU4/HC1

On next version, I'll rebase it on latest patches.

Thank you for the information. I will update the base and continue the
review.

Lukasz