Message ID | 1507880904-31956-9-git-send-email-cw00.choi@samsung.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Fri, Oct 13, 2017 at 4:48 PM, Chanwoo Choi <cw00.choi@samsung.com> wrote: > This patch registers the Exynos Bus-Frequency scaling device > as a cooling device of thermal management. > > Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> > Cc: Kukjin Kim <kgene@kernel.org> > Cc: Krzysztof Kozlowski <krzk@kernel.org> > Cc: linux-samsung-soc@vger.kernel.org > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org I've got a question below. > --- > drivers/devfreq/exynos-bus.c | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c > index c25658b26598..1c7521b65c2f 100644 []> @@ -468,6 +471,19 @@ static int exynos_bus_probe(struct platform_device *pdev) > goto err; > } > > + /* > + * Register devfreq cooling device if thermal DT code > + * takes care of matching them. > + */ > + if (of_find_property(np, "#cooling-cells", NULL)) { > + bus->cdev = of_devfreq_cooling_register(np, bus->devfreq); > + if (IS_ERR(bus->cdev)) { > + dev_err(dev, "running exynos-bus without cooling device\n"); > + bus->cdev = NULL; > + } > + } > + of_node_put(np); Is this of_node_put() is a pair of of_find_property? or for something else? (do you need to call put for of_find_property? or for something else? I'm not seeing a function with "get") Cheers, MyungJoo
Hi, On 2017년 10월 18일 00:11, MyungJoo Ham wrote: > On Fri, Oct 13, 2017 at 4:48 PM, Chanwoo Choi <cw00.choi@samsung.com> wrote: >> This patch registers the Exynos Bus-Frequency scaling device >> as a cooling device of thermal management. >> >> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> >> Cc: Kukjin Kim <kgene@kernel.org> >> Cc: Krzysztof Kozlowski <krzk@kernel.org> >> Cc: linux-samsung-soc@vger.kernel.org >> Cc: linux-arm-kernel@lists.infradead.org >> Cc: linux-kernel@vger.kernel.org > > I've got a question below. > >> --- >> drivers/devfreq/exynos-bus.c | 27 +++++++++++++++++++++++++++ >> 1 file changed, 27 insertions(+) >> >> diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c >> index c25658b26598..1c7521b65c2f 100644 > []> @@ -468,6 +471,19 @@ static int exynos_bus_probe(struct > platform_device *pdev) >> goto err; >> } >> >> + /* >> + * Register devfreq cooling device if thermal DT code >> + * takes care of matching them. >> + */ >> + if (of_find_property(np, "#cooling-cells", NULL)) { >> + bus->cdev = of_devfreq_cooling_register(np, bus->devfreq); >> + if (IS_ERR(bus->cdev)) { >> + dev_err(dev, "running exynos-bus without cooling device\n"); >> + bus->cdev = NULL; >> + } >> + } >> + of_node_put(np); > > Is this of_node_put() is a pair of of_find_property? or for something else? > (do you need to call put for of_find_property? or for something else? > I'm not seeing a function with "get") You're right. The of_node_put(np) call is unneeded. Actually, the extcon-bus.c have to use the of_node_get instead of accessing the 'dev->of_node' directly. And, when I test this patch, I got a bug related to passive governor. I need more time for debugging and redevelopment. So, I'll drop this patch on next patchset (v5).
diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c index c25658b26598..1c7521b65c2f 100644 --- a/drivers/devfreq/exynos-bus.c +++ b/drivers/devfreq/exynos-bus.c @@ -15,6 +15,7 @@ #include <linux/clk.h> #include <linux/devfreq.h> #include <linux/devfreq-event.h> +#include <linux/devfreq_cooling.h> #include <linux/device.h> #include <linux/export.h> #include <linux/module.h> @@ -41,6 +42,8 @@ struct exynos_bus { struct clk *clk; unsigned int voltage_tolerance; unsigned int ratio; + + struct thermal_cooling_device *cdev; }; /* @@ -468,6 +471,19 @@ static int exynos_bus_probe(struct platform_device *pdev) goto err; } + /* + * Register devfreq cooling device if thermal DT code + * takes care of matching them. + */ + if (of_find_property(np, "#cooling-cells", NULL)) { + bus->cdev = of_devfreq_cooling_register(np, bus->devfreq); + if (IS_ERR(bus->cdev)) { + dev_err(dev, "running exynos-bus without cooling device\n"); + bus->cdev = NULL; + } + } + of_node_put(np); + goto out; passive: /* Initialize the struct profile and governor data for passive device */ @@ -514,6 +530,16 @@ static int exynos_bus_probe(struct platform_device *pdev) return ret; } +static int exynos_bus_remove(struct platform_device *pdev) +{ + struct exynos_bus *bus = platform_get_drvdata(pdev); + + if (bus->cdev) + devfreq_cooling_unregister(bus->cdev); + + return 0; +} + #ifdef CONFIG_PM_SLEEP static int exynos_bus_resume(struct device *dev) { @@ -556,6 +582,7 @@ static int exynos_bus_suspend(struct device *dev) static struct platform_driver exynos_bus_platdrv = { .probe = exynos_bus_probe, + .remove = exynos_bus_remove, .driver = { .name = "exynos-bus", .pm = &exynos_bus_pm,
This patch registers the Exynos Bus-Frequency scaling device as a cooling device of thermal management. Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> Cc: Kukjin Kim <kgene@kernel.org> Cc: Krzysztof Kozlowski <krzk@kernel.org> Cc: linux-samsung-soc@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org --- drivers/devfreq/exynos-bus.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)