From: Dong Aisheng <aisheng.dong-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
To: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
Cc: "linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
<linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
"grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org"
<grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>,
"rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org"
<rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>,
"linus.walleij-0IS4wlFg1OjSUeElwK9/Pw@public.gmane.org"
<linus.walleij-0IS4wlFg1OjSUeElwK9/Pw@public.gmane.org>,
Dong Aisheng-B29396
<B29396-KZfg59tc24xl57MIdRCFDg@public.gmane.org>,
"s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org"
<s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>,
"dongas86-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org"
<dongas86-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
<shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
"thomas.abraham-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
<thomas.abraham-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
"tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org"
<tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>,
"sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org"
<sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org"
<devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH V3 3/6] pinctrl: core device tree mapping table parsing support
Date: Fri, 23 Mar 2012 11:55:49 +0800 [thread overview]
Message-ID: <20120323035548.GA23958@shlinux2.ap.freescale.net> (raw)
In-Reply-To: <1332440842-1098-3-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
On Fri, Mar 23, 2012 at 02:27:19AM +0800, Stephen Warren wrote:
> During pinctrl_get(), if the client device has a device tree node, look
> for the common pinctrl properties there. If found, parse the referenced
> device tree nodes, with the help of the pinctrl drivers, and generate
> mapping table entries from them.
>
> During pinctrl_put(), free any results of device tree parsing.
>
> Signed-off-by: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
> ---
> v3: Add explit check for devies without dev->of_node. Add comments re:
> lack of pctldev for PIN_MAP_TYPE_DUMMY_STATE.
> v2: Place most code into new file devicetree.c
>
> pinctrl core dt fixup
> ---
.......
> +int pinctrl_dt_to_map(struct pinctrl *p)
> +{
> + struct device_node *np = p->dev->of_node;
> + int state, ret;
> + char *propname;
> + struct property *prop;
> + const char *statename;
> + const __be32 *list;
> + int size, config;
> + phandle phandle;
> + struct device_node *np_config;
> + struct pinctrl_dt_map *dt_map;
> +
> + /* CONFIG_OF enabled, p->dev not instantiated from DT */
> + if (!np)
> + return 0;
> +
> + /* We may store pointers to property names within the node */
> + of_node_get(np);
> +
> + /* For each defined state ID */
> + for (state = 0; ; state++) {
> + /* Retrieve the pinctrl-* property */
> + propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state);
> + prop = of_find_property(np, propname, &size);
> + kfree(propname);
> + if (!prop)
> + break;
> + list = prop->value;
> + size /= sizeof(*list);
> +
> + /* Determine whether pinctrl-names property names the state */
> + ret = of_property_read_string_index(np, "pinctrl-names",
> + state, &statename);
> + /*
> + * If not, statename is just the integer state ID. But rather
> + * than dynamically allocate it and have to free it later,
> + * just point part way into the property name for the string.
> + */
> + if (ret < 0) {
> + /* strlen("pinctrl-") == 8 */
> + if (strlen(prop->name) < 8) {
You thought this checking is still needed?
prop->name should be exactly what you search above ("pinctrl-%d"), right?
> + dev_err(p->dev, "prop %s inconsistent length\n",
> + prop->name);
> + ret = -EINVAL;
> + goto err;
> + }
> + statename = prop->name + 8;
> + }
> +
> + /* For every referenced pin configuration node in it */
> + for (config = 0; config < size; config++) {
> + phandle = be32_to_cpup(list++);
> +
> + /* Look up the pin configuration node */
> + np_config = of_find_node_by_phandle(phandle);
> + if (!np_config) {
> + dev_err(p->dev,
> + "prop %s index %i invalid phandle\n",
> + prop->name, config);
> + ret = -EINVAL;
> + goto err;
> + }
> +
> + /* Parse the node */
> + ret = dt_to_map_one_config(p, statename, np_config);
> + of_node_put(np_config);
> + if (ret < 0)
> + goto err;
> + }
> +
> + /* No entries in DT? Generate a dummy state table entry */
> + if (!size) {
> + ret = dt_remember_dummy_state(p, statename);
It seems we're still keeping the intermediate pinctrl_dt_map, although
not know the result you found,
but i'm ok we just do it currently.
Regards
Dong Aisheng
WARNING: multiple messages have this Message-ID (diff)
From: Dong Aisheng <aisheng.dong@freescale.com>
To: Stephen Warren <swarren@wwwdotorg.org>
Cc: "linus.walleij@linaro.org" <linus.walleij@linaro.org>,
"grant.likely@secretlab.ca" <grant.likely@secretlab.ca>,
"rob.herring@calxeda.com" <rob.herring@calxeda.com>,
"linus.walleij@stericsson.com" <linus.walleij@stericsson.com>,
Dong Aisheng-B29396 <B29396@freescale.com>,
"s.hauer@pengutronix.de" <s.hauer@pengutronix.de>,
"dongas86@gmail.com" <dongas86@gmail.com>,
"shawn.guo@linaro.org" <shawn.guo@linaro.org>,
"thomas.abraham@linaro.org" <thomas.abraham@linaro.org>,
"tony@atomide.com" <tony@atomide.com>,
"sjg@chromium.org" <sjg@chromium.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"devicetree-discuss@lists.ozlabs.org"
<devicetree-discuss@lists.ozlabs.org>,
"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>
Subject: Re: [PATCH V3 3/6] pinctrl: core device tree mapping table parsing support
Date: Fri, 23 Mar 2012 11:55:49 +0800 [thread overview]
Message-ID: <20120323035548.GA23958@shlinux2.ap.freescale.net> (raw)
In-Reply-To: <1332440842-1098-3-git-send-email-swarren@wwwdotorg.org>
On Fri, Mar 23, 2012 at 02:27:19AM +0800, Stephen Warren wrote:
> During pinctrl_get(), if the client device has a device tree node, look
> for the common pinctrl properties there. If found, parse the referenced
> device tree nodes, with the help of the pinctrl drivers, and generate
> mapping table entries from them.
>
> During pinctrl_put(), free any results of device tree parsing.
>
> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
> ---
> v3: Add explit check for devies without dev->of_node. Add comments re:
> lack of pctldev for PIN_MAP_TYPE_DUMMY_STATE.
> v2: Place most code into new file devicetree.c
>
> pinctrl core dt fixup
> ---
.......
> +int pinctrl_dt_to_map(struct pinctrl *p)
> +{
> + struct device_node *np = p->dev->of_node;
> + int state, ret;
> + char *propname;
> + struct property *prop;
> + const char *statename;
> + const __be32 *list;
> + int size, config;
> + phandle phandle;
> + struct device_node *np_config;
> + struct pinctrl_dt_map *dt_map;
> +
> + /* CONFIG_OF enabled, p->dev not instantiated from DT */
> + if (!np)
> + return 0;
> +
> + /* We may store pointers to property names within the node */
> + of_node_get(np);
> +
> + /* For each defined state ID */
> + for (state = 0; ; state++) {
> + /* Retrieve the pinctrl-* property */
> + propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state);
> + prop = of_find_property(np, propname, &size);
> + kfree(propname);
> + if (!prop)
> + break;
> + list = prop->value;
> + size /= sizeof(*list);
> +
> + /* Determine whether pinctrl-names property names the state */
> + ret = of_property_read_string_index(np, "pinctrl-names",
> + state, &statename);
> + /*
> + * If not, statename is just the integer state ID. But rather
> + * than dynamically allocate it and have to free it later,
> + * just point part way into the property name for the string.
> + */
> + if (ret < 0) {
> + /* strlen("pinctrl-") == 8 */
> + if (strlen(prop->name) < 8) {
You thought this checking is still needed?
prop->name should be exactly what you search above ("pinctrl-%d"), right?
> + dev_err(p->dev, "prop %s inconsistent length\n",
> + prop->name);
> + ret = -EINVAL;
> + goto err;
> + }
> + statename = prop->name + 8;
> + }
> +
> + /* For every referenced pin configuration node in it */
> + for (config = 0; config < size; config++) {
> + phandle = be32_to_cpup(list++);
> +
> + /* Look up the pin configuration node */
> + np_config = of_find_node_by_phandle(phandle);
> + if (!np_config) {
> + dev_err(p->dev,
> + "prop %s index %i invalid phandle\n",
> + prop->name, config);
> + ret = -EINVAL;
> + goto err;
> + }
> +
> + /* Parse the node */
> + ret = dt_to_map_one_config(p, statename, np_config);
> + of_node_put(np_config);
> + if (ret < 0)
> + goto err;
> + }
> +
> + /* No entries in DT? Generate a dummy state table entry */
> + if (!size) {
> + ret = dt_remember_dummy_state(p, statename);
It seems we're still keeping the intermediate pinctrl_dt_map, although
not know the result you found,
but i'm ok we just do it currently.
Regards
Dong Aisheng
next prev parent reply other threads:[~2012-03-23 3:55 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-22 18:27 [PATCH V3 1/6] dt: add property iteration helpers Stephen Warren
2012-03-22 18:27 ` Stephen Warren
2012-03-22 18:27 ` [PATCH V3 2/6] dt: pinctrl: Document device tree binding Stephen Warren
2012-03-22 18:27 ` [PATCH V3 3/6] pinctrl: core device tree mapping table parsing support Stephen Warren
[not found] ` <1332440842-1098-3-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-03-23 3:55 ` Dong Aisheng [this message]
2012-03-23 3:55 ` Dong Aisheng
[not found] ` <20120323035548.GA23958-Fb7DQEYuewWctlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org>
2012-03-23 4:12 ` Stephen Warren
2012-03-23 4:12 ` Stephen Warren
[not found] ` <1332440842-1098-1-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-03-22 18:27 ` [PATCH V3 4/6] dt: Move Tegra20 pin mux binding into new pinctrl directory Stephen Warren
2012-03-22 18:27 ` Stephen Warren
2012-03-22 18:27 ` [PATCH V3 5/6] dt: Document Tegra20/30 pinctrl binding Stephen Warren
2012-03-22 18:27 ` Stephen Warren
[not found] ` <1332440842-1098-5-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-03-23 4:53 ` Dong Aisheng
2012-03-23 4:53 ` Dong Aisheng
2012-04-02 6:49 ` Simon Glass
2012-04-02 6:49 ` Simon Glass
[not found] ` <CAPnjgZ0KhvPV8oO557i5czebm2J_KF7fmM3RDJoeYRurXu6Prg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-02 15:48 ` Stephen Warren
2012-04-02 15:48 ` Stephen Warren
2012-03-22 18:27 ` [PATCH V3 6/6] pinctrl: tegra: Add complete device tree support Stephen Warren
2012-03-22 18:27 ` Stephen Warren
[not found] ` <1332440842-1098-6-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-03-23 7:16 ` Dong Aisheng
2012-03-23 7:16 ` Dong Aisheng
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=20120323035548.GA23958@shlinux2.ap.freescale.net \
--to=aisheng.dong-kzfg59tc24xl57midrcfdg@public.gmane.org \
--cc=B29396-KZfg59tc24xl57MIdRCFDg@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=dongas86-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \
--cc=linus.walleij-0IS4wlFg1OjSUeElwK9/Pw@public.gmane.org \
--cc=linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
--cc=s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
--cc=shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
--cc=thomas.abraham-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=tony-4v6yS6AI5VpBDgjK7y7TUQ@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 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.