Merge branch 'pm-devfreq'
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 25 Jul 2016 11:45:11 +0000 (13:45 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 25 Jul 2016 11:45:11 +0000 (13:45 +0200)
* pm-devfreq:
  PM / devfreq: exynos-bus: add missing of_node_put after calling of_parse_phandle
  PM / devfreq: add missing of_node_put after calling of_parse_phandle
  PM / devfreq: exynos-ppmu: fix error path in exynos_ppmu_probe()
  PM / devfreq: exynos: fix error path in exynos_bus_probe()
  PM / devfreq: make event/exynos-ppmu DEVFREQ_EVENT_EXYNOS_PPMU tristate
  PM / devfreq: make event/exynos-nocp DEVFREQ_EVENT_EXYNOS_NOCP tristate
  PM / devfreq: make exynos-bus ARM_EXYNOS_BUS_DEVFREQ tristate
  PM / devfreq: make devfreq-event explicitly non-modular
  PM / devfreq: make devfreq explicitly non-modular

drivers/devfreq/Kconfig
drivers/devfreq/devfreq-event.c
drivers/devfreq/devfreq.c
drivers/devfreq/event/Kconfig
drivers/devfreq/event/exynos-ppmu.c
drivers/devfreq/exynos-bus.c

index 78dac0e..a5be56e 100644 (file)
@@ -75,7 +75,7 @@ config DEVFREQ_GOV_PASSIVE
 comment "DEVFREQ Drivers"
 
 config ARM_EXYNOS_BUS_DEVFREQ
-       bool "ARM EXYNOS Generic Memory Bus DEVFREQ Driver"
+       tristate "ARM EXYNOS Generic Memory Bus DEVFREQ Driver"
        depends on ARCH_EXYNOS
        select DEVFREQ_GOV_SIMPLE_ONDEMAND
        select DEVFREQ_GOV_PASSIVE
index 39b048e..9aea2c7 100644 (file)
@@ -15,7 +15,7 @@
 #include <linux/kernel.h>
 #include <linux/err.h>
 #include <linux/init.h>
-#include <linux/module.h>
+#include <linux/export.h>
 #include <linux/slab.h>
 #include <linux/list.h>
 #include <linux/of.h>
@@ -481,13 +481,3 @@ static int __init devfreq_event_init(void)
        return 0;
 }
 subsys_initcall(devfreq_event_init);
-
-static void __exit devfreq_event_exit(void)
-{
-       class_destroy(devfreq_event_class);
-}
-module_exit(devfreq_event_exit);
-
-MODULE_AUTHOR("Chanwoo Choi <cw00.choi@samsung.com>");
-MODULE_DESCRIPTION("DEVFREQ-Event class support");
-MODULE_LICENSE("GPL");
index e92418f..478006b 100644 (file)
@@ -15,7 +15,7 @@
 #include <linux/errno.h>
 #include <linux/err.h>
 #include <linux/init.h>
-#include <linux/module.h>
+#include <linux/export.h>
 #include <linux/slab.h>
 #include <linux/stat.h>
 #include <linux/pm_opp.h>
@@ -707,10 +707,12 @@ struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
                if (devfreq->dev.parent
                        && devfreq->dev.parent->of_node == node) {
                        mutex_unlock(&devfreq_list_lock);
+                       of_node_put(node);
                        return devfreq;
                }
        }
        mutex_unlock(&devfreq_list_lock);
+       of_node_put(node);
 
        return ERR_PTR(-EPROBE_DEFER);
 }
@@ -1199,13 +1201,6 @@ static int __init devfreq_init(void)
 }
 subsys_initcall(devfreq_init);
 
-static void __exit devfreq_exit(void)
-{
-       class_destroy(devfreq_class);
-       destroy_workqueue(devfreq_wq);
-}
-module_exit(devfreq_exit);
-
 /*
  * The followings are helper functions for devfreq user device drivers with
  * OPP framework.
@@ -1471,7 +1466,3 @@ void devm_devfreq_unregister_notifier(struct device *dev,
                               devm_devfreq_dev_match, devfreq));
 }
 EXPORT_SYMBOL(devm_devfreq_unregister_notifier);
-
-MODULE_AUTHOR("MyungJoo Ham <myungjoo.ham@samsung.com>");
-MODULE_DESCRIPTION("devfreq class support");
-MODULE_LICENSE("GPL");
index 1e8b4f4..eb6f74a 100644 (file)
@@ -14,7 +14,7 @@ menuconfig PM_DEVFREQ_EVENT
 if PM_DEVFREQ_EVENT
 
 config DEVFREQ_EVENT_EXYNOS_NOCP
-       bool "EXYNOS NoC (Network On Chip) Probe DEVFREQ event Driver"
+       tristate "EXYNOS NoC (Network On Chip) Probe DEVFREQ event Driver"
        depends on ARCH_EXYNOS
        select PM_OPP
        help
@@ -22,7 +22,7 @@ config DEVFREQ_EVENT_EXYNOS_NOCP
          (Network on Chip) Probe counters to measure the bandwidth of AXI bus.
 
 config DEVFREQ_EVENT_EXYNOS_PPMU
-       bool "EXYNOS PPMU (Platform Performance Monitoring Unit) DEVFREQ event Driver"
+       tristate "EXYNOS PPMU (Platform Performance Monitoring Unit) DEVFREQ event Driver"
        depends on ARCH_EXYNOS
        select PM_OPP
        help
index f312485..845bf25 100644 (file)
@@ -482,7 +482,8 @@ static int exynos_ppmu_probe(struct platform_device *pdev)
        if (!info->edev) {
                dev_err(&pdev->dev,
                        "failed to allocate memory devfreq-event devices\n");
-               return -ENOMEM;
+               ret = -ENOMEM;
+               goto err;
        }
        edev = info->edev;
        platform_set_drvdata(pdev, info);
index 2363d0a..29866f7 100644 (file)
@@ -383,7 +383,7 @@ err_clk:
 static int exynos_bus_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
-       struct device_node *np = dev->of_node;
+       struct device_node *np = dev->of_node, *node;
        struct devfreq_dev_profile *profile;
        struct devfreq_simple_ondemand_data *ondemand_data;
        struct devfreq_passive_data *passive_data;
@@ -407,7 +407,7 @@ static int exynos_bus_probe(struct platform_device *pdev)
        /* Parse the device-tree to get the resource information */
        ret = exynos_bus_parse_of(np, bus);
        if (ret < 0)
-               goto err;
+               return ret;
 
        profile = devm_kzalloc(dev, sizeof(*profile), GFP_KERNEL);
        if (!profile) {
@@ -415,10 +415,13 @@ static int exynos_bus_probe(struct platform_device *pdev)
                goto err;
        }
 
-       if (of_parse_phandle(dev->of_node, "devfreq", 0))
+       node = of_parse_phandle(dev->of_node, "devfreq", 0);
+       if (node) {
+               of_node_put(node);
                goto passive;
-       else
+       } else {
                ret = exynos_bus_parent_parse_of(np, bus);
+       }
 
        if (ret < 0)
                goto err;