@ -61,12 +61,12 @@
( ( ( lpm ) > = PMUX_LPMD_X8 ) & & ( ( lpm ) < = PMUX_LPMD_X ) )
# endif
# ifdef TEGRA_PMX_GRPS_HAVE_SCHMT
# if defined(TEGRA_PMX_PINS_HAVE_SCHMT) || defined( TEGRA_PMX_GRPS_HAVE_SCHMT)
# define pmux_schmt_isvalid(schmt) \
( ( ( schmt ) > = PMUX_SCHMT_DISABLE ) & & ( ( schmt ) < = PMUX_SCHMT_ENABLE ) )
# endif
# ifdef TEGRA_PMX_GRPS_HAVE_HSM
# if defined(TEGRA_PMX_PINS_HAVE_HSM) || defined( TEGRA_PMX_GRPS_HAVE_HSM)
# define pmux_hsm_isvalid(hsm) \
( ( ( hsm ) > = PMUX_HSM_DISABLE ) & & ( ( hsm ) < = PMUX_HSM_ENABLE ) )
# endif
@ -110,7 +110,13 @@
# ifdef CONFIG_TEGRA210
# define IO_SHIFT 6
# define LOCK_SHIFT 7
# ifdef TEGRA_PMX_PINS_HAVE_HSM
# define HSM_SHIFT 9
# endif
# define OD_SHIFT 11
# ifdef TEGRA_PMX_PINS_HAVE_SCHMT
# define SCHMT_SHIFT 12
# endif
# else
# define IO_SHIFT 5
# define OD_SHIFT 6
@ -336,6 +342,56 @@ static void pinmux_set_rcv_sel(enum pmux_pingrp pin,
}
# endif
# ifdef TEGRA_PMX_PINS_HAVE_SCHMT
static void pinmux_set_schmt ( enum pmux_pingrp pin , enum pmux_schmt schmt )
{
u32 * reg = REG ( grp ) ;
u32 val ;
/* NONE means unspecified/do not change/use POR value */
if ( schmt = = PMUX_SCHMT_NONE )
return ;
/* Error check pad */
assert ( pmux_pingrp_isvalid ( pin ) ) ;
assert ( pmux_schmt_isvalid ( schmt ) ) ;
val = readl ( reg ) ;
if ( schmt = = PMUX_SCHMT_ENABLE )
val | = ( 1 < < SCHMT_SHIFT ) ;
else
val & = ~ ( 1 < < SCHMT_SHIFT ) ;
writel ( val , reg ) ;
return ;
}
# endif
# ifdef TEGRA_PMX_PINS_HAVE_HSM
static void pinmux_set_hsm ( enum pmux_pingrp pin , enum pmux_hsm hsm )
{
u32 * reg = REG ( grp ) ;
u32 val ;
/* NONE means unspecified/do not change/use POR value */
if ( hsm = = PMUX_HSM_NONE )
return ;
/* Error check pad */
assert ( pmux_pingrp_isvalid ( pin ) ) ;
assert ( pmux_hsm_isvalid ( hsm ) ) ;
val = readl ( reg ) ;
if ( hsm = = PMUX_HSM_ENABLE )
val | = ( 1 < < HSM_SHIFT ) ;
else
val & = ~ ( 1 < < HSM_SHIFT ) ;
writel ( val , reg ) ;
return ;
}
# endif
static void pinmux_config_pingrp ( const struct pmux_pingrp_config * config )
{
enum pmux_pingrp pin = config - > pingrp ;
@ -358,6 +414,12 @@ 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_SCHMT
pinmux_set_schmt ( pin , config - > schmt ) ;
# endif
# ifdef TEGRA_PMX_PINS_HAVE_HSM
pinmux_set_hsm ( pin , config - > hsm ) ;
# endif
}
void pinmux_config_pingrp_table ( const struct pmux_pingrp_config * config ,