From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Icenowy Zheng <icenowy@aosc.xyz>
Cc: maxime.ripard@free-electrons.com, wens@csie.org,
robh+dt@kernel.org, richard@nod.at, dwmw2@infradead.org,
computersforpeace@gmail.com, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org,
linux-sunxi@googlegroups.com,
Philipp Zabel <p.zabel@pengutronix.de>
Subject: Re: [PATCH 2/2] mtd: nand: sunxi: add reset line support
Date: Sun, 19 Jun 2016 14:06:52 +0200 [thread overview]
Message-ID: <20160619140652.07ab03c9@bbrezillon> (raw)
In-Reply-To: <20160619113739.30362-2-icenowy@aosc.xyz>
+Philipp
On Sun, 19 Jun 2016 19:37:39 +0800
Icenowy Zheng <icenowy@aosc.xyz> wrote:
> The NAND controller on some sun8i chips needs its reset line to be deasserted
> before they can enter working state. This commit added the reset line process
> to the driver.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
> drivers/mtd/nand/sunxi_nand.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
> index a83a690..1502748 100644
> --- a/drivers/mtd/nand/sunxi_nand.c
> +++ b/drivers/mtd/nand/sunxi_nand.c
> @@ -39,6 +39,7 @@
> #include <linux/gpio.h>
> #include <linux/interrupt.h>
> #include <linux/iopoll.h>
> +#include <linux/reset.h>
>
> #define NFC_REG_CTL 0x0000
> #define NFC_REG_ST 0x0004
> @@ -269,6 +270,7 @@ struct sunxi_nfc {
> void __iomem *regs;
> struct clk *ahb_clk;
> struct clk *mod_clk;
> + struct reset_control *reset;
> unsigned long assigned_cs;
> unsigned long clk_rate;
> struct list_head chips;
> @@ -1871,6 +1873,18 @@ static int sunxi_nfc_probe(struct platform_device *pdev)
> if (ret)
> goto out_ahb_clk_unprepare;
>
> + nfc->reset = devm_reset_control_get_optional(dev, "ahb");
> + if (PTR_ERR(nfc->reset) == -EPROBE_DEFER)
> + return PTR_ERR(nfc->reset);
Actually you should test for != -ENOENT, because all error codes except
this one should stop the ->probe().
BTW, this devm_reset_control_get_optional() is really weird. While most
_optional() methods return NULL when the element is not defined in the
DT, this one returns -ENOTENT, which makes it impossible to
differentiate a real error from a undefined reset line (which is a
valid case for _optional()).
Philipp, is there a good reason for doing that?
> +
> + if (!IS_ERR(nfc->reset)) {
> + ret = reset_control_deassert(nfc->reset);
> + if (ret) {
> + dev_err(dev, "reset err %d\n", ret);
> + goto out_mod_clk_unprepare;
> + }
> + }
> +
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
To: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
Cc: maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org,
wens-jdAy2FN1RRM@public.gmane.org,
robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
richard-/L3Ra7n9ekc@public.gmane.org,
dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org,
computersforpeace-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org,
Philipp Zabel <p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Subject: Re: [PATCH 2/2] mtd: nand: sunxi: add reset line support
Date: Sun, 19 Jun 2016 14:06:52 +0200 [thread overview]
Message-ID: <20160619140652.07ab03c9@bbrezillon> (raw)
In-Reply-To: <20160619113739.30362-2-icenowy-ymACFijhrKM@public.gmane.org>
+Philipp
On Sun, 19 Jun 2016 19:37:39 +0800
Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> The NAND controller on some sun8i chips needs its reset line to be deasserted
> before they can enter working state. This commit added the reset line process
> to the driver.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> ---
> drivers/mtd/nand/sunxi_nand.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
> index a83a690..1502748 100644
> --- a/drivers/mtd/nand/sunxi_nand.c
> +++ b/drivers/mtd/nand/sunxi_nand.c
> @@ -39,6 +39,7 @@
> #include <linux/gpio.h>
> #include <linux/interrupt.h>
> #include <linux/iopoll.h>
> +#include <linux/reset.h>
>
> #define NFC_REG_CTL 0x0000
> #define NFC_REG_ST 0x0004
> @@ -269,6 +270,7 @@ struct sunxi_nfc {
> void __iomem *regs;
> struct clk *ahb_clk;
> struct clk *mod_clk;
> + struct reset_control *reset;
> unsigned long assigned_cs;
> unsigned long clk_rate;
> struct list_head chips;
> @@ -1871,6 +1873,18 @@ static int sunxi_nfc_probe(struct platform_device *pdev)
> if (ret)
> goto out_ahb_clk_unprepare;
>
> + nfc->reset = devm_reset_control_get_optional(dev, "ahb");
> + if (PTR_ERR(nfc->reset) == -EPROBE_DEFER)
> + return PTR_ERR(nfc->reset);
Actually you should test for != -ENOENT, because all error codes except
this one should stop the ->probe().
BTW, this devm_reset_control_get_optional() is really weird. While most
_optional() methods return NULL when the element is not defined in the
DT, this one returns -ENOTENT, which makes it impossible to
differentiate a real error from a undefined reset line (which is a
valid case for _optional()).
Philipp, is there a good reason for doing that?
> +
> + if (!IS_ERR(nfc->reset)) {
> + ret = reset_control_deassert(nfc->reset);
> + if (ret) {
> + dev_err(dev, "reset err %d\n", ret);
> + goto out_mod_clk_unprepare;
> + }
> + }
> +
next prev parent reply other threads:[~2016-06-19 12:07 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-19 11:37 [PATCH 1/2] mtd: nand: sunxi: update DT bindings Icenowy Zheng
2016-06-19 11:37 ` Icenowy Zheng
2016-06-19 11:37 ` [PATCH 2/2] mtd: nand: sunxi: add reset line support Icenowy Zheng
2016-06-19 11:37 ` Icenowy Zheng
2016-06-19 12:06 ` Boris Brezillon [this message]
2016-06-19 12:06 ` Boris Brezillon
2016-06-19 12:41 ` icenowy
2016-06-19 12:41 ` icenowy-ymACFijhrKM
2016-06-19 12:53 ` Boris Brezillon
2016-06-19 12:53 ` Boris Brezillon
2016-06-19 13:11 ` icenowy
2016-06-19 13:11 ` icenowy-ymACFijhrKM
2016-06-19 13:16 ` Boris Brezillon
2016-06-19 13:16 ` Boris Brezillon
2016-06-20 12:05 ` Philipp Zabel
2016-06-20 12:05 ` Philipp Zabel
2016-06-20 12:51 ` Boris Brezillon
2016-06-20 12:51 ` Boris Brezillon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160619140652.07ab03c9@bbrezillon \
--to=boris.brezillon@free-electrons.com \
--cc=computersforpeace@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=dwmw2@infradead.org \
--cc=icenowy@aosc.xyz \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-sunxi@googlegroups.com \
--cc=maxime.ripard@free-electrons.com \
--cc=p.zabel@pengutronix.de \
--cc=richard@nod.at \
--cc=robh+dt@kernel.org \
--cc=wens@csie.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.