From: Christian Ruppert <christian.ruppert@abilis.com>
To: Stephen Warren <swarren@wwwdotorg.org>
Cc: Haojian Zhuang <haojian.zhuang@linaro.org>,
Linus Walleij <linus.walleij@linaro.org>,
Shiraz HASHIM <shiraz.hashim@st.com>,
Patrice CHOTARD <patrice.chotard@st.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Grant Likely <grant.likely@secretlab.ca>,
Rob Herring <rob.herring@calxeda.com>,
Rob Landley <rob@landley.net>,
Sascha Leuenberger <sascha.leuenberger@abilis.com>,
Pierrick Hascoet <pierrick.hascoet@abilis.com>,
"devicetree-discuss@lists.ozlabs.org"
<devicetree-discuss@lists.ozlabs.org>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>
Subject: Re: [PATCH 1/2] pinmux: Add TB10x pinmux driver
Date: Tue, 11 Jun 2013 09:27:44 +0200 [thread overview]
Message-ID: <20130611072743.GA14802@ab42.lan> (raw)
In-Reply-To: <51B2320B.6060101@wwwdotorg.org>
On Fri, Jun 07, 2013 at 01:18:35PM -0600, Stephen Warren wrote:
> On 06/06/2013 09:30 AM, Christian Ruppert wrote:
> > On Thu, Jun 06, 2013 at 10:32:21PM +0800, Haojian Zhuang wrote:
> >> On 6 June 2013 22:11, Christian Ruppert <christian.ruppert@abilis.com> wrote:
> >>> On Wed, Jun 05, 2013 at 09:44:27AM +0800, Haojian Zhuang wrote:
> >>>> On 3 June 2013 20:30, Christian Ruppert <christian.ruppert@abilis.com> wrote:
> >>>>> OK, here's a simplified example of what we would like to do (this seems
> >>>>> pretty common so I suppose there is a way I haven't understood). Our
> >>>>> situation is slightly more complex but for the purpose of discussion
> >>>>> let's assume a chip with 8 pins which can be configured for the
> >>>>> following functions:
> >>>>>
> >>>>> Pin GPIO-A I2C SPI0 SPI1
> >>>>> ------------------------------------
> >>>>> 1 GPIOA0 SDA MISO1
> >>>>> 2 GPIOA1 SCL MOSI1
> >>>>> 3 GPIOA2 SS1_B
> >>>>> 4 GPIOA3 SCLK1
> >>>>> 5 GPIOA4 MISO0
> >>>>> 6 GPIOA5 MOSI0
> >>>>> 7 GPIOA6 SS0_B
> >>>>> 8 GPIOA7 SCLK0
> >>>>>
> >>>>> We can now define the following pinctrl-single:
> >>>>>
> >>>>> pinmux: pinmux@0xFFEE0000 {
> >>>>> compatible = "pinctrl-single";
> >>>>> reg = <0xFFEE0000 0x8>;
> >>>>> #address-cells = <1>;
> >>>>> #size-cells = <0>;
> >>>>> #gpio-range-cells = <3>;
> >>>>> pinctrl-single,register-width = <32>;
> >>>>> pinctrl-single,function-mask = <0xffffffff>;
> >>>>> pinctrl-single,gpio-range = <&range 1 8 0>;
> >>>>> gpioa_pins: pinmux_gpioa_pins {
> >>>>> pinctrl-single,pins = <0x0 0 0x4 0>
> >>>>> };
> >>>>> i2c_pins: pinmux_i2c_pins {
> >>>>> pinctrl-single,pins = <0x0 1>
> >>>>> };
> >>>>> spi0_pins: pinmux_spi0_pins {
> >>>>> pinctrl-single,pins = <0x1 1>
> >>>> <0x1 1>?
> >>>>
> >>>> If each pinmux register is only for one pin in your SoC.
> >>>> I think that your definitions are wrong above. We use
> >>>> register offset as the first argument, not pin number.
> >>>> And the second argument should be pin function number.
> >>>
> >>> In our case each pinmux register (bit field) actually controls an entire
> >>> group of pins.
> >>>
> >>>> If multiple pins are sharing one register with different bits,
> >>>> you need to enable "pinctrl-single,bit-per-mux".
> >>>
> >>> Multiple pins are sharing the same bits in the same register. Do you
> >>> think this prevents us from using pinctrl-single?
> >>>
> >> Could you give me your register definition? Then I can understand you
> >> better.
> >
> > In our example, the register map would look a bit like the following.
> > Note that every register configures four pins at a time.
> >
> > Register 0x0:
> > Mode GPIO-A I2C SPI1
> > Value 0x0 0x1 0x2
> > ---------------------------
> > Pin1 GPIOA0 SDA MISO1
> > Pin2 GPIOA1 SCL MOSI1
> > Pin3 GPIOA2 SS1_B
> > Pin4 GPIOA3 SCLK1
> >
> > Register 0x4:
> > Mode GPIO-A SPI0
> > Value 0x0 0x1
> > ---------------------
> > Pin5 GPIOA4 MISO0
> > Pin6 GPIOA5 MOSI0
> > Pin7 GPIOA6 SS0_B
> > Pin8 GPIOA7 SCLK0
>
> My suggestion here is that pinctrl-single isn't appropriate. The only
> way it could work is if you pretend that each group-of-pins is actually
> a single pin.
>
> However, then the correlation between these pretend pins (i.e. really
> the groups) and GPIOs won't work, because each "pin" is really 4 pins,
> and hence 4 GPIOs, and hence you won't be able to gpio_get() more than 1
> GPIO per pin group, I think.
I agree: Unluckily, pinctrl-single doesn't seem to be what we are looking
for.
> It's not hard (although possibly data intensive depending on your SoC)
> to represent your HW just fine with a native pinctrl driver; pinctrl
> itself has the ability to separate the concepts of pins, groups-of-pins,
> and the mux-functions-that-are-assigned-to-groups. If any of your HW
> registers actually do control only a single pin, you can simply create
> both a pin and a group that contains only that one pin. This is all very
> similar to how Tegra works, although it sounds like your registers may
> be a bit more regular than Tegras - Tegra has a very variable number of
> pins in each grop, and even some overlap between groups (mux function
> groups and pin configuration groups aren't aligned).
Actually, our registers are quite a bit more complex than the above
example (interdependencies between pin groups, overlapping
functionalities etc.) but I set the example to understand the concepts
which could then possibly be extended/applied to our real case.
We already have a draft for a native pinctrl driver (see original post)
but there was some disagreement about exposing kernel internal pin
numbering to device tree users. Now that it's pretty sure that we cannot
reasonably use pinctrl-single I'll take up that work again and make a
proposal based on 1) in https://lkml.org/lkml/2013/5/22/207.
Greetings,
Christian
--
Christian Ruppert , <christian.ruppert@abilis.com>
/|
Tel: +41/(0)22 816 19-42 //| 3, Chemin du Pré-Fleuri
_// | bilis Systems CH-1228 Plan-les-Ouates
next prev parent reply other threads:[~2013-06-11 7:27 UTC|newest]
Thread overview: 138+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-10 15:45 [PATCH 1/2] pinmux: Add TB10x pinmux driver Christian Ruppert
2013-04-10 15:45 ` [PATCH 2/2] GPIO: Add TB10x GPIO driver Christian Ruppert
2013-04-17 15:13 ` Linus Walleij
2013-04-17 18:37 ` Stephen Warren
2013-04-17 14:48 ` [PATCH 1/2] pinmux: Add TB10x pinmux driver Linus Walleij
2013-04-17 18:32 ` Stephen Warren
2013-04-18 9:03 ` Christian Ruppert
2013-04-26 7:47 ` Linus Walleij
2013-04-29 16:17 ` Christian Ruppert
[not found] ` <20130429161725.GB30136-7oYq3qWSd+k@public.gmane.org>
2013-05-02 18:49 ` Stephen Warren
2013-05-03 18:03 ` Linus Walleij
2013-05-08 16:41 ` Christian Ruppert
2013-05-08 20:01 ` Stephen Warren
2013-05-10 8:25 ` Christian Ruppert
2013-05-14 12:29 ` Linus Walleij
2013-05-15 9:41 ` Christian Ruppert
2013-05-20 8:03 ` Linus Walleij
2013-05-22 9:49 ` Christian Ruppert
2013-06-12 16:44 ` [RFC] Allow GPIO ranges based on pinctl pin groups Christian Ruppert
[not found] ` <1371055449-15828-1-git-send-email-christian.ruppert-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org>
2013-06-13 9:00 ` Linus Walleij
2013-06-13 12:55 ` [PATCH 1/2] Add pin list based GPIO ranges Christian Ruppert
[not found] ` <1371128132-18266-1-git-send-email-christian.ruppert-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org>
2013-06-13 18:30 ` Linus Walleij
2013-06-14 7:17 ` Patrice CHOTARD
2013-06-14 8:24 ` [PATCH] Fix comment on pinctrl_gpio_range.pin_base Christian Ruppert
2013-06-16 10:19 ` Linus Walleij
2013-06-13 12:55 ` [PATCH 2/2] Make non-linear GPIO ranges accesible from gpiolib Christian Ruppert
2013-06-13 18:36 ` Linus Walleij
2013-06-13 21:38 ` Stephen Warren
2013-06-14 9:12 ` Christian Ruppert
2013-06-19 18:10 ` Stephen Warren
2013-06-19 18:27 ` Stephen Warren
2013-06-20 11:57 ` Christian Ruppert
2013-06-21 21:17 ` Stephen Warren
2013-06-25 11:59 ` Christian Ruppert
2013-06-25 15:59 ` Stephen Warren
2013-06-25 14:27 ` Linus Walleij
2013-06-25 15:19 ` Stephen Warren
2013-06-25 14:32 ` Linus Walleij
2013-06-25 15:22 ` Stephen Warren
2013-06-25 14:56 ` Linus Walleij
2013-06-25 15:31 ` Stephen Warren
2013-06-25 15:47 ` Linus Walleij
2013-06-25 15:28 ` Linus Walleij
2013-06-25 15:39 ` Stephen Warren
2013-06-25 15:53 ` Linus Walleij
2013-06-17 16:03 ` Christian Ruppert
2013-06-17 16:04 ` [PATCH 1/4] " Christian Ruppert
2013-06-18 8:09 ` Linus Walleij
2013-06-18 9:25 ` Christian Ruppert
2013-06-18 9:29 ` Christian Ruppert
2013-06-19 12:03 ` Linus Walleij
2013-06-19 18:15 ` Stephen Warren
2013-06-26 11:42 ` Christian Ruppert
2013-06-26 17:33 ` Stephen Warren
2013-06-19 22:27 ` Stephen Warren
2013-06-26 11:46 ` Christian Ruppert
2013-06-26 17:34 ` Stephen Warren
2013-06-18 9:29 ` [PATCH 2/4] pinmux: Add TB10x pinmux driver Christian Ruppert
2013-06-19 22:35 ` Stephen Warren
2013-06-26 11:50 ` Christian Ruppert
2013-06-26 17:40 ` Stephen Warren
2013-07-05 9:49 ` Christian Ruppert
2013-07-05 18:40 ` Stephen Warren
2013-07-08 13:02 ` Christian Ruppert
2013-07-10 19:27 ` Stephen Warren
2013-07-16 8:47 ` Christian Ruppert
2013-07-16 16:04 ` Stephen Warren
2013-07-18 16:07 ` Christian Ruppert
2013-07-18 19:54 ` Stephen Warren
2013-07-26 9:42 ` Christian Ruppert
2013-07-26 16:05 ` Stephen Warren
2013-07-29 22:35 ` Linus Walleij
2013-08-05 11:51 ` Christian Ruppert
2013-08-14 16:53 ` Linus Walleij
2013-08-21 15:57 ` Christian Ruppert
2013-08-22 20:10 ` Stephen Warren
2013-08-28 14:47 ` Christian Ruppert
2013-10-08 12:21 ` Christian Ruppert
2013-10-08 12:25 ` [PATCH 01/03] Make non-linear GPIO ranges accesible from gpiolib Christian Ruppert
2013-10-09 11:58 ` Linus Walleij
2013-10-09 13:28 ` Christian Ruppert
2013-10-09 14:01 ` Linus Walleij
2013-10-10 20:49 ` Stephen Warren
2013-10-11 7:53 ` Linus Walleij
2013-10-15 13:36 ` Christian Ruppert
2013-10-15 13:37 ` [PATCH V2] " Christian Ruppert
2013-10-16 11:19 ` Linus Walleij
2013-10-16 12:56 ` [PATCH] Add a short note on pinctrl_get_group_pins to pinctrl.txt Christian Ruppert
2013-10-16 13:36 ` Linus Walleij
2013-10-10 20:47 ` [PATCH 01/03] Make non-linear GPIO ranges accesible from gpiolib Stephen Warren
2013-10-08 12:25 ` [PATCH 02/03] pinmux: Add TB10x pinmux driver Christian Ruppert
2013-10-09 12:30 ` Linus Walleij
[not found] ` <CACRpkdZdELan7OyMjt4KOi=q-v1xkSaNZNyZ7AnOBY1R=SoW3w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-10-15 13:39 ` [PATCH V2] " Christian Ruppert
2013-10-16 11:25 ` Linus Walleij
2013-10-08 12:25 ` [PATCH 03/03] GPIO: Add TB10x GPIO driver Christian Ruppert
2013-10-09 12:19 ` Linus Walleij
2013-10-15 13:45 ` Christian Ruppert
2013-10-16 11:29 ` Linus Walleij
2013-10-16 12:58 ` Christian Ruppert
2013-10-24 16:23 ` Christian Ruppert
2013-10-25 21:44 ` Linus Walleij
2013-10-25 3:27 ` Kumar Gala
2013-08-28 18:49 ` [PATCH 2/4] pinmux: Add TB10x pinmux driver Linus Walleij
2013-08-29 7:35 ` Christian Ruppert
2013-08-29 8:24 ` Linus Walleij
2013-08-30 8:19 ` Christian Ruppert
2013-06-18 9:29 ` [PATCH 3/4] GPIO: Add TB10x GPIO driver Christian Ruppert
2013-06-19 22:37 ` Stephen Warren
2013-06-18 9:29 ` [PATCH 4/4] Add Abilis Systems Sarl to device tree vendor prefixes Christian Ruppert
2013-06-17 16:04 ` [PATCH 2/4] pinmux: Add TB10x pinmux driver Christian Ruppert
2013-06-17 16:04 ` [PATCH 3/4] GPIO: Add TB10x GPIO driver Christian Ruppert
2013-06-17 16:04 ` [PATCH 4/4] Add Abilis Systems Sarl to device tree vendor prefixes Christian Ruppert
2013-05-16 0:12 ` [PATCH 1/2] pinmux: Add TB10x pinmux driver Stephen Warren
2013-05-20 8:10 ` Linus Walleij
2013-05-22 14:28 ` Christian Ruppert
2013-05-23 7:43 ` Haojian Zhuang
2013-05-24 11:50 ` Christian Ruppert
2013-05-26 15:49 ` Haojian Zhuang
2013-06-03 12:30 ` Christian Ruppert
[not found] ` <20130603123001.GD31808-7oYq3qWSd+k@public.gmane.org>
2013-06-05 1:44 ` Haojian Zhuang
2013-06-06 14:11 ` Christian Ruppert
2013-06-06 14:32 ` Haojian Zhuang
2013-06-06 15:30 ` Christian Ruppert
2013-06-07 0:00 ` Haojian Zhuang
2013-06-07 11:32 ` Christian Ruppert
[not found] ` <20130607113207.GE11875-7oYq3qWSd+k@public.gmane.org>
2013-06-07 14:57 ` Haojian Zhuang
2013-06-07 19:18 ` Stephen Warren
2013-06-08 8:31 ` Haojian Zhuang
2013-06-09 2:47 ` Stephen Warren
2013-06-11 7:27 ` Christian Ruppert [this message]
2013-06-16 11:11 ` Linus Walleij
2013-05-29 12:21 ` Linus Walleij
2013-06-03 9:42 ` Christian Ruppert
[not found] ` <20130603094204.GC31808-7oYq3qWSd+k@public.gmane.org>
2013-06-07 11:36 ` Linus Walleij
2013-06-07 13:34 ` Christian Ruppert
2013-05-24 9:20 ` Linus Walleij
2013-05-24 12:03 ` Christian Ruppert
[not found] ` <20130418090310.GA17636-7oYq3qWSd+k@public.gmane.org>
2013-05-02 18:52 ` 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=20130611072743.GA14802@ab42.lan \
--to=christian.ruppert@abilis.com \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=grant.likely@secretlab.ca \
--cc=haojian.zhuang@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=patrice.chotard@st.com \
--cc=pierrick.hascoet@abilis.com \
--cc=rob.herring@calxeda.com \
--cc=rob@landley.net \
--cc=sascha.leuenberger@abilis.com \
--cc=shiraz.hashim@st.com \
--cc=swarren@wwwdotorg.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).