提交 dc969106 编写于 作者: M Maxime Ripard

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: NMaxime Ripard <maxime.ripard@free-electrons.com>
上级 340ba6c4
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_device.h> #include <linux/of_device.h>
#include <linux/pinctrl/pinctrl.h> #include <linux/pinctrl/pinctrl.h>
#include <linux/reset.h>
#include "pinctrl-sunxi.h" #include "pinctrl-sunxi.h"
...@@ -96,8 +97,26 @@ static const struct sunxi_pinctrl_desc sun6i_a31_r_pinctrl_data = { ...@@ -96,8 +97,26 @@ static const struct sunxi_pinctrl_desc sun6i_a31_r_pinctrl_data = {
static int sun6i_a31_r_pinctrl_probe(struct platform_device *pdev) static int sun6i_a31_r_pinctrl_probe(struct platform_device *pdev)
{ {
return sunxi_pinctrl_init(pdev, struct reset_control *rstc;
int ret;
rstc = devm_reset_control_get(&pdev->dev, NULL);
if (IS_ERR(rstc)) {
dev_err(&pdev->dev, "Reset controller missing\n");
return PTR_ERR(rstc);
}
ret = reset_control_deassert(rstc);
if (ret)
return ret;
ret = sunxi_pinctrl_init(pdev,
&sun6i_a31_r_pinctrl_data); &sun6i_a31_r_pinctrl_data);
if (ret)
reset_control_assert(rstc);
return ret;
} }
static struct of_device_id sun6i_a31_r_pinctrl_match[] = { static struct of_device_id sun6i_a31_r_pinctrl_match[] = {
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include <linux/pinctrl/pinconf-generic.h> #include <linux/pinctrl/pinconf-generic.h>
#include <linux/pinctrl/pinmux.h> #include <linux/pinctrl/pinmux.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/reset.h>
#include <linux/slab.h> #include <linux/slab.h>
#include "../core.h" #include "../core.h"
...@@ -781,7 +780,6 @@ int sunxi_pinctrl_init(struct platform_device *pdev, ...@@ -781,7 +780,6 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
struct device_node *node = pdev->dev.of_node; struct device_node *node = pdev->dev.of_node;
struct pinctrl_pin_desc *pins; struct pinctrl_pin_desc *pins;
struct sunxi_pinctrl *pctl; struct sunxi_pinctrl *pctl;
struct reset_control *rstc;
struct resource *res; struct resource *res;
int i, ret, last_pin; int i, ret, last_pin;
struct clk *clk; struct clk *clk;
...@@ -875,17 +873,10 @@ int sunxi_pinctrl_init(struct platform_device *pdev, ...@@ -875,17 +873,10 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
if (ret) if (ret)
goto gpiochip_error; goto gpiochip_error;
rstc = devm_reset_control_get_optional(&pdev->dev, NULL);
if (!IS_ERR(rstc)) {
ret = reset_control_deassert(rstc);
if (ret)
goto clk_error;
}
pctl->irq = irq_of_parse_and_map(node, 0); pctl->irq = irq_of_parse_and_map(node, 0);
if (!pctl->irq) { if (!pctl->irq) {
ret = -EINVAL; ret = -EINVAL;
goto rstc_error; goto clk_error;
} }
pctl->domain = irq_domain_add_linear(node, SUNXI_IRQ_NUMBER, pctl->domain = irq_domain_add_linear(node, SUNXI_IRQ_NUMBER,
...@@ -893,7 +884,7 @@ int sunxi_pinctrl_init(struct platform_device *pdev, ...@@ -893,7 +884,7 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
if (!pctl->domain) { if (!pctl->domain) {
dev_err(&pdev->dev, "Couldn't register IRQ domain\n"); dev_err(&pdev->dev, "Couldn't register IRQ domain\n");
ret = -ENOMEM; ret = -ENOMEM;
goto rstc_error; goto clk_error;
} }
for (i = 0; i < SUNXI_IRQ_NUMBER; i++) { for (i = 0; i < SUNXI_IRQ_NUMBER; i++) {
...@@ -911,9 +902,6 @@ int sunxi_pinctrl_init(struct platform_device *pdev, ...@@ -911,9 +902,6 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
return 0; return 0;
rstc_error:
if (!IS_ERR(rstc))
reset_control_assert(rstc);
clk_error: clk_error:
clk_disable_unprepare(clk); clk_disable_unprepare(clk);
gpiochip_error: gpiochip_error:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册