From: Stephen Warren <swarren@wwwdotorg.org>
To: Haojian Zhuang <haojian.zhuang@linaro.org>
Cc: Christian Ruppert <christian.ruppert@abilis.com>,
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: Sat, 08 Jun 2013 20:47:37 -0600 [thread overview]
Message-ID: <51B3ECC9.9000906@wwwdotorg.org> (raw)
In-Reply-To: <CAD6h2NR=3uhc0dnkoa_8rXz1QerSXaS0bY0ny0a8Lk0TaSPhUg@mail.gmail.com>
On 06/08/2013 02:31 AM, Haojian Zhuang wrote:
> On 8 June 2013 03:18, Stephen Warren <swarren@wwwdotorg.org> 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.
>
> Actually we can get each GPIO in the SoC. But we need to do some workaround.
>
> 1. As we discussed, we need to pretend a pin group as a single pin.
>
> 2. In DTS, we need to define "gpio-ranges" in gpio node and
> "pinctrl-single,gpio-range"
> in pinmux node as below.
>
> gpio {
> /* gpio offset, pin offset, nr pins */
> /* skip GPIOA1 & GPIOA3, PIN0 means pin1/pin2, PIN1 means
> pin3/pin4 */
> gpio-ranges = <&pmx 0 0 1 &pmx 2 1 1>;
> };
>
> pmx {
> /* pin offset, nr pins, gpio function */
> pinctrl-single,gpio-range = <&range 0 1 0 &range 1 1 0>
> };
> range {
> #pinctrl-single,gpio-range-cells = <3>;
> };
>
> Because we pretend pin1/pin2 as one single pin (PIN1), we skip to define it
> in gpio-ranges. This range is only help you to find right pinmux controller.
>
> Yes, I agree that pinctrl-single driver isn't 100% appropriate. But it
> could work.
> I verified it.
Yeah, that sounds pretty horrible, sorry.
next prev parent reply other threads:[~2013-06-09 2:47 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 [this message]
2013-06-11 7:27 ` Christian Ruppert
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=51B3ECC9.9000906@wwwdotorg.org \
--to=swarren@wwwdotorg.org \
--cc=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 \
/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).