]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - arch/arm/mach-tegra/pinmux-common.c
ARM: tegra: pinctrl: minor cleanup
[karo-tx-uboot.git] / arch / arm / mach-tegra / pinmux-common.c
index b4ed153a2e327b828fcf03ba379fa8ff4583ab64..96dbb5e89b7dfd1ab5477673c78b8090c578ad5f 100644 (file)
         ((rcv_sel) <= PMUX_PIN_RCV_SEL_HIGH))
 #endif
 
+#ifdef TEGRA_PMX_PINS_HAVE_E_IO_HV
+/* return 1 if a pin_e_io_hv is in range */
+#define pmux_pin_e_io_hv_isvalid(e_io_hv) \
+       (((e_io_hv) >= PMUX_PIN_E_IO_HV_NORMAL) && \
+        ((e_io_hv) <= PMUX_PIN_E_IO_HV_HIGH))
+#endif
+
 #ifdef TEGRA_PMX_GRPS_HAVE_LPMD
 #define pmux_lpmd_isvalid(lpm) \
        (((lpm) >= PMUX_LPMD_X8) && ((lpm) <= PMUX_LPMD_X))
 
 #endif /* CONFIG_TEGRA20 */
 
-#define DRV_REG(group) _R(0x868 + ((group) * 4))
+#define DRV_REG(group) _R(TEGRA_PMX_SOC_DRV_GROUP_BASE_REG + ((group) * 4))
 
 /*
  * We could force arch-tegraNN/pinmux.h to define all of these. However,
 #ifdef TEGRA_PMX_PINS_HAVE_HSM
 #define HSM_SHIFT      9
 #endif
+#define E_IO_HV_SHIFT  10
 #define OD_SHIFT       11
 #ifdef TEGRA_PMX_PINS_HAVE_SCHMT
 #define SCHMT_SHIFT    12
@@ -342,6 +350,31 @@ static void pinmux_set_rcv_sel(enum pmux_pingrp pin,
 }
 #endif
 
+#ifdef TEGRA_PMX_PINS_HAVE_E_IO_HV
+static void pinmux_set_e_io_hv(enum pmux_pingrp pin,
+                               enum pmux_pin_e_io_hv e_io_hv)
+{
+       u32 *reg = REG(pin);
+       u32 val;
+
+       if (e_io_hv == PMUX_PIN_E_IO_HV_DEFAULT)
+               return;
+
+       /* Error check on pin and e_io_hv */
+       assert(pmux_pingrp_isvalid(pin));
+       assert(pmux_pin_e_io_hv_isvalid(e_io_hv));
+
+       val = readl(reg);
+       if (e_io_hv == PMUX_PIN_E_IO_HV_HIGH)
+               val |= (1 << E_IO_HV_SHIFT);
+       else
+               val &= ~(1 << E_IO_HV_SHIFT);
+       writel(val, reg);
+
+       return;
+}
+#endif
+
 #ifdef TEGRA_PMX_PINS_HAVE_SCHMT
 static void pinmux_set_schmt(enum pmux_pingrp pin, enum pmux_schmt schmt)
 {
@@ -414,6 +447,9 @@ static void pinmux_config_pingrp(const struct pmux_pingrp_config *config)
 #ifdef TEGRA_PMX_PINS_HAVE_RCV_SEL
        pinmux_set_rcv_sel(pin, config->rcv_sel);
 #endif
+#ifdef TEGRA_PMX_PINS_HAVE_E_IO_HV
+       pinmux_set_e_io_hv(pin, config->e_io_hv);
+#endif
 #ifdef TEGRA_PMX_PINS_HAVE_SCHMT
        pinmux_set_schmt(pin, config->schmt);
 #endif
@@ -659,4 +695,4 @@ void pinmux_config_drvgrp_table(const struct pmux_drvgrp_config *config,
        for (i = 0; i < len; i++)
                pinmux_config_drvgrp(&config[i]);
 }
-#endif /* TEGRA_PMX_HAS_DRVGRPS */
+#endif /* TEGRA_PMX_SOC_HAS_DRVGRPS */