diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2018-03-07 09:16:29 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-03-07 09:16:29 -0800 |
| commit | 40cb35870700b174f3e2db77c855920458a96c16 (patch) | |
| tree | 404a635729828e4ab2052a0e7033f96c1179a4cd | |
| parent | 834739e91126e5de6242abf44e049074f158f3df (diff) | |
| parent | 19d543a9720065b9e84d1534a8593026e4227e78 (diff) | |
Merge "clk: msm: Add reset support in dummy clock driver"
| -rw-r--r-- | drivers/clk/msm/clock-dummy.c | 55 |
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; |
