How to add GPIO outputs to the PXA2xx MFP configuration?

Haojian Zhuang haojian.zhuang at gmail.com
Fri Mar 30 09:25:50 EDT 2012


On Fri, Mar 30, 2012 at 6:41 PM, Paul Parsons <lost.distance at yahoo.com> wrote:
> --- On Fri, 30/3/12, Haojian Zhuang <haojian.zhuang at gmail.com> wrote:
>> On Thu, Mar 29, 2012 at 2:12 AM, Paul
>> Parsons <lost.distance at yahoo.com>
>> wrote:
>> > On PXA2xx platforms, the MFP API (described in
>> Documentation/arm/pxa/mfp.txt)
>> > provides values for the following:
>> >
>> > 1. GPIO inputs (e.g. GPIO105_GPIO).
>> > 2. Alternate function inputs (e.g. GPIO105_CIF_DD_1).
>> > 3. Alternate function outputs (e.g.
>> GPIO105_KP_MKOUT_2).
>> >
>> > It does not provide values for GPIO outputs (i.e. AF0
>> outputs).
>> >
>> > One cannot use the macro used by the MFP API internally
>> - MFP_CFG_OUT() - to
>> > define new GPIO output values, since that macro is
>> forbidden in platform code.
>> >
>> > Without the ability to add GPIO outputs to the MFP
>> configuration, it is not
>> > possible to drive GPIO outputs high during sleep mode.
>> >
>> > This would be useful, for example, on the hx4700
>> platform, where driving the
>> > infrared powerdown GPIO 105 high during sleep mode
>> would save some mA.
>> >
>> > So my question is: what method should one use to add
>> GPIO outputs to the MFP
>> > configuration?
>> >
>> > One possible method, namely manually defining values in
>> the platform code:
>> >
>> >        MFP_PIN_GPIO105 | MFP_AF0 | MFP_DIR_OUT |
>> MFP_LPM_DRIVE_HIGH,
>> >
>> > is essentially no different from using the forbidden
>> MFP_CFG_OUT() macro.
>> >
>>
>> Does MFP_CFG_OUT() help you? This macro is defined in
>> mfp-pxa2xx.h.
>
> Yes, MFP_CFG_OUT() does help. But it has been pointed out that
> MFP_CFG_OUT() is not allowed to be used in board support code:
>
> http://lists.infradead.org/pipermail/linux-arm-kernel/2012-February/086456.html
>
> Is that no longer true?

I'm sorry that I messed it. Since GPIOxx_GPIO is always defined as MFP_CFG_IN().
It seems that you're blocked to specify MFP_CFG_OUT().

Actually it's not a problem. While you're using it as output, you must
assign special
usage for this pin, like some peripheral rest signal. So I think that
you can define new
macro GPIOxx_yy() in mfp-pxa27x.h, like GPIO9_HZ_CLK(). Is it meaningful?

Best Regards
Haojian



More information about the linux-arm-kernel mailing list