                 MFP Configuration for PXA2xx/PXA3xx Processors

			Eric Miao <eric.miao@marvell.com>

MFP stands for Multi-Function Pin, which is the pin-mux logic on PXA3xx and
later PXA series processors.  This document describes the existing MFP API,
and how board/platform driver authors could make use of it.

 Basic Concept
===============

Unlike the GPIO alternate function settings on PXA25x and PXA27x, a new MFP
mechanism is introduced from PXA3xx to completely move the pin-mux functions
out of the GPIO controller. In addition to pin-mux configurations, the MFP
also controls the low power state, driving strength, pull-up/down and event
detection of each pin.  Below is a diagram of internal connections between
the MFP logic and the remaining SoC peripherals:

 +--------+
 |        |--(GPIO19)--+
 |  GPIO  |            |
 |        |--(GPIO...) |
 +--------+            |
                       |       +---------+
 +--------+            +------>|         |
 |  PWM2  |--(PWM_OUT)-------->|   MFP   |
 +--------+            +------>|         |-------> to external PAD
                       | +---->|         |
 +--------+            | | +-->|         |
 |  SSP2  |---(TXD)----+ | |   +---------+
 +--------+              | |
                         | |
 +--------+              | |
 | Keypad |--(MKOUT4)----+ |
 +--------+                |
                           |
 +--------+                |
 |  UART2 |---(TXD)--------+
 +--------+

NOTE: the external pad is named as MFP_PIN_GPIO19, it doesn't necessarily
mean it's dedicated for GPIO19, only as a hint that internally this pin
can be routed from GPIO19 of the GPIO controller.

To better understand the change from PXA25x/PXA27x GPIO alternate function
to this new MFP mechanism, here are several key points:

  1. GPIO controller on PXA3xx is now a dedicated controller, same as other
     internal controllers like PWM, SSP and UART, with 128 internal signals
     which can be routed to external through one or more MFPs (e.g. GPIO<0>
     can be routed through either MFP_PIN_GPIO0 as well as MFP_PIN_GPIO0_2,
     see arch/arm/mach-pxa/mach/include/mfp-pxa300.h)

  2. Alternate function configuration is removed from this GPIO controller,
     the remaining functions are pure GPIO-specific, i.e.

       - GPIO signal level control
       - GPIO direction control
       - GPIO level change detection

  3. Low power state for each pin is now controlled by MFP, this means the
     PGSRx registers on PXA2xx are now useless on PXA3xx

  4. Wakeup detection is now controlled by MFP, PWER does not control the
     wakeup from GPIO(s) any more, depending on the sleeping state, ADxER
     (as defined in pxa3xx-regs.h) controls the wakeup from MFP

NOTE: with such a clear separation of MFP and GPIO, by GPIO<xx> we normally
mean it is a GPIO signal, and by MFP<xxx> or pin xxx, we mean a physical
pad (or ball).

 MFP API Usage
===============

For board code writers, here are some guidelines:

1. include ONE of the following header files in your <board>.c:

   - #include <mach/mfp-pxa25x.h>
   - #include <mach/mfp-pxa27x.h>
   - #include <mach/mfp-pxa300.h>
   - #include <mach/mfp-pxa320.h>
   - #include <mach/mfp-pxa930.h>

   NOTE: only one file in your <board>.c, depending on the processors used,
   because pin configuration definitions may conflict in these file (i.e.
   same name, different meaning and settings on different processors). E.g.
   for zylonite platform, which support both PXA300/PXA310 and PXA320, two
   separate files are introduced: zylonite_pxa300.c and zylonite_pxa320.c
   (in addition to handle MFP configuration differences, they also handle
   the other differences between the two combinations).

   NOTE: PXA300 and PXA310 are almost identical in pin configurations (with
   PXA310 supporting some additional ones), thus the difference is actually
   covered in a single mfp-pxa300.h.

2. prepare an array for the initial pin configurations, e.g.:

   static unsigned long mainstone_pin_config[] __initdata = {
	/* Chip Select */
	GPIO15_nCS_1,

	/* LCD - 16bpp Active TFT */
	GPIOxx_TFT_LCD_16BPP,
	GPIO16_PWM0_OUT,	/* Backlight */

	/* MMC */
	GPIO32_MMC_CLK,
	GPIO112_MMC_CMD,
	GPIO92_MMC_DAT_0,
	GPIO109_MMC_DAT_1,
	GPIO110_MMC_DAT_2,
	GPIO111_MMC_DAT_3,

	...

	/* GPIO */
	GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH,
   };

   a) once the pin configurations are passed to pxa{2xx,3xx}_mfp_config(),
   and written to the actual registers, they are useless and may discard,
   adding '__initdata' will help save some additional bytes here.

   b) when there is only one possible pin configurations for a component,
   some simplified definitions can be used, e.g. GPIOxx_TFT_LCD_16BPP on
   PXA25x and PXA27x processors

   c) if by board design, a pin can be configured to wake up the system
   from low power state, it can be 'OR'ed with any of:

      WAKEUP_ON_EDGE_BOTH
      WAKEUP_ON_EDGE_RISE
      WAKEUP_ON_EDGE_FALL
      WAKEUP_ON_LEVEL_HIGH - specifically for enabling of keypad GPIOs,

   to indicate that this pin has the capability of wake-up the system,
   and on which edge(s). This, however, doesn't necessarily mean the
   pin _will_ wakeup the system, it will only when set_irq_wake() is
   invoked with the corresponding GPIO IRQ (GPIO_IRQ(xx) or gpio_to_irq())
   and eventually calls gpio_set_wake() for the actual register setting.

   d) although PXA3xx MFP supports edge detection on each pin, the
   internal logic will only wakeup the system when those specific bits
   in ADxER registers are set, which can be well mapped to the
   corresponding peripheral, thus set_irq_wake() can be called with 
   the peripheral IRQ to enable the wakeup.


 MFP on PXA3xx
