diff options
author | Zoltan Herpai <wigyori@uid0.hu> | 2014-02-05 08:42:28 +0000 |
---|---|---|
committer | Zoltan Herpai <wigyori@uid0.hu> | 2014-02-05 08:42:28 +0000 |
commit | c957af0a0f6a2c45b9b3c84f45f4a3aa44d293c6 (patch) | |
tree | f8e3bda571dab7f80fdd240541ed8bd1d39b179e /target/linux/sunxi/patches-3.13/201-reset-add-of_reset_control_get.patch | |
parent | 66543935db1d7eab23fc43b381e56dbd4424b499 (diff) | |
download | mtk-20170518-c957af0a0f6a2c45b9b3c84f45f4a3aa44d293c6.zip mtk-20170518-c957af0a0f6a2c45b9b3c84f45f4a3aa44d293c6.tar.gz mtk-20170518-c957af0a0f6a2c45b9b3c84f45f4a3aa44d293c6.tar.bz2 |
sunxi: initial 3.13 support
Signed-off-by: Zoltan HERPAI <wigyori@uid0.hu>
SVN-Revision: 39471
Diffstat (limited to 'target/linux/sunxi/patches-3.13/201-reset-add-of_reset_control_get.patch')
-rw-r--r-- | target/linux/sunxi/patches-3.13/201-reset-add-of_reset_control_get.patch | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/target/linux/sunxi/patches-3.13/201-reset-add-of_reset_control_get.patch b/target/linux/sunxi/patches-3.13/201-reset-add-of_reset_control_get.patch new file mode 100644 index 0000000..73ecca1 --- /dev/null +++ b/target/linux/sunxi/patches-3.13/201-reset-add-of_reset_control_get.patch @@ -0,0 +1,119 @@ +From 0325b48d6149e131c90ed6ec77458f4d2df73898 Mon Sep 17 00:00:00 2001 +From: Maxime Ripard <maxime.ripard@free-electrons.com> +Date: Fri, 20 Dec 2013 22:41:07 +0100 +Subject: [PATCH] reset: Add of_reset_control_get + +In some cases, you might need to deassert from reset an hardware block that +doesn't associated to a struct device (CPUs, timers, etc.). + +Add a small helper to retrieve the reset controller from the device tree +without the need to pass a struct device. + +Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> +--- + drivers/reset/core.c | 39 ++++++++++++++++++++++++++++++--------- + include/linux/reset.h | 4 ++++ + 2 files changed, 34 insertions(+), 9 deletions(-) + +diff --git a/drivers/reset/core.c b/drivers/reset/core.c +index d1b6089..4f3dda7 100644 +--- a/drivers/reset/core.c ++++ b/drivers/reset/core.c +@@ -127,15 +127,16 @@ int reset_control_deassert(struct reset_control *rstc) + EXPORT_SYMBOL_GPL(reset_control_deassert); + + /** +- * reset_control_get - Lookup and obtain a reference to a reset controller. +- * @dev: device to be reset by the controller ++ * of_reset_control_get - Lookup and obtain a reference to a reset controller. ++ * @node: device to be reset by the controller + * @id: reset line name + * + * Returns a struct reset_control or IS_ERR() condition containing errno. + * + * Use of id names is optional. + */ +-struct reset_control *reset_control_get(struct device *dev, const char *id) ++struct reset_control *of_reset_control_get(struct device_node *node, ++ const char *id) + { + struct reset_control *rstc = ERR_PTR(-EPROBE_DEFER); + struct reset_controller_dev *r, *rcdev; +@@ -144,13 +145,10 @@ struct reset_control *reset_control_get(struct device *dev, const char *id) + int rstc_id; + int ret; + +- if (!dev) +- return ERR_PTR(-EINVAL); +- + if (id) +- index = of_property_match_string(dev->of_node, ++ index = of_property_match_string(node, + "reset-names", id); +- ret = of_parse_phandle_with_args(dev->of_node, "resets", "#reset-cells", ++ ret = of_parse_phandle_with_args(node, "resets", "#reset-cells", + index, &args); + if (ret) + return ERR_PTR(ret); +@@ -185,12 +183,35 @@ struct reset_control *reset_control_get(struct device *dev, const char *id) + return ERR_PTR(-ENOMEM); + } + +- rstc->dev = dev; + rstc->rcdev = rcdev; + rstc->id = rstc_id; + + return rstc; + } ++EXPORT_SYMBOL_GPL(of_reset_control_get); ++ ++/** ++ * reset_control_get - Lookup and obtain a reference to a reset controller. ++ * @dev: device to be reset by the controller ++ * @id: reset line name ++ * ++ * Returns a struct reset_control or IS_ERR() condition containing errno. ++ * ++ * Use of id names is optional. ++ */ ++struct reset_control *reset_control_get(struct device *dev, const char *id) ++{ ++ struct reset_control *rstc; ++ ++ if (!dev) ++ return ERR_PTR(-EINVAL); ++ ++ rstc = of_reset_control_get(dev->of_node, id); ++ if (!IS_ERR(rstc)) ++ rstc->dev = dev; ++ ++ return rstc; ++} + EXPORT_SYMBOL_GPL(reset_control_get); + + /** +diff --git a/include/linux/reset.h b/include/linux/reset.h +index 6082247..a398025 100644 +--- a/include/linux/reset.h ++++ b/include/linux/reset.h +@@ -1,6 +1,8 @@ + #ifndef _LINUX_RESET_H_ + #define _LINUX_RESET_H_ + ++#include <linux/of.h> ++ + struct device; + struct reset_control; + +@@ -8,6 +10,8 @@ + int reset_control_assert(struct reset_control *rstc); + int reset_control_deassert(struct reset_control *rstc); + ++struct reset_control *of_reset_control_get(struct device_node *node, ++ const char *id); + struct reset_control *reset_control_get(struct device *dev, const char *id); + void reset_control_put(struct reset_control *rstc); + struct reset_control *devm_reset_control_get(struct device *dev, const char *id); +-- +1.8.5.1 + |