From: Jamie Iles <jamie-wmLquQDDieKakBO8gow8eQ@public.gmane.org>
To: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Cc: Grant Likely
<grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>,
Colin Cross <ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org>,
Erik Gilling <konkers-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org>,
Olof Johansson <olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org>,
Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [RFC PATCH 10/12] arm/tegra: Add device tree support to pinmux driver
Date: Mon, 15 Aug 2011 21:07:17 +0100 [thread overview]
Message-ID: <20110815200716.GA22355@gallagher> (raw)
In-Reply-To: <1313189697-21287-11-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Hi Stephen,
On Fri, Aug 12, 2011 at 04:54:55PM -0600, Stephen Warren wrote:
> Signed-off-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
> arch/arm/mach-tegra/pinmux.c | 115 ++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 115 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-tegra/pinmux.c b/arch/arm/mach-tegra/pinmux.c
> index 05fa1a3..33246c2 100644
> --- a/arch/arm/mach-tegra/pinmux.c
> +++ b/arch/arm/mach-tegra/pinmux.c
> @@ -20,6 +20,7 @@
> #include <linux/errno.h>
> #include <linux/spinlock.h>
> #include <linux/io.h>
> +#include <linux/of.h>
> #include <linux/platform_device.h>
>
> #include <mach/iomap.h>
> @@ -147,6 +148,41 @@ static const char *func_name(enum tegra_mux_func func)
> return tegra_mux_names[func];
> }
>
[...]
>
> static const char *tri_name(unsigned long val)
> {
> @@ -666,15 +702,94 @@ void tegra_pinmux_config_pullupdown_table(const struct tegra_pingroup_config *co
> }
> }
>
> +#ifdef CONFIG_OF
> +static void __init tegra_pinmux_probe_dt(struct platform_device *pdev)
> +{
> + int pg;
> +
> + for (pg = 0; pg < TEGRA_MAX_PINGROUP; pg++) {
> + const char *pg_name = pingroup_name(pg);
> + struct tegra_pingroup_config config;
> + struct device_node *pg_node;
> + int ret;
> + const char *s;
> +
> + pg_node = of_find_child_node_by_name(pdev->dev.of_node,
> + pg_name);
> + if (pg_node == NULL)
> + continue;
> +
> + config.pingroup = pg;
> +
> + ret = of_property_read_string(pg_node, "nvidia,function", &s);
> + if (ret < 0) {
> + dev_err(&pdev->dev,
> + "%s: Missing property nvidia,function\n",
> + pg_name);
> + continue;
> + }
> + ret = func_enum(s, &config.func);
> + if (ret < 0) {
> + dev_err(&pdev->dev,
> + "%s: Invalid nvidia,function value %s\n",
> + pg_name, s);
> + continue;
> + }
> +
> + ret = of_property_read_string(pg_node, "nvidia,pull", &s);
> + if (ret >= 0) {
> + if (!strcmp(s, "up"))
> + config.pupd = TEGRA_PUPD_PULL_UP;
> + else if (!strcmp(s, "down"))
> + config.pupd = TEGRA_PUPD_PULL_DOWN;
> + else if (!strcmp(s, "normal"))
> + config.pupd = TEGRA_PUPD_NORMAL;
> + else {
> + dev_err(&pdev->dev,
> + "%s: Invalid nvidia,pull value %s\n",
> + pg_name, s);
> + continue;
> + }
> + } else
> + config.pupd = TEGRA_PUPD_NORMAL;
> +
> + if (of_find_property(pg_node, "nvidia,tristate", NULL))
> + config.tristate = TEGRA_TRI_TRISTATE;
> + else
> + config.tristate = TEGRA_TRI_NORMAL;
> +
> + dev_err(&pdev->dev, "%s: func %d (%s) pull %d tri %d\n",
> + pg_name, config.func, func_name(config.func),
> + config.pupd, config.tristate);
> +
> + tegra_pinmux_config_pingroup(&config);
> +
> + of_node_put(pg_node);
> + }
> +}
I need to implement DT muxing configuration for my platform, and I believe
that what you have here would work fine for me too, and to avoid duplicating
the same thing, I wonder if this could be a little more generic.
So if the platform specific pinmux driver called the pinmux parser with a
callback for a pingroup configuration function then this wouldn't need the
nvidia specific properties. I'd envisage the setup callback to be something
like:
int pingroup_configure(const char *name, unsigned long flags);
where the flags would be a bitmask of properties, so:
PINMUX_F_TRISTATE
PINMUX_F_PUPD
etc
which would map to pinmux,tristate properties etc. The tegra (or
picoxcell...) specific driver would then map any regs and setup the
pinmux tables and call the parser loop with the correct callback. This
would require looping over the child nodes as we've discussed before,
and the decoding of the func_enum in the nvidia driver, but I think
that's okay.
Jamie
next prev parent reply other threads:[~2011-08-15 20:07 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-12 22:54 [RFC PATCH 00/12] arm/tegra: Initialize GPIO & pinmux from DT Stephen Warren
[not found] ` <1313189697-21287-1-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-08-12 22:54 ` [RFC PATCH 01/12] dt: Add of_find_child_node_by_name() Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 02/12] arm/tegra: Prep boards for gpio/pinmux conversion to pdevs Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 03/12] arm/tegra: Avoid duplicate gpio/pinmux devices with dt Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 04/12] arm/tegra: board-dt: Add AUXDATA for tegra-gpio and tegra-pinmux Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 05/12] arm/dt: Tegra: Add nvidia, gpios property to GPIO controller Stephen Warren
[not found] ` <1313189697-21287-6-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-08-14 7:01 ` [RFC PATCH 05/12] arm/dt: Tegra: Add nvidia,gpios " Olof Johansson
[not found] ` <CAOesGMj8firxDz-kqkh=jwsbC_QRW+YSFpf7dh3WaOhseCg91w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-08-15 16:15 ` Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 06/12] arm/dt: Tegra: Add pinmux node Stephen Warren
[not found] ` <1313189697-21287-7-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-08-14 7:24 ` Olof Johansson
[not found] ` <CAOesGMheuUfSe1uUA6LxZ71V0-DR3XX7bEJqhVxJ-ZqrWWa1bA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-08-15 16:41 ` Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 07/12] gpio/tegra: Convert to a platform device Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 08/12] gpio/tegra: Add device tree support Stephen Warren
[not found] ` <1313189697-21287-9-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-08-13 9:49 ` Belisko Marek
[not found] ` <CAAfyv34kOtwjerB0gMhEKNTwGd9w-LCE52MCUuvzTyYkXLY-dg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-08-15 15:47 ` Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 09/12] arm/tegra: Convert pinmux driver to a platform device Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 10/12] arm/tegra: Add device tree support to pinmux driver Stephen Warren
[not found] ` <1313189697-21287-11-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-08-13 10:43 ` Jamie Iles
2011-08-13 10:48 ` Jamie Iles
[not found] ` <20110813104850.GD2643-apL1N+EY0C9YtYNIL7UdTEEOCMrvLtNR@public.gmane.org>
2011-08-15 16:09 ` Stephen Warren
2011-08-15 20:07 ` Jamie Iles [this message]
2011-08-15 20:36 ` Jamie Iles
2011-08-15 20:44 ` Stephen Warren
[not found] ` <74CDBE0F657A3D45AFBB94109FB122FF04AEA25174-C7FfzLzN0UxDw2glCA4ptUEOCMrvLtNR@public.gmane.org>
2011-08-15 20:50 ` Jamie Iles
2011-08-12 22:54 ` [RFC PATCH 11/12] arm/tegra: board-dt: Remove dependency on non-dt pinmux functions Stephen Warren
2011-08-12 22:54 ` [RFC PATCH 12/12] arm/tegra: Remove temporary gpio/pinmux registration workaround Stephen Warren
[not found] ` <1313189697-21287-13-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-08-15 11:12 ` Sergei Shtylyov
[not found] ` <4E48FF29.1030208-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
2011-08-15 16:03 ` Stephen Warren
2011-08-13 13:08 ` [RFC PATCH 00/12] arm/tegra: Initialize GPIO & pinmux from DT Shawn Guo
[not found] ` <20110813130858.GC7244-+NayF8gZjK2ctlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org>
2011-08-15 16:07 ` Stephen Warren
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=20110815200716.GA22355@gallagher \
--to=jamie-wmlquqddiekakbo8gow8eq@public.gmane.org \
--cc=ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \
--cc=konkers-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org \
--cc=swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.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 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).