|
@@ -1169,6 +1169,54 @@ int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static void devm_devfreq_opp_release(struct device *dev, void *res)
|
|
|
+{
|
|
|
+ devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * devm_ devfreq_register_opp_notifier()
|
|
|
+ * - Resource-managed devfreq_register_opp_notifier()
|
|
|
+ * @dev: The devfreq user device. (parent of devfreq)
|
|
|
+ * @devfreq: The devfreq object.
|
|
|
+ */
|
|
|
+int devm_devfreq_register_opp_notifier(struct device *dev,
|
|
|
+ struct devfreq *devfreq)
|
|
|
+{
|
|
|
+ struct devfreq **ptr;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ptr = devres_alloc(devm_devfreq_opp_release, sizeof(*ptr), GFP_KERNEL);
|
|
|
+ if (!ptr)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ ret = devfreq_register_opp_notifier(dev, devfreq);
|
|
|
+ if (ret) {
|
|
|
+ devres_free(ptr);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ *ptr = devfreq;
|
|
|
+ devres_add(dev, ptr);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(devm_devfreq_register_opp_notifier);
|
|
|
+
|
|
|
+/**
|
|
|
+ * devm_devfreq_unregister_opp_notifier()
|
|
|
+ * - Resource-managed devfreq_unregister_opp_notifier()
|
|
|
+ * @dev: The devfreq user device. (parent of devfreq)
|
|
|
+ * @devfreq: The devfreq object.
|
|
|
+ */
|
|
|
+void devm_devfreq_unregister_opp_notifier(struct device *dev,
|
|
|
+ struct devfreq *devfreq)
|
|
|
+{
|
|
|
+ WARN_ON(devres_release(dev, devm_devfreq_opp_release,
|
|
|
+ devm_devfreq_dev_match, devfreq));
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(devm_devfreq_unregister_opp_notifier);
|
|
|
+
|
|
|
MODULE_AUTHOR("MyungJoo Ham <myungjoo.ham@samsung.com>");
|
|
|
MODULE_DESCRIPTION("devfreq class support");
|
|
|
MODULE_LICENSE("GPL");
|