aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl/sunxi/pinctrl-sunxi.c
diff options
context:
space:
mode:
authorMaxime Ripard <maxime.ripard@free-electrons.com>2014-04-26 16:28:54 -0400
committerMaxime Ripard <maxime.ripard@free-electrons.com>2014-05-04 20:57:18 -0400
commitdc9691066fa7de51178de5ac3e06b3681557a7b4 (patch)
tree5ecbae5cf4632b76b97eb6988c374c6e2970cea5 /drivers/pinctrl/sunxi/pinctrl-sunxi.c
parent340ba6c4973184e2a9a7c51b295230fec17d1109 (diff)
pinctrl: sunxi: Move the reset handling functions out of the core
The way that reset is handled right now is that it is made optional for every pinctrl driver, while actually, it isn't used at all for the main pin controllers so far, and while it's mandatory for the A31's secondary pin controller. Move the reset functions out of the core and in the driver, where they can be made mandatory. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Diffstat (limited to 'drivers/pinctrl/sunxi/pinctrl-sunxi.c')
-rw-r--r--drivers/pinctrl/sunxi/pinctrl-sunxi.c16
1 files changed, 2 insertions, 14 deletions
diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.c b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
index 2c3fb92b8972..f6522b54ece9 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
@@ -26,7 +26,6 @@
26#include <linux/pinctrl/pinconf-generic.h> 26#include <linux/pinctrl/pinconf-generic.h>
27#include <linux/pinctrl/pinmux.h> 27#include <linux/pinctrl/pinmux.h>
28#include <linux/platform_device.h> 28#include <linux/platform_device.h>
29#include <linux/reset.h>
30#include <linux/slab.h> 29#include <linux/slab.h>
31 30
32#include "../core.h" 31#include "../core.h"
@@ -781,7 +780,6 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
781 struct device_node *node = pdev->dev.of_node; 780 struct device_node *node = pdev->dev.of_node;
782 struct pinctrl_pin_desc *pins; 781 struct pinctrl_pin_desc *pins;
783 struct sunxi_pinctrl *pctl; 782 struct sunxi_pinctrl *pctl;
784 struct reset_control *rstc;
785 struct resource *res; 783 struct resource *res;
786 int i, ret, last_pin; 784 int i, ret, last_pin;
787 struct clk *clk; 785 struct clk *clk;
@@ -875,17 +873,10 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
875 if (ret) 873 if (ret)
876 goto gpiochip_error; 874 goto gpiochip_error;
877 875
878 rstc = devm_reset_control_get_optional(&pdev->dev, NULL);
879 if (!IS_ERR(rstc)) {
880 ret = reset_control_deassert(rstc);
881 if (ret)
882 goto clk_error;
883 }
884
885 pctl->irq = irq_of_parse_and_map(node, 0); 876 pctl->irq = irq_of_parse_and_map(node, 0);
886 if (!pctl->irq) { 877 if (!pctl->irq) {
887 ret = -EINVAL; 878 ret = -EINVAL;
888 goto rstc_error; 879 goto clk_error;
889 } 880 }
890 881
891 pctl->domain = irq_domain_add_linear(node, SUNXI_IRQ_NUMBER, 882 pctl->domain = irq_domain_add_linear(node, SUNXI_IRQ_NUMBER,
@@ -893,7 +884,7 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
893 if (!pctl->domain) { 884 if (!pctl->domain) {
894 dev_err(&pdev->dev, "Couldn't register IRQ domain\n"); 885 dev_err(&pdev->dev, "Couldn't register IRQ domain\n");
895 ret = -ENOMEM; 886 ret = -ENOMEM;
896 goto rstc_error; 887 goto clk_error;
897 } 888 }
898 889
899 for (i = 0; i < SUNXI_IRQ_NUMBER; i++) { 890 for (i = 0; i < SUNXI_IRQ_NUMBER; i++) {
@@ -911,9 +902,6 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
911 902
912 return 0; 903 return 0;
913 904
914rstc_error:
915 if (!IS_ERR(rstc))
916 reset_control_assert(rstc);
917clk_error: 905clk_error:
918 clk_disable_unprepare(clk); 906 clk_disable_unprepare(clk);
919gpiochip_error: 907gpiochip_error: