From: Paul Burton <paul.burton@mips.com>
To: Paul Cercueil <paul@crapouillou.net>,
Lee Jones <lee.jones@linaro.org>, Arnd Bergmann <arnd@arndb.de>
Cc: Ralf Baechle <ralf@linux-mips.org>,
James Hogan <jhogan@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@kernel.org>,
Jason Cooper <jason@lakedaemon.net>,
Marc Zyngier <marc.zyngier@arm.com>,
Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
"linux-mips@vger.kernel.org" <linux-mips@vger.kernel.org>,
"linux-clk@vger.kernel.org" <linux-clk@vger.kernel.org>,
"od@zcrc.me" <od@zcrc.me>, Mathieu Malaterre <malat@debian.org>
Subject: Re: [EXTERNAL][PATCH v15 04/13] mfd/syscon: Add device_node_to_regmap()
Date: Mon, 29 Jul 2019 16:55:37 +0000 [thread overview]
Message-ID: <20190729165536.dd67ws6nr2msx4pk@pburton-laptop> (raw)
In-Reply-To: <20190724171615.20774-5-paul@crapouillou.net>
Lee, Arnd,
On Wed, Jul 24, 2019 at 01:16:06PM -0400, Paul Cercueil wrote:
> device_node_to_regmap() is exactly like syscon_node_to_regmap(), but it
> does not check that the node is compatible with "syscon", and won't
> attach the first clock it finds to the regmap.
>
> The rationale behind this, is that one device node with a standard
> compatible string "foo,bar" can be covered by multiple drivers sharing a
> regmap, or by a single driver doing all the job without a regmap, but
> these are implementation details which shouldn't reflect on the
> devicetree.
Does this looks like a good path forwards to you? Its use in this case
is described by Documentation/devicetree/bindings/timer/ingenic,tcu.txt
in patch 3 of the series.
If you're OK with it an ack would be appreciated so I can take the
series through mips-next, otherwise I guess we'd need to go back to the
v14 approach.
Thanks,
Paul
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> ---
>
> Notes:
> v15: New patch
>
> drivers/mfd/syscon.c | 46 +++++++++++++++++++++++++-------------
> include/linux/mfd/syscon.h | 6 +++++
> 2 files changed, 36 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c
> index b65e585fc8c6..660723276481 100644
> --- a/drivers/mfd/syscon.c
> +++ b/drivers/mfd/syscon.c
> @@ -40,7 +40,7 @@ static const struct regmap_config syscon_regmap_config = {
> .reg_stride = 4,
> };
>
> -static struct syscon *of_syscon_register(struct device_node *np)
> +static struct syscon *of_syscon_register(struct device_node *np, bool check_clk)
> {
> struct clk *clk;
> struct syscon *syscon;
> @@ -51,9 +51,6 @@ static struct syscon *of_syscon_register(struct device_node *np)
> struct regmap_config syscon_config = syscon_regmap_config;
> struct resource res;
>
> - if (!of_device_is_compatible(np, "syscon"))
> - return ERR_PTR(-EINVAL);
> -
> syscon = kzalloc(sizeof(*syscon), GFP_KERNEL);
> if (!syscon)
> return ERR_PTR(-ENOMEM);
> @@ -117,16 +114,18 @@ static struct syscon *of_syscon_register(struct device_node *np)
> goto err_regmap;
> }
>
> - clk = of_clk_get(np, 0);
> - if (IS_ERR(clk)) {
> - ret = PTR_ERR(clk);
> - /* clock is optional */
> - if (ret != -ENOENT)
> - goto err_clk;
> - } else {
> - ret = regmap_mmio_attach_clk(regmap, clk);
> - if (ret)
> - goto err_attach;
> + if (check_clk) {
> + clk = of_clk_get(np, 0);
> + if (IS_ERR(clk)) {
> + ret = PTR_ERR(clk);
> + /* clock is optional */
> + if (ret != -ENOENT)
> + goto err_clk;
> + } else {
> + ret = regmap_mmio_attach_clk(regmap, clk);
> + if (ret)
> + goto err_attach;
> + }
> }
>
> syscon->regmap = regmap;
> @@ -150,7 +149,8 @@ static struct syscon *of_syscon_register(struct device_node *np)
> return ERR_PTR(ret);
> }
>
> -struct regmap *syscon_node_to_regmap(struct device_node *np)
> +static struct regmap *device_node_get_regmap(struct device_node *np,
> + bool check_clk)
> {
> struct syscon *entry, *syscon = NULL;
>
> @@ -165,13 +165,27 @@ struct regmap *syscon_node_to_regmap(struct device_node *np)
> spin_unlock(&syscon_list_slock);
>
> if (!syscon)
> - syscon = of_syscon_register(np);
> + syscon = of_syscon_register(np, check_clk);
>
> if (IS_ERR(syscon))
> return ERR_CAST(syscon);
>
> return syscon->regmap;
> }
> +
> +struct regmap *device_node_to_regmap(struct device_node *np)
> +{
> + return device_node_get_regmap(np, false);
> +}
> +EXPORT_SYMBOL_GPL(device_node_to_regmap);
> +
> +struct regmap *syscon_node_to_regmap(struct device_node *np)
> +{
> + if (!of_device_is_compatible(np, "syscon"))
> + return ERR_PTR(-EINVAL);
> +
> + return device_node_get_regmap(np, true);
> +}
> EXPORT_SYMBOL_GPL(syscon_node_to_regmap);
>
> struct regmap *syscon_regmap_lookup_by_compatible(const char *s)
> diff --git a/include/linux/mfd/syscon.h b/include/linux/mfd/syscon.h
> index 8cfda0554381..112dc66262cc 100644
> --- a/include/linux/mfd/syscon.h
> +++ b/include/linux/mfd/syscon.h
> @@ -17,12 +17,18 @@
> struct device_node;
>
> #ifdef CONFIG_MFD_SYSCON
> +extern struct regmap *device_node_to_regmap(struct device_node *np);
> extern struct regmap *syscon_node_to_regmap(struct device_node *np);
> extern struct regmap *syscon_regmap_lookup_by_compatible(const char *s);
> extern struct regmap *syscon_regmap_lookup_by_phandle(
> struct device_node *np,
> const char *property);
> #else
> +static inline struct regmap *device_node_to_regmap(struct device_node *np)
> +{
> + return ERR_PTR(-ENOTSUPP);
> +}
> +
> static inline struct regmap *syscon_node_to_regmap(struct device_node *np)
> {
> return ERR_PTR(-ENOTSUPP);
> --
> 2.21.0.593.g511ec345e18
>
next prev parent reply other threads:[~2019-07-29 16:55 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-24 17:16 [PATCH v15 00/13] TCU patchset v15 Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 01/13] dt-bindings: ingenic: Add DT bindings for TCU clocks Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 02/13] doc: Add doc for the Ingenic TCU hardware Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 03/13] dt-bindings: Add doc for the Ingenic TCU drivers Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 04/13] mfd/syscon: Add device_node_to_regmap() Paul Cercueil
2019-07-29 16:55 ` Paul Burton [this message]
2019-08-08 10:04 ` [EXTERNAL][PATCH " Arnd Bergmann
2019-07-24 17:16 ` [PATCH v15 05/13] clk: ingenic: Add driver for the TCU clocks Paul Cercueil
2019-08-08 14:48 ` Stephen Boyd
2019-07-24 17:16 ` [PATCH v15 06/13] irqchip: Add irq-ingenic-tcu driver Paul Cercueil
2019-07-25 8:21 ` Marc Zyngier
2019-07-24 17:16 ` [PATCH v15 07/13] clocksource: Add a new timer-ingenic driver Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 08/13] clk: jz4740: Add TCU clock Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 09/13] MIPS: jz4740: Add DTS nodes for the TCU drivers Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 10/13] MIPS: qi_lb60: Reduce system timer and clocksource to 750 kHz Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 11/13] MIPS: CI20: Reduce system timer and clocksource to 3 MHz Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 12/13] MIPS: GCW0: Reduce system timer and clocksource to 750 kHz Paul Cercueil
2019-07-24 17:16 ` [PATCH v15 13/13] MIPS: jz4740: Drop obsolete code Paul Cercueil
2019-08-08 23:02 ` [PATCH v15 00/13] TCU patchset v15 Paul Burton
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=20190729165536.dd67ws6nr2msx4pk@pburton-laptop \
--to=paul.burton@mips.com \
--cc=arnd@arndb.de \
--cc=corbet@lwn.net \
--cc=daniel.lezcano@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=jason@lakedaemon.net \
--cc=jhogan@kernel.org \
--cc=lee.jones@linaro.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=malat@debian.org \
--cc=marc.zyngier@arm.com \
--cc=mark.rutland@arm.com \
--cc=mturquette@baylibre.com \
--cc=od@zcrc.me \
--cc=paul@crapouillou.net \
--cc=ralf@linux-mips.org \
--cc=robh+dt@kernel.org \
--cc=sboyd@kernel.org \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).