|
@@ -11,6 +11,8 @@
|
|
|
|
|
|
#include <linux/of.h>
|
|
|
#include <linux/of_address.h>
|
|
|
+#include <linux/of_device.h>
|
|
|
+#include <linux/mfd/syscon.h>
|
|
|
#include <linux/platform_device.h>
|
|
|
#include <linux/delay.h>
|
|
|
|
|
@@ -92,9 +94,18 @@ static const struct of_device_id exynos_pmu_of_device_ids[] = {
|
|
|
{ /*sentinel*/ },
|
|
|
};
|
|
|
|
|
|
+struct regmap *exynos_get_pmu_regmap(void)
|
|
|
+{
|
|
|
+ struct device_node *np = of_find_matching_node(NULL,
|
|
|
+ exynos_pmu_of_device_ids);
|
|
|
+ if (np)
|
|
|
+ return syscon_node_to_regmap(np);
|
|
|
+ return ERR_PTR(-ENODEV);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(exynos_get_pmu_regmap);
|
|
|
+
|
|
|
static int exynos_pmu_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
- const struct of_device_id *match;
|
|
|
struct device *dev = &pdev->dev;
|
|
|
struct resource *res;
|
|
|
|
|
@@ -106,15 +117,10 @@ static int exynos_pmu_probe(struct platform_device *pdev)
|
|
|
pmu_context = devm_kzalloc(&pdev->dev,
|
|
|
sizeof(struct exynos_pmu_context),
|
|
|
GFP_KERNEL);
|
|
|
- if (!pmu_context) {
|
|
|
- dev_err(dev, "Cannot allocate memory.\n");
|
|
|
+ if (!pmu_context)
|
|
|
return -ENOMEM;
|
|
|
- }
|
|
|
pmu_context->dev = dev;
|
|
|
-
|
|
|
- match = of_match_node(exynos_pmu_of_device_ids, dev->of_node);
|
|
|
-
|
|
|
- pmu_context->pmu_data = match->data;
|
|
|
+ pmu_context->pmu_data = of_device_get_match_data(dev);
|
|
|
|
|
|
if (pmu_context->pmu_data->pmu_init)
|
|
|
pmu_context->pmu_data->pmu_init();
|