From: joravec@drewtech.com (Joey Oravec)
To: linux-arm-kernel@lists.infradead.org
Subject: plat-orion multi purpose pins problem for mv78200
Date: Tue, 12 Jul 2011 09:36:59 -0400 [thread overview]
Message-ID: <4E1C4DFB.2080906@drewtech.com> (raw)
In-Reply-To: <CAMAG_efdj0cHkBZW37H=jcK2ZpXOQfg56HXXDLd=86HLcoNQzw@mail.gmail.com>
On 7/10/2011 9:21 AM, saeed bishara wrote:
>>> I agree, this is why we need some method to make the orion_mpp_conf()
>>> know which mpps are gpios, when that done, then the gpio of MPP47 in
>>> your case will not be set as invalid.
>>> one option to do that is to assume that mpp with _in == out_ == 0 is
>>> not a gpio. so the orion_mpp_conf() will look like this:
>>> --- a/arch/arm/plat-orion/mpp.c
>>> +++ b/arch/arm/plat-orion/mpp.c
>>> @@ -41,6 +41,7 @@ void __init orion_mpp_conf(unsigned int *mpp_list,
>>> unsigned int variant_mask,
>>> for ( ; *mpp_list; mpp_list++) {
>>> unsigned int num = MPP_NUM(*mpp_list);
>>> unsigned int sel = MPP_SEL(*mpp_list);
>>> + unsigned int gpio_num = MPP_GPIO(*mpp_list);
>>> int shift, gpio_mode;
>>>
>>> if (num> mpp_max) {
>>> @@ -64,9 +65,8 @@ void __init orion_mpp_conf(unsigned int *mpp_list,
>>> unsigned int variant_mask,
>>> gpio_mode |= GPIO_INPUT_OK;
>>> if (*mpp_list& MPP_OUTPUT_MASK)
>>> gpio_mode |= GPIO_OUTPUT_OK;
>>> - if (sel != 0)
>>> - gpio_mode = 0;
>>> - orion_gpio_set_valid(num, gpio_mode);
>>> + if (gpio_mode != 0)
>>> + orion_gpio_set_valid(gpio_num, gpio_mode);
>>> }
>>>
>>>
>>> and of course this will require that any non gpio mpp will have to
>>> have the _in and _out set to 0.
>> Yes this proposal is better for mv78xx0 than the current code, but it may
>> fail if you call orion_mpp_conf() multiple times. Imagine you setup the
>> MPP16_GPIO as described, then a subsequent call wants to configure
>> differently and sets:
> the issue that you're describing is theoretical and doesn't happen at
> least in the boards that supported by the kernel.
> I don't think it deserve to complicate our code.
I agree no boards are currently doing this, especially since the
functions are marked __init and the code is not capable of it today. But
it's reasonable that a driver would want to switch MPPs between a
peripheral and a high-impedance state, for example during suspend/resume.
>> MPP16_UNUSED (this mpp corresponds to GPIO16)
>>
>> Note orion_gpio_set_valid() contains code to mark GPIOs as valid or invalid,
>> but proposed change will only make a call to mark a GPIO as valid. This
>> example would reconfigure the MPP but leave the GPIO marked valid.
>>
>> Eventually, we would need to handle this example to implement the proposed
>> pinmux API. Right?
> it makes sense. have you tried it?
The latest proposal I could find is from June:
http://lists.infradead.org/pipermail/linux-arm-kernel/2011-June/052955.html
I have not tried to implement that API yet. The proposal allows changing
mux settings at any time, so it seems like the mv78xx0 should be
prepared to do that at some point in the future.
-joey
prev parent reply other threads:[~2011-07-12 13:36 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-01 19:14 plat-orion multi purpose pins problem for mv78200 Joey Oravec
2011-07-01 21:56 ` Joey Oravec
2011-07-02 12:23 ` Simon Guinot
2011-07-03 12:46 ` saeed bishara
2011-07-04 14:33 ` [PATCH v2] genirq: replace irq_gc_ack() with {set,clr}_bit variants Simon Guinot
2011-07-04 14:48 ` [PATCH v2] genirq: replace irq_gc_ack() with {set, clr}_bit variants Nicolas Pitre
2011-07-16 3:39 ` Kukjin Kim
2011-07-06 15:31 ` [PATCH v2] genirq: replace irq_gc_ack() with {set,clr}_bit variants Simon Guinot
2011-07-05 15:37 ` plat-orion multi purpose pins problem for mv78200 Joey Oravec
2011-07-06 16:18 ` Simon Guinot
2011-07-06 16:32 ` saeed bishara
2011-07-06 18:49 ` Joey Oravec
2011-07-07 6:40 ` saeed bishara
2011-07-07 13:49 ` Joey Oravec
2011-07-10 13:21 ` saeed bishara
2011-07-12 13:36 ` Joey Oravec [this message]
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=4E1C4DFB.2080906@drewtech.com \
--to=joravec@drewtech.com \
--cc=linux-arm-kernel@lists.infradead.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.