[ARM] pxa: add MFP_PULL_FLOAT
authorDaniel Mack <daniel@caiaq.de>
Tue, 11 Aug 2009 12:39:09 +0000 (14:39 +0200)
committerEric Miao <eric.y.miao@gmail.com>
Thu, 10 Sep 2009 10:49:24 +0000 (18:49 +0800)
There is currently an uncovered case for MFP configuration on PXAs which
is selected by setting the PULL_SEL bit but none of the PULL{UP,DOWN}_EN
bits. This case is needed to explicitly let pins float, even if the
selected alternate function would default to a configuration with a pull
resistor enabled.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
arch/arm/plat-pxa/include/plat/mfp.h
arch/arm/plat-pxa/mfp.c

index 6401946..08ad665 100644 (file)
@@ -325,8 +325,9 @@ typedef unsigned long mfp_cfg_t;
 #define MFP_PULL_LOW           (0x1 << 21)
 #define MFP_PULL_HIGH          (0x2 << 21)
 #define MFP_PULL_BOTH          (0x3 << 21)
-#define MFP_PULL_MASK          (0x3 << 21)
-#define MFP_PULL(x)            (((x) >> 21) & 0x3)
+#define MFP_PULL_FLOAT         (0x4 << 21)
+#define MFP_PULL_MASK          (0x7 << 21)
+#define MFP_PULL(x)            (((x) >> 21) & 0x7)
 
 #define MFP_CFG_DEFAULT                (MFP_AF0 | MFP_DS03X | MFP_LPM_DEFAULT |\
                                 MFP_LPM_EDGE_NONE | MFP_PULL_NONE)
index e716c62..9405d03 100644 (file)
  * MFPR_PULL_LOW        1         0        1
  * MFPR_PULL_HIGH       1         1        0
  * MFPR_PULL_BOTH       1         1        1
+ * MFPR_PULL_FLOAT     1         0        0
  */
 #define MFPR_PULL_NONE         (0)
 #define MFPR_PULL_LOW          (MFPR_PULL_SEL | MFPR_PULLDOWN_EN)
 #define MFPR_PULL_BOTH         (MFPR_PULL_LOW | MFPR_PULLUP_EN)
 #define MFPR_PULL_HIGH         (MFPR_PULL_SEL | MFPR_PULLUP_EN)
+#define MFPR_PULL_FLOAT                (MFPR_PULL_SEL)
 
 /* mfp_spin_lock is used to ensure that MFP register configuration
  * (most likely a read-modify-write operation) is atomic, and that
@@ -116,6 +118,7 @@ static const unsigned long mfpr_pull[] = {
        MFPR_PULL_LOW,
        MFPR_PULL_HIGH,
        MFPR_PULL_BOTH,
+       MFPR_PULL_FLOAT,
 };
 
 /* mapping of MFP_LPM_EDGE_* definitions to MFPR_EDGE_* register bits */