summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-03-07 09:16:29 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2018-03-07 09:16:29 -0800
commit40cb35870700b174f3e2db77c855920458a96c16 (patch)
tree404a635729828e4ab2052a0e7033f96c1179a4cd
parent834739e91126e5de6242abf44e049074f158f3df (diff)
parent19d543a9720065b9e84d1534a8593026e4227e78 (diff)
Merge "clk: msm: Add reset support in dummy clock driver"
-rw-r--r--drivers/clk/msm/clock-dummy.c55
1 files changed, 53 insertions, 2 deletions
diff --git a/drivers/clk/msm/clock-dummy.c b/drivers/clk/msm/clock-dummy.c
index e874fccc7f6c..e3a0181f1cc4 100644
--- a/drivers/clk/msm/clock-dummy.c
+++ b/drivers/clk/msm/clock-dummy.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011,2013-2014 The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011,2013-2014,2018 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -14,6 +14,53 @@
#include <linux/platform_device.h>
#include <linux/of.h>
#include <soc/qcom/msm-clock-controller.h>
+#include <linux/reset-controller.h>
+
+#define DUMMY_RESET_NR 20
+
+static int dummy_reset_assert(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+ return 0;
+}
+
+static int dummy_reset_deassert(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+ return 0;
+}
+
+static int dummy_reset(struct reset_controller_dev *rcdev, unsigned long id)
+{
+ return 0;
+}
+
+static struct reset_control_ops dummy_reset_ops = {
+ .reset = dummy_reset,
+ .assert = dummy_reset_assert,
+ .deassert = dummy_reset_deassert,
+};
+
+static int dummy_reset_controller_register(struct platform_device *pdev)
+{
+ struct reset_controller_dev *prcdev;
+ int ret = 0;
+
+ prcdev = devm_kzalloc(&pdev->dev, sizeof(*prcdev), GFP_KERNEL);
+ if (!prcdev)
+ return -ENOMEM;
+
+ prcdev->of_node = pdev->dev.of_node;
+ prcdev->ops = &dummy_reset_ops;
+ prcdev->owner = pdev->dev.driver->owner;
+ prcdev->nr_resets = DUMMY_RESET_NR;
+
+ ret = reset_controller_register(prcdev);
+ if (ret)
+ dev_err(&pdev->dev, "Failed to register reset controller\n");
+
+ return ret;
+}
static int dummy_clk_reset(struct clk *clk, enum clk_reset_action action)
{
@@ -99,7 +146,11 @@ static int msm_clock_dummy_probe(struct platform_device *pdev)
ret = of_clk_add_provider(pdev->dev.of_node, of_dummy_get, NULL);
if (ret)
- return -ENOMEM;
+ return ret;
+
+ ret = dummy_reset_controller_register(pdev);
+ if (ret)
+ return ret;
dev_info(&pdev->dev, "Registered DUMMY provider.\n");
return ret;