===============

Every external I/O pad on PXA3xx (excluding those for special purpose) has
one MFP logic associated, and is controlled by one MFP register (MFPR).

The MFPR has the following bit definitions (for PXA300/PXA310/PXA320):

 31                        16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
  +-------------------------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |         RESERVED        |PS|PU|PD|  DRIVE |SS|SD|SO|EC|EF|ER|--| AF_SEL |
  +-------------------------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

  Bit 3:   RESERVED
  Bit 4:   EDGE_RISE_EN - enable detection of rising edge on this pin
  Bit 5:   EDGE_FALL_EN - enable detection of falling edge on this pin
  Bit 6:   EDGE_CLEAR   - disable edge detection on this pin
  Bit 7:   SLEEP_OE_N   - enable outputs during low power modes
  Bit 8:   SLEEP_DATA   - output data on the pin during low power modes
  Bit 9:   SLEEP_SEL    - selection control for low power modes signals
  Bit 13:  PULLDOWN_EN  - enable the internal pull-down resistor on this pin
  Bit 14:  PULLUP_EN    - enable the internal pull-up resistor on this pin
  Bit 15:  PULL_SEL     - pull state controlled by selected alternate function
                          (0) or by PULL{UP,DOWN}_EN bits (1)

  Bit 0 - 2: AF_SEL - alternate function selection, 8 possibilities, from 0-7
  Bit 10-12: DRIVE  - drive strength and slew rate
			0b000 - fast 1mA
			0b001 - fast 2mA
			0b002 - fast 3mA
			0b003 - fast 4mA
			0b004 - slow 6mA
			0b005 - fast 6mA
			0b006 - slow 10mA
			0b007 - fast 10mA

 MFP Design for PXA2xx/PXA3xx
==============================

Due to the difference of pin-mux handling between PXA2xx and PXA3xx, a unified
MFP API is introduced to cover both series of processors.

The basic idea of this design is to introduce definitions for all possible pin
configurations, these definitions are processor and platform independent, and
the actual API invoked to convert these definitions into register settings and
make them effective there-after.

  Files Involved
  --------------

  - arch/arm/mach-pxa/include/mach/mfp.h
  
  for
    1. Unified pin definitions - enum constants for all configurable pins
    2. processor-neutral bit definitions for a possible MFP configuration

  - arch/arm/mach-pxa/include/mach/mfp-pxa3xx.h

  for PXA3xx specific MFPR register bit definitions and PXA3xx common pin
  configurations

  - arch/arm/mach-pxa/include/mach/mfp-pxa2xx.h

  for PXA2xx specific definitions and PXA25x/PXA27x common pin configurations

  - arch/arm/mach-pxa/include/mach/mfp-pxa25x.h
    arch/arm/mach-pxa/include/mach/mfp-pxa27x.h
    arch/arm/mach-pxa/include/mach/mfp-pxa300.h
    arch/arm/mach-pxa/include/mach/mfp-pxa320.h
    arch/arm/mach-pxa/include/mach/mfp-pxa930.h

  for processor specific definitions

  - arch/arm/mach-pxa/mfp-pxa3xx.c
  - arch/arm/mach-pxa/mfp-pxa2xx.c

  for implementation of the pin configuration to take effect for the actual
  processor.

  Pin Configuration
  -----------------

  The following comments are copied from mfp.h (see the actual source code
  for most updated info)
  
  /*
   * a possible MFP configuration is represented by a 32-bit integer
   *
   * bit  0.. 9 - MFP Pin Number (1024 Pins Maximum)
   * bit 10..12 - Alternate Function Selection
   * bit 13..15 - Drive Strength
   * bit 16..18 - Low Power Mode State
   * bit 19..20 - Low Power Mode Edge Detection
   * bit 21..22 - Run Mode Pull State
   *
   * to facilitate the definition, the following macros are provided
   *
   * MFP_CFG_DEFAULT - default MFP configuration value, with
   * 		  alternate function = 0,
   * 		  drive strength = fast 3mA (MFP_DS03X)
   * 		  low power mode = default
   * 		  edge detection = none
   *
   * MFP_CFG	- default MFPR value with alternate function
   * MFP_CFG_DRV	- default MFPR value with alternate function and
   * 		  pin drive strength
   * MFP_CFG_LPM	- default MFPR value with alternate function and
   * 		  low power mode
   * MFP_CFG_X	- default MFPR value with alternate function,
   * 		  pin drive strength and low power mode
   */

   Examples of pin configurations are:

   #define GPIO94_SSP3_RXD		MFP_CFG_X(GPIO94, AF1, DS08X, FLOAT)

   which reads GPIO94 can be configured as SSP3_RXD, with alternate function
   selection of 1, driving strength of 0b101, and a float state in low power
   modes.

   NOTE: this is the default setting of this pin being configured as SSP3_RXD
   which can be modified a bit in board code, though it is not recommended to
   do so, simply because this default setting is usually carefully encoded,
   and is supposed to work in most cases.

  Register Settings
  -----------------

   Register settings on PXA3xx for a pin configuration is actually very
   straight-forward, most bits can be converted directly into MFPR value
   in a easier way. Two sets of MFPR values are calculated: the run-time
   ones and the low power mode ones, to allow different settings.

   The conversion from a generic pin configuration to the actual register
   settings on PXA2xx is a bit complicated: many registers are involved,
   including GAFRx, GPDRx, PGSRx, PWER, PKWR, PFER and PRER. Please see
   mfp-pxa2xx.c for how the conversion is made.
