1*09f455dcSMasahiro Yamada /* 2*09f455dcSMasahiro Yamada * Copyright (c) 2011 The Chromium OS Authors. 3*09f455dcSMasahiro Yamada * 4*09f455dcSMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 5*09f455dcSMasahiro Yamada */ 6*09f455dcSMasahiro Yamada 7*09f455dcSMasahiro Yamada /* Tegra20 high-level function multiplexing */ 8*09f455dcSMasahiro Yamada #include <common.h> 9*09f455dcSMasahiro Yamada #include <asm/arch/clock.h> 10*09f455dcSMasahiro Yamada #include <asm/arch/funcmux.h> 11*09f455dcSMasahiro Yamada #include <asm/arch/pinmux.h> 12*09f455dcSMasahiro Yamada 13*09f455dcSMasahiro Yamada /* 14*09f455dcSMasahiro Yamada * The PINMUX macro is used to set up pinmux tables. 15*09f455dcSMasahiro Yamada */ 16*09f455dcSMasahiro Yamada #define PINMUX(grp, mux, pupd, tri) \ 17*09f455dcSMasahiro Yamada {PMUX_PINGRP_##grp, PMUX_FUNC_##mux, PMUX_PULL_##pupd, PMUX_TRI_##tri} 18*09f455dcSMasahiro Yamada 19*09f455dcSMasahiro Yamada static const struct pmux_pingrp_config disp1_default[] = { 20*09f455dcSMasahiro Yamada PINMUX(LDI, DISPA, NORMAL, NORMAL), 21*09f455dcSMasahiro Yamada PINMUX(LHP0, DISPA, NORMAL, NORMAL), 22*09f455dcSMasahiro Yamada PINMUX(LHP1, DISPA, NORMAL, NORMAL), 23*09f455dcSMasahiro Yamada PINMUX(LHP2, DISPA, NORMAL, NORMAL), 24*09f455dcSMasahiro Yamada PINMUX(LHS, DISPA, NORMAL, NORMAL), 25*09f455dcSMasahiro Yamada PINMUX(LM0, RSVD4, NORMAL, NORMAL), 26*09f455dcSMasahiro Yamada PINMUX(LPP, DISPA, NORMAL, NORMAL), 27*09f455dcSMasahiro Yamada PINMUX(LPW0, DISPA, NORMAL, NORMAL), 28*09f455dcSMasahiro Yamada PINMUX(LPW2, DISPA, NORMAL, NORMAL), 29*09f455dcSMasahiro Yamada PINMUX(LSC0, DISPA, NORMAL, NORMAL), 30*09f455dcSMasahiro Yamada PINMUX(LSPI, DISPA, NORMAL, NORMAL), 31*09f455dcSMasahiro Yamada PINMUX(LVP1, DISPA, NORMAL, NORMAL), 32*09f455dcSMasahiro Yamada PINMUX(LVS, DISPA, NORMAL, NORMAL), 33*09f455dcSMasahiro Yamada PINMUX(SLXD, SPDIF, NORMAL, NORMAL), 34*09f455dcSMasahiro Yamada }; 35*09f455dcSMasahiro Yamada 36*09f455dcSMasahiro Yamada 37*09f455dcSMasahiro Yamada int funcmux_select(enum periph_id id, int config) 38*09f455dcSMasahiro Yamada { 39*09f455dcSMasahiro Yamada int bad_config = config != FUNCMUX_DEFAULT; 40*09f455dcSMasahiro Yamada 41*09f455dcSMasahiro Yamada switch (id) { 42*09f455dcSMasahiro Yamada case PERIPH_ID_UART1: 43*09f455dcSMasahiro Yamada switch (config) { 44*09f455dcSMasahiro Yamada case FUNCMUX_UART1_IRRX_IRTX: 45*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_IRRX, PMUX_FUNC_UARTA); 46*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_IRTX, PMUX_FUNC_UARTA); 47*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_IRRX); 48*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_IRTX); 49*09f455dcSMasahiro Yamada break; 50*09f455dcSMasahiro Yamada case FUNCMUX_UART1_UAA_UAB: 51*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_UAA, PMUX_FUNC_UARTA); 52*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_UAB, PMUX_FUNC_UARTA); 53*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_UAA); 54*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_UAB); 55*09f455dcSMasahiro Yamada bad_config = 0; 56*09f455dcSMasahiro Yamada break; 57*09f455dcSMasahiro Yamada case FUNCMUX_UART1_GPU: 58*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_GPU, PMUX_FUNC_UARTA); 59*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_GPU); 60*09f455dcSMasahiro Yamada bad_config = 0; 61*09f455dcSMasahiro Yamada break; 62*09f455dcSMasahiro Yamada case FUNCMUX_UART1_SDIO1: 63*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SDIO1, PMUX_FUNC_UARTA); 64*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_SDIO1); 65*09f455dcSMasahiro Yamada bad_config = 0; 66*09f455dcSMasahiro Yamada break; 67*09f455dcSMasahiro Yamada } 68*09f455dcSMasahiro Yamada if (!bad_config) { 69*09f455dcSMasahiro Yamada /* 70*09f455dcSMasahiro Yamada * Tegra appears to boot with function UARTA pre- 71*09f455dcSMasahiro Yamada * selected on mux group SDB. If two mux groups are 72*09f455dcSMasahiro Yamada * both set to the same function, it's unclear which 73*09f455dcSMasahiro Yamada * group's pins drive the RX signals into the HW. 74*09f455dcSMasahiro Yamada * For UARTA, SDB certainly overrides group IRTX in 75*09f455dcSMasahiro Yamada * practice. To solve this, configure some alternative 76*09f455dcSMasahiro Yamada * function on SDB to avoid the conflict. Also, tri- 77*09f455dcSMasahiro Yamada * state the group to avoid driving any signal onto it 78*09f455dcSMasahiro Yamada * until we know what's connected. 79*09f455dcSMasahiro Yamada */ 80*09f455dcSMasahiro Yamada pinmux_tristate_enable(PMUX_PINGRP_SDB); 81*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SDB, PMUX_FUNC_SDIO3); 82*09f455dcSMasahiro Yamada } 83*09f455dcSMasahiro Yamada break; 84*09f455dcSMasahiro Yamada 85*09f455dcSMasahiro Yamada case PERIPH_ID_UART2: 86*09f455dcSMasahiro Yamada if (config == FUNCMUX_UART2_UAD) { 87*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_UAD, PMUX_FUNC_UARTB); 88*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_UAD); 89*09f455dcSMasahiro Yamada } 90*09f455dcSMasahiro Yamada break; 91*09f455dcSMasahiro Yamada 92*09f455dcSMasahiro Yamada case PERIPH_ID_UART4: 93*09f455dcSMasahiro Yamada if (config == FUNCMUX_UART4_GMC) { 94*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_GMC, PMUX_FUNC_UARTD); 95*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_GMC); 96*09f455dcSMasahiro Yamada } 97*09f455dcSMasahiro Yamada break; 98*09f455dcSMasahiro Yamada 99*09f455dcSMasahiro Yamada case PERIPH_ID_DVC_I2C: 100*09f455dcSMasahiro Yamada /* there is only one selection, pinmux_config is ignored */ 101*09f455dcSMasahiro Yamada if (config == FUNCMUX_DVC_I2CP) { 102*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_I2CP, PMUX_FUNC_I2C); 103*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_I2CP); 104*09f455dcSMasahiro Yamada } 105*09f455dcSMasahiro Yamada break; 106*09f455dcSMasahiro Yamada 107*09f455dcSMasahiro Yamada case PERIPH_ID_I2C1: 108*09f455dcSMasahiro Yamada /* support pinmux_config of 0 for now, */ 109*09f455dcSMasahiro Yamada if (config == FUNCMUX_I2C1_RM) { 110*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_RM, PMUX_FUNC_I2C); 111*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_RM); 112*09f455dcSMasahiro Yamada } 113*09f455dcSMasahiro Yamada break; 114*09f455dcSMasahiro Yamada case PERIPH_ID_I2C2: /* I2C2 */ 115*09f455dcSMasahiro Yamada switch (config) { 116*09f455dcSMasahiro Yamada case FUNCMUX_I2C2_DDC: /* DDC pin group, select I2C2 */ 117*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_DDC, PMUX_FUNC_I2C2); 118*09f455dcSMasahiro Yamada /* PTA to HDMI */ 119*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_PTA, PMUX_FUNC_HDMI); 120*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_DDC); 121*09f455dcSMasahiro Yamada break; 122*09f455dcSMasahiro Yamada case FUNCMUX_I2C2_PTA: /* PTA pin group, select I2C2 */ 123*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_PTA, PMUX_FUNC_I2C2); 124*09f455dcSMasahiro Yamada /* set DDC_SEL to RSVDx (RSVD2 works for now) */ 125*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_DDC, PMUX_FUNC_RSVD2); 126*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_PTA); 127*09f455dcSMasahiro Yamada bad_config = 0; 128*09f455dcSMasahiro Yamada break; 129*09f455dcSMasahiro Yamada } 130*09f455dcSMasahiro Yamada break; 131*09f455dcSMasahiro Yamada case PERIPH_ID_I2C3: /* I2C3 */ 132*09f455dcSMasahiro Yamada /* support pinmux_config of 0 for now */ 133*09f455dcSMasahiro Yamada if (config == FUNCMUX_I2C3_DTF) { 134*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_DTF, PMUX_FUNC_I2C3); 135*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_DTF); 136*09f455dcSMasahiro Yamada } 137*09f455dcSMasahiro Yamada break; 138*09f455dcSMasahiro Yamada 139*09f455dcSMasahiro Yamada case PERIPH_ID_SDMMC1: 140*09f455dcSMasahiro Yamada if (config == FUNCMUX_SDMMC1_SDIO1_4BIT) { 141*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SDIO1, PMUX_FUNC_SDIO1); 142*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_SDIO1); 143*09f455dcSMasahiro Yamada } 144*09f455dcSMasahiro Yamada break; 145*09f455dcSMasahiro Yamada 146*09f455dcSMasahiro Yamada case PERIPH_ID_SDMMC2: 147*09f455dcSMasahiro Yamada if (config == FUNCMUX_SDMMC2_DTA_DTD_8BIT) { 148*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_DTA, PMUX_FUNC_SDIO2); 149*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_DTD, PMUX_FUNC_SDIO2); 150*09f455dcSMasahiro Yamada 151*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_DTA); 152*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_DTD); 153*09f455dcSMasahiro Yamada } 154*09f455dcSMasahiro Yamada break; 155*09f455dcSMasahiro Yamada 156*09f455dcSMasahiro Yamada case PERIPH_ID_SDMMC3: 157*09f455dcSMasahiro Yamada switch (config) { 158*09f455dcSMasahiro Yamada case FUNCMUX_SDMMC3_SDB_SLXA_8BIT: 159*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SLXA, PMUX_FUNC_SDIO3); 160*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SLXC, PMUX_FUNC_SDIO3); 161*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SLXD, PMUX_FUNC_SDIO3); 162*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SLXK, PMUX_FUNC_SDIO3); 163*09f455dcSMasahiro Yamada 164*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_SLXA); 165*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_SLXC); 166*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_SLXD); 167*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_SLXK); 168*09f455dcSMasahiro Yamada /* fall through */ 169*09f455dcSMasahiro Yamada 170*09f455dcSMasahiro Yamada case FUNCMUX_SDMMC3_SDB_4BIT: 171*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SDB, PMUX_FUNC_SDIO3); 172*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SDC, PMUX_FUNC_SDIO3); 173*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_SDD, PMUX_FUNC_SDIO3); 174*09f455dcSMasahiro Yamada 175*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_SDB); 176*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_SDC); 177*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_SDD); 178*09f455dcSMasahiro Yamada bad_config = 0; 179*09f455dcSMasahiro Yamada break; 180*09f455dcSMasahiro Yamada } 181*09f455dcSMasahiro Yamada break; 182*09f455dcSMasahiro Yamada 183*09f455dcSMasahiro Yamada case PERIPH_ID_SDMMC4: 184*09f455dcSMasahiro Yamada switch (config) { 185*09f455dcSMasahiro Yamada case FUNCMUX_SDMMC4_ATC_ATD_8BIT: 186*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_ATC, PMUX_FUNC_SDIO4); 187*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_ATD, PMUX_FUNC_SDIO4); 188*09f455dcSMasahiro Yamada 189*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_ATC); 190*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_ATD); 191*09f455dcSMasahiro Yamada break; 192*09f455dcSMasahiro Yamada 193*09f455dcSMasahiro Yamada case FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT: 194*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_GME, PMUX_FUNC_SDIO4); 195*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_GME); 196*09f455dcSMasahiro Yamada /* fall through */ 197*09f455dcSMasahiro Yamada 198*09f455dcSMasahiro Yamada case FUNCMUX_SDMMC4_ATB_GMA_4_BIT: 199*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_ATB, PMUX_FUNC_SDIO4); 200*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_GMA, PMUX_FUNC_SDIO4); 201*09f455dcSMasahiro Yamada 202*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_ATB); 203*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_GMA); 204*09f455dcSMasahiro Yamada bad_config = 0; 205*09f455dcSMasahiro Yamada break; 206*09f455dcSMasahiro Yamada } 207*09f455dcSMasahiro Yamada break; 208*09f455dcSMasahiro Yamada 209*09f455dcSMasahiro Yamada case PERIPH_ID_KBC: 210*09f455dcSMasahiro Yamada if (config == FUNCMUX_DEFAULT) { 211*09f455dcSMasahiro Yamada enum pmux_pingrp grp[] = {PMUX_PINGRP_KBCA, 212*09f455dcSMasahiro Yamada PMUX_PINGRP_KBCB, PMUX_PINGRP_KBCC, 213*09f455dcSMasahiro Yamada PMUX_PINGRP_KBCD, PMUX_PINGRP_KBCE, 214*09f455dcSMasahiro Yamada PMUX_PINGRP_KBCF}; 215*09f455dcSMasahiro Yamada int i; 216*09f455dcSMasahiro Yamada 217*09f455dcSMasahiro Yamada for (i = 0; i < ARRAY_SIZE(grp); i++) { 218*09f455dcSMasahiro Yamada pinmux_tristate_disable(grp[i]); 219*09f455dcSMasahiro Yamada pinmux_set_func(grp[i], PMUX_FUNC_KBC); 220*09f455dcSMasahiro Yamada pinmux_set_pullupdown(grp[i], PMUX_PULL_UP); 221*09f455dcSMasahiro Yamada } 222*09f455dcSMasahiro Yamada } 223*09f455dcSMasahiro Yamada break; 224*09f455dcSMasahiro Yamada 225*09f455dcSMasahiro Yamada case PERIPH_ID_USB2: 226*09f455dcSMasahiro Yamada if (config == FUNCMUX_USB2_ULPI) { 227*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_UAA, PMUX_FUNC_ULPI); 228*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_UAB, PMUX_FUNC_ULPI); 229*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_UDA, PMUX_FUNC_ULPI); 230*09f455dcSMasahiro Yamada 231*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_UAA); 232*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_UAB); 233*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_UDA); 234*09f455dcSMasahiro Yamada } 235*09f455dcSMasahiro Yamada break; 236*09f455dcSMasahiro Yamada 237*09f455dcSMasahiro Yamada case PERIPH_ID_SPI1: 238*09f455dcSMasahiro Yamada if (config == FUNCMUX_SPI1_GMC_GMD) { 239*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_GMC, PMUX_FUNC_SFLASH); 240*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_GMD, PMUX_FUNC_SFLASH); 241*09f455dcSMasahiro Yamada 242*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_GMC); 243*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_GMD); 244*09f455dcSMasahiro Yamada } 245*09f455dcSMasahiro Yamada break; 246*09f455dcSMasahiro Yamada 247*09f455dcSMasahiro Yamada case PERIPH_ID_NDFLASH: 248*09f455dcSMasahiro Yamada switch (config) { 249*09f455dcSMasahiro Yamada case FUNCMUX_NDFLASH_ATC: 250*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_ATC, PMUX_FUNC_NAND); 251*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_ATC); 252*09f455dcSMasahiro Yamada break; 253*09f455dcSMasahiro Yamada case FUNCMUX_NDFLASH_KBC_8_BIT: 254*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_KBCA, PMUX_FUNC_NAND); 255*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_KBCC, PMUX_FUNC_NAND); 256*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_KBCD, PMUX_FUNC_NAND); 257*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_KBCE, PMUX_FUNC_NAND); 258*09f455dcSMasahiro Yamada pinmux_set_func(PMUX_PINGRP_KBCF, PMUX_FUNC_NAND); 259*09f455dcSMasahiro Yamada 260*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_KBCA); 261*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_KBCC); 262*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_KBCD); 263*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_KBCE); 264*09f455dcSMasahiro Yamada pinmux_tristate_disable(PMUX_PINGRP_KBCF); 265*09f455dcSMasahiro Yamada 266*09f455dcSMasahiro Yamada bad_config = 0; 267*09f455dcSMasahiro Yamada break; 268*09f455dcSMasahiro Yamada } 269*09f455dcSMasahiro Yamada break; 270*09f455dcSMasahiro Yamada case PERIPH_ID_DISP1: 271*09f455dcSMasahiro Yamada if (config == FUNCMUX_DEFAULT) { 272*09f455dcSMasahiro Yamada int i; 273*09f455dcSMasahiro Yamada 274*09f455dcSMasahiro Yamada for (i = PMUX_PINGRP_LD0; i <= PMUX_PINGRP_LD17; i++) { 275*09f455dcSMasahiro Yamada pinmux_set_func(i, PMUX_FUNC_DISPA); 276*09f455dcSMasahiro Yamada pinmux_tristate_disable(i); 277*09f455dcSMasahiro Yamada pinmux_set_pullupdown(i, PMUX_PULL_NORMAL); 278*09f455dcSMasahiro Yamada } 279*09f455dcSMasahiro Yamada pinmux_config_pingrp_table(disp1_default, 280*09f455dcSMasahiro Yamada ARRAY_SIZE(disp1_default)); 281*09f455dcSMasahiro Yamada } 282*09f455dcSMasahiro Yamada break; 283*09f455dcSMasahiro Yamada 284*09f455dcSMasahiro Yamada default: 285*09f455dcSMasahiro Yamada debug("%s: invalid periph_id %d", __func__, id); 286*09f455dcSMasahiro Yamada return -1; 287*09f455dcSMasahiro Yamada } 288*09f455dcSMasahiro Yamada 289*09f455dcSMasahiro Yamada if (bad_config) { 290*09f455dcSMasahiro Yamada debug("%s: invalid config %d for periph_id %d", __func__, 291*09f455dcSMasahiro Yamada config, id); 292*09f455dcSMasahiro Yamada return -1; 293*09f455dcSMasahiro Yamada } 294*09f455dcSMasahiro Yamada 295*09f455dcSMasahiro Yamada return 0; 296*09f455dcSMasahiro Yamada } 297