@ -24,31 +24,37 @@
# define pmux_pin_tristate_isvalid(tristate) \
( ( ( tristate ) > = PMUX_TRI_NORMAL ) & & ( ( tristate ) < = PMUX_TRI_TRISTATE ) )
# ifdef TEGRA_PMX_HAS_PIN_IO_BIT_ETC
# ifdef TEGRA_PMX_PINS_HAVE_E_INPUT
/* return 1 if a pin_io_is in range */
# define pmux_pin_io_isvalid(io) \
( ( ( io ) > = PMUX_PIN_OUTPUT ) & & ( ( io ) < = PMUX_PIN_INPUT ) )
# endif
# ifdef TEGRA_PMX_PINS_HAVE_LOCK
/* return 1 if a pin_lock is in range */
# define pmux_pin_lock_isvalid(lock) \
( ( ( lock ) > = PMUX_PIN_LOCK_DISABLE ) & & ( ( lock ) < = PMUX_PIN_LOCK_ENABLE ) )
# endif
# ifdef TEGRA_PMX_PINS_HAVE_OD
/* return 1 if a pin_od is in range */
# define pmux_pin_od_isvalid(od) \
( ( ( od ) > = PMUX_PIN_OD_DISABLE ) & & ( ( od ) < = PMUX_PIN_OD_ENABLE ) )
# endif
# ifdef TEGRA_PMX_PINS_HAVE_IO_RESET
/* return 1 if a pin_ioreset_is in range */
# define pmux_pin_ioreset_isvalid(ioreset) \
( ( ( ioreset ) > = PMUX_PIN_IO_RESET_DISABLE ) & & \
( ( ioreset ) < = PMUX_PIN_IO_RESET_ENABLE ) )
# endif
# ifdef TEGRA_PMX_HAS _RCV_SEL
# ifdef TEGRA_PMX_PINS_HAVE _RCV_SEL
/* return 1 if a pin_rcv_sel_is in range */
# define pmux_pin_rcv_sel_isvalid(rcv_sel) \
( ( ( rcv_sel ) > = PMUX_PIN_RCV_SEL_NORMAL ) & & \
( ( rcv_sel ) < = PMUX_PIN_RCV_SEL_HIGH ) )
# endif /* TEGRA_PMX_HAS_RCV_SEL */
# endif /* TEGRA_PMX_HAS_PIN_IO_BIT_ETC */
# endif
# define _R(offset) (u32 *)(NV_PA_APB_MISC_BASE + (offset))
@ -86,7 +92,7 @@
# define IO_RESET_SHIFT 8
# define RCV_SEL_SHIFT 9
# if !defined(CONFIG_TEGRA20) && !defined(CONFIG_TEGRA30)
# ifdef TEGRA_PMX_SOC_HAS_IO_CLAMPING
/* This register/field only exists on Tegra114 and later */
# define APB_MISC_PP_PINMUX_GLOBAL_0 0x40
# define CLAMP_INPUTS_WHEN_TRISTATED 1
@ -180,7 +186,7 @@ void pinmux_tristate_disable(enum pmux_pingrp pin)
pinmux_set_tristate ( pin , PMUX_TRI_NORMAL ) ;
}
# ifdef TEGRA_PMX_HAS_PIN_IO_BIT_ETC
# ifdef TEGRA_PMX_PINS_HAVE_E_INPUT
void pinmux_set_io ( enum pmux_pingrp pin , enum pmux_pin_io io )
{
u32 * reg = REG ( pin ) ;
@ -200,7 +206,9 @@ void pinmux_set_io(enum pmux_pingrp pin, enum pmux_pin_io io)
val & = ~ ( 1 < < IO_SHIFT ) ;
writel ( val , reg ) ;
}
# endif
# ifdef TEGRA_PMX_PINS_HAVE_LOCK
static void pinmux_set_lock ( enum pmux_pingrp pin , enum pmux_pin_lock lock )
{
u32 * reg = REG ( pin ) ;
@ -225,7 +233,9 @@ static void pinmux_set_lock(enum pmux_pingrp pin, enum pmux_pin_lock lock)
return ;
}
# endif
# ifdef TEGRA_PMX_PINS_HAVE_OD
static void pinmux_set_od ( enum pmux_pingrp pin , enum pmux_pin_od od )
{
u32 * reg = REG ( pin ) ;
@ -247,7 +257,9 @@ static void pinmux_set_od(enum pmux_pingrp pin, enum pmux_pin_od od)
return ;
}
# endif
# ifdef TEGRA_PMX_PINS_HAVE_IO_RESET
static void pinmux_set_ioreset ( enum pmux_pingrp pin ,
enum pmux_pin_ioreset ioreset )
{
@ -270,8 +282,9 @@ static void pinmux_set_ioreset(enum pmux_pingrp pin,
return ;
}
# endif
# ifdef TEGRA_PMX_HAS _RCV_SEL
# ifdef TEGRA_PMX_PINS_HAVE _RCV_SEL
static void pinmux_set_rcv_sel ( enum pmux_pingrp pin ,
enum pmux_pin_rcv_sel rcv_sel )
{
@ -294,8 +307,7 @@ static void pinmux_set_rcv_sel(enum pmux_pingrp pin,
return ;
}
# endif /* TEGRA_PMX_HAS_RCV_SEL */
# endif /* TEGRA_PMX_HAS_PIN_IO_BIT_ETC */
# endif
static void pinmux_config_pingrp ( const struct pmux_pingrp_config * config )
{
@ -304,14 +316,20 @@ static void pinmux_config_pingrp(const struct pmux_pingrp_config *config)
pinmux_set_func ( pin , config - > func ) ;
pinmux_set_pullupdown ( pin , config - > pull ) ;
pinmux_set_tristate ( pin , config - > tristate ) ;
# ifdef TEGRA_PMX_HAS_PIN_IO_BIT_ETC
# ifdef TEGRA_PMX_PINS_HAVE_E_INPUT
pinmux_set_io ( pin , config - > io ) ;
# endif
# ifdef TEGRA_PMX_PINS_HAVE_LOCK
pinmux_set_lock ( pin , config - > lock ) ;
# endif
# ifdef TEGRA_PMX_PINS_HAVE_OD
pinmux_set_od ( pin , config - > od ) ;
# endif
# ifdef TEGRA_PMX_PINS_HAVE_IO_RESET
pinmux_set_ioreset ( pin , config - > ioreset ) ;
# ifdef TEGRA_PMX_HAS_RCV_SEL
pinmux_set_rcv_sel ( pin , config - > rcv_sel ) ;
# endif
# ifdef TEGRA_PMX_PINS_HAVE_RCV_SEL
pinmux_set_rcv_sel ( pin , config - > rcv_sel ) ;
# endif
}
@ -324,7 +342,7 @@ void pinmux_config_pingrp_table(const struct pmux_pingrp_config *config,
pinmux_config_pingrp ( & config [ i ] ) ;
}
# ifdef TEGRA_PMX_HAS_DRVGRPS
# ifdef TEGRA_PMX_SOC_ HAS_DRVGRPS
# define pmux_drvgrp_isvalid(pd) (((pd) >= 0) && ((pd) < PMUX_DRVGRP_COUNT))