@ -66,6 +66,46 @@ int funcmux_select(enum periph_id id, int config)
}
break ;
case PERIPH_ID_DVC_I2C :
/* there is only one selection, pinmux_config is ignored */
if ( config = = FUNCMUX_DVC_I2CP ) {
pinmux_set_func ( PINGRP_I2CP , PMUX_FUNC_I2C ) ;
pinmux_tristate_disable ( PINGRP_I2CP ) ;
}
break ;
case PERIPH_ID_I2C1 :
/* support pinmux_config of 0 for now, */
if ( config = = FUNCMUX_I2C1_RM ) {
pinmux_set_func ( PINGRP_RM , PMUX_FUNC_I2C ) ;
pinmux_tristate_disable ( PINGRP_RM ) ;
}
break ;
case PERIPH_ID_I2C2 : /* I2C2 */
switch ( config ) {
case FUNCMUX_I2C2_DDC : /* DDC pin group, select I2C2 */
pinmux_set_func ( PINGRP_DDC , PMUX_FUNC_I2C2 ) ;
/* PTA to HDMI */
pinmux_set_func ( PINGRP_PTA , PMUX_FUNC_HDMI ) ;
pinmux_tristate_disable ( PINGRP_DDC ) ;
break ;
case FUNCMUX_I2C2_PTA : /* PTA pin group, select I2C2 */
pinmux_set_func ( PINGRP_PTA , PMUX_FUNC_I2C2 ) ;
/* set DDC_SEL to RSVDx (RSVD2 works for now) */
pinmux_set_func ( PINGRP_DDC , PMUX_FUNC_RSVD2 ) ;
pinmux_tristate_disable ( PINGRP_PTA ) ;
bad_config = 0 ;
break ;
}
break ;
case PERIPH_ID_I2C3 : /* I2C3 */
/* support pinmux_config of 0 for now */
if ( config = = FUNCMUX_I2C3_DTF ) {
pinmux_set_func ( PINGRP_DTF , PMUX_FUNC_I2C3 ) ;
pinmux_tristate_disable ( PINGRP_DTF ) ;
}
break ;
default :
debug ( " %s: invalid periph_id %d " , __func__ , id ) ;
return - 1 ;