]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - arch/arm/include/asm/imx-common/iomux-v3.h
Update from 2013.01 to 2013.07
[karo-tx-uboot.git] / arch / arm / include / asm / imx-common / iomux-v3.h
index 860c8cfe4614e15211ad9162c013d1a90bb6c7c6..af4f835405466a59bd09ca6660087d61fed59ef3 100644 (file)
@@ -5,24 +5,14 @@
  *
  * Copyright (C) 2011 Freescale Semiconductor, Inc.
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #ifndef __ASM_ARCH_IOMUX_V3_H__
 #define __ASM_ARCH_IOMUX_V3_H__
 
+#include <common.h>
+
 /*
  *     build IOMUX_PAD structure
  *
  *
  * IOMUX/PAD Bit field definitions
  *
- * MUX_CTRL_OFS:           0..11 (12)
- * PAD_CTRL_OFS:          12..23 (12)
- * SEL_INPUT_OFS:         24..35 (12)
- * MUX_MODE + SION:       36..40  (5)
+ * MUX_CTRL_OFS:                0..11 (12)
+ * PAD_CTRL_OFS:               12..23 (12)
+ * SEL_INPUT_OFS:              24..35 (12)
+ * MUX_MODE + SION:            36..40  (5)
  * PAD_CTRL + PAD_CTRL_VALID:  41..58 (18)
- * SEL_INP:               59..62  (4)
- * reserved:                63    (1)
+ * SEL_INP:                    59..62  (4)
+ * reserved:                     63    (1)
 */
 
 typedef u64 iomux_v3_cfg_t;
@@ -69,12 +59,13 @@ typedef u64 iomux_v3_cfg_t;
 #define MUX_MODE_SHIFT         36
 #define MUX_MODE_MASK          ((iomux_v3_cfg_t)0x1f << MUX_MODE_SHIFT)
 #define MUX_PAD_CTRL_SHIFT     41
-#define MUX_PAD_CTRL_MASK      ((iomux_v3_cfg_t)0x3ffff << MUX_PAD_CTRL_SHIFT)
+#define MUX_PAD_CTRL_MASK      ((iomux_v3_cfg_t)0x1ffff << MUX_PAD_CTRL_SHIFT)
 #define MUX_SEL_INPUT_SHIFT    59
 #define MUX_SEL_INPUT_MASK     ((iomux_v3_cfg_t)0xf << MUX_SEL_INPUT_SHIFT)
 
-#define MUX_PAD_CTRL(x)                (((iomux_v3_cfg_t)(x) << MUX_PAD_CTRL_SHIFT) | \
-                               PAD_CTRL_VALID)
+#define __MUX_PAD_CTRL(x)      ((x) | __PAD_CTRL_VALID)
+#define MUX_PAD_CTRL(x)                (((iomux_v3_cfg_t)__MUX_PAD_CTRL(x) << \
+                                               MUX_PAD_CTRL_SHIFT))
 
 #define IOMUX_PAD(pad_ctrl_ofs, mux_ctrl_ofs, mux_mode, sel_input_ofs, \
                sel_input, pad_ctrl)                                    \
@@ -85,9 +76,92 @@ typedef u64 iomux_v3_cfg_t;
        ((iomux_v3_cfg_t)(sel_input_ofs) << MUX_SEL_INPUT_OFS_SHIFT)|   \
        ((iomux_v3_cfg_t)(sel_input)     << MUX_SEL_INPUT_SHIFT))
 
-#define NO_PAD_CTRL            (1 << 17)
+#define NEW_PAD_CTRL(cfg, pad) (((cfg) & ~MUX_PAD_CTRL_MASK) | \
+                                       MUX_PAD_CTRL(pad))
+
+#define __NA_                  0x000
+#define NO_MUX_I               0
+#define NO_PAD_I               0
+
+#define NO_MUX_I               0
+#define NO_PAD_I               0
+
+#define NO_PAD_CTRL            0
+#define __PAD_CTRL_VALID       (1 << 17)
+#define PAD_CTRL_VALID         ((iomux_v3_cfg_t)__PAD_CTRL_VALID << MUX_PAD_CTRL_SHIFT)
+
+#ifdef CONFIG_MX6
+
+#define PAD_CTL_HYS            __MUX_PAD_CTRL(1 << 16)
+
+#define PAD_CTL_PUS_100K_DOWN  __MUX_PAD_CTRL(0 << 14 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_47K_UP     __MUX_PAD_CTRL(1 << 14 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_100K_UP    __MUX_PAD_CTRL(2 << 14 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_22K_UP     __MUX_PAD_CTRL(3 << 14 | PAD_CTL_PUE)
+#define PAD_CTL_PUE            __MUX_PAD_CTRL(1 << 13 | PAD_CTL_PKE)
+#define PAD_CTL_PKE            __MUX_PAD_CTRL(1 << 12)
+
+#define PAD_CTL_ODE            __MUX_PAD_CTRL(1 << 11)
+
+#define PAD_CTL_SPEED_LOW      __MUX_PAD_CTRL(1 << 6)
+#define PAD_CTL_SPEED_MED      __MUX_PAD_CTRL(2 << 6)
+#define PAD_CTL_SPEED_HIGH     __MUX_PAD_CTRL(3 << 6)
+
+#define PAD_CTL_DSE_DISABLE    __MUX_PAD_CTRL(0 << 3)
+#define PAD_CTL_DSE_240ohm     __MUX_PAD_CTRL(1 << 3)
+#define PAD_CTL_DSE_120ohm     __MUX_PAD_CTRL(2 << 3)
+#define PAD_CTL_DSE_80ohm      __MUX_PAD_CTRL(3 << 3)
+#define PAD_CTL_DSE_60ohm      __MUX_PAD_CTRL(4 << 3)
+#define PAD_CTL_DSE_48ohm      __MUX_PAD_CTRL(5 << 3)
+#define PAD_CTL_DSE_40ohm      __MUX_PAD_CTRL(6 << 3)
+#define PAD_CTL_DSE_34ohm      __MUX_PAD_CTRL(7 << 3)
+
+#elif defined(CONFIG_VF610)
+
+#define PAD_MUX_MODE_SHIFT     20
+
+#define PAD_CTL_SPEED_MED      __MUX_PAD_CTRL(1 << 12)
+#define PAD_CTL_SPEED_HIGH     __MUX_PAD_CTRL(3 << 12)
+
+#define PAD_CTL_DSE_50ohm      __MUX_PAD_CTRL(3 << 6)
+#define PAD_CTL_DSE_25ohm      __MUX_PAD_CTRL(6 << 6)
+#define PAD_CTL_DSE_20ohm      __MUX_PAD_CTRL(7 << 6)
+
+#define PAD_CTL_PUS_47K_UP     __MUX_PAD_CTRL(1 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_100K_UP    __MUX_PAD_CTRL(2 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PKE            __MUX_PAD_CTRL(1 << 3)
+#define PAD_CTL_PUE            __MUX_PAD_CTRL(1 << 2 | PAD_CTL_PKE)
+
+#define PAD_CTL_OBE_IBE_ENABLE __MUX_PAD_CTRL(3 << 0)
+
+#else
+
+#define PAD_CTL_DVS            __MUX_PAD_CTRL(1 << 13)
+#define PAD_CTL_INPUT_DDR      __MUX_PAD_CTRL(1 << 9)
+#define PAD_CTL_HYS            __MUX_PAD_CTRL(1 << 8)
+
+#define PAD_CTL_PKE            __MUX_PAD_CTRL(1 << 7)
+#define PAD_CTL_PUE            __MUX_PAD_CTRL(1 << 6 | PAD_CTL_PKE)
+#define PAD_CTL_PUS_100K_DOWN  __MUX_PAD_CTRL(0 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_47K_UP     __MUX_PAD_CTRL(1 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_100K_UP    __MUX_PAD_CTRL(2 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_22K_UP     __MUX_PAD_CTRL(3 << 4 | PAD_CTL_PUE)
+
+#define PAD_CTL_ODE            __MUX_PAD_CTRL(1 << 3)
+
+#define PAD_CTL_DSE_LOW                __MUX_PAD_CTRL(0 << 1)
+#define PAD_CTL_DSE_MED                __MUX_PAD_CTRL(1 << 1)
+#define PAD_CTL_DSE_HIGH       __MUX_PAD_CTRL(2 << 1)
+#define PAD_CTL_DSE_MAX                __MUX_PAD_CTRL(3 << 1)
+
+#endif
+
+#define PAD_CTL_SRE_SLOW       __MUX_PAD_CTRL(0 << 0)
+#define PAD_CTL_SRE_FAST       __MUX_PAD_CTRL(1 << 0)
+
+#define IOMUX_CONFIG_SION      0x10
+
 #define GPIO_PIN_MASK          0x1f
-#define PAD_CTRL_VALID         ((iomux_v3_cfg_t)1 << (MUX_PAD_CTRL_SHIFT + 17))
 #define GPIO_PORT_SHIFT                5
 #define GPIO_PORT_MASK         (0x7 << GPIO_PORT_SHIFT)
 #define GPIO_PORTA             (0 << GPIO_PORT_SHIFT)
@@ -97,11 +171,8 @@ typedef u64 iomux_v3_cfg_t;
 #define GPIO_PORTE             (4 << GPIO_PORT_SHIFT)
 #define GPIO_PORTF             (5 << GPIO_PORT_SHIFT)
 
-#define MUX_CONFIG_SION                (0x1 << 4)
-
-
-int imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad);
-int imx_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t const *pad_list,
+void imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad);
+void imx_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t const *pad_list,
                                     unsigned count);
 
 #endif /* __ASM_ARCH_IOMUX_V3_H__*/