]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - arch/arm/mach-tegra/pinmux-common.c
ARM: tegra: pinmux: support Tegra210's e_io_hv pin option
[karo-tx-uboot.git] / arch / arm / mach-tegra / pinmux-common.c
index 9bf30869712e7dde8e1e29cbc7689ba5a0ce0317..912f65e98b06e999ad8101c29dd71e62fff5e229 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))
 #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