/* Copyright 2000-2010 Broadcom Corporation <:label-BRCM:2011:DUAL/GPL:standard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation (the "GPL"). This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A copy of the GPL is available at http://www.broadcom.com/licenses/GPLv2.php, or by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. :> */ /************************************************************************** * File Name : boardparms_voice.c * * Description: This file contains the implementation for the BCM63xx board * parameter voice access functions. * ***************************************************************************/ /* ---- Include Files ---------------------------------------------------- */ #include #include "bp_defs.h" #include #if !defined(_CFE_) #include #include #endif /* !defined(_CFE_) */ /* ---- Public Variables ------------------------------------------------- */ /* ---- Private Constants and Types -------------------------------------- */ #define BP_VOICE_ADD_INTERFACE_PINMUX( pElem, intfEnableFlag ) { pElem->id = bp_ulInterfaceEnable; pElem->u.ul = intfEnableFlag; pElem++; } #define BP_VOICE_ADD_SIGNAL_PINMUX( pElem, itemId, usVal ) { pElem->id = itemId; pElem->u.us = usVal; pElem++; } /* Common Daughter Card lists */ #define SLICSLAC_LIST_COMMON_NOFXO &g_voiceBoard_NOSLIC, \ &g_voiceBoard_LE89116, \ &g_voiceBoard_LE88506, \ &g_voiceBoard_ZL88601, \ &g_voiceBoard_SI32176, \ &g_voiceBoard_SI32176_LCQC, \ &g_voiceBoard_SI32182_ISI_LCBC, \ &g_voiceBoard_SI32286_LCCB, \ &g_voiceBoard_SI32284_ISI_LCCB, \ &g_voiceBoard_SI32260, \ &g_voiceBoard_SI32260_LCQC, \ &g_voiceBoard_SI32267 #define SLICSLAC_LIST_COMMON_FXO SLICSLAC_LIST_COMMON_NOFXO, \ &g_voiceBoard_VE890_INVBOOST, \ &g_voiceBoard_ZL88701, \ &g_voiceBoard_ZL88801_89010_BB, \ &g_voiceBoard_SI3217x, \ &g_voiceBoard_SI32178, \ &g_voiceBoard_SI32260_SI3050, \ &g_voiceBoard_SI32260_SI3050_QC #define SLICSLAC_LIST_4FXS_NOFXO &g_voiceBoard_SI32260x2 #define SLICSLAC_LIST_4FXS_FXO SLICSLAC_LIST_4FXS_NOFXO, \ &g_voiceBoard_SI32260x2_SI3050 #define SLICSLAC_LIST_ZSI_NOFXO &g_voiceBoard_LE88536_ZSI, \ &g_voiceBoard_LE9641_ZSI_BB, \ &g_voiceBoard_LE9642_ZSI_BB, \ &g_voiceBoard_LE9652_ZSI_IB, \ &g_voiceBoard_LE9661_ZSI, \ &g_voiceBoard_LE9661_ZSI_BB, \ &g_voiceBoard_LE9662_ZSI, \ &g_voiceBoard_LE9662_ZSI_BB, \ &g_voiceBoard_LE9672_ZSI, \ &g_voiceBoard_ZL88702_ZSI #define SLICSLAC_LIST_ZSI_FXO SLICSLAC_LIST_ZSI_NOFXO /* ---- Private Variables ------------------------------------------------ */ static char voiceCurrentDgtrCardCfgId[BP_BOARD_ID_LEN] = VOICE_BOARD_ID_DEFAULT; static int g_BpDectPopulated = 0; static bp_elem_t g_voice_filteredBp[BP_VOICE_FILTERED_MAX_SIZE]; #if !defined(_CFE_) static int vpInitialized = 0; static struct VOICE_BOARD_PARMS vp = {{ 0 }}; #endif /* ---- Public Functions -------------------------------------------------- */ bp_elem_t * BpGetVoicePmuxBp( bp_elem_t * pCurrentDataBp ); /* ---- External Functions ------------------------------------------------ */ extern bp_elem_t * BpGetElem(enum bp_id id, bp_elem_t **pstartElem, enum bp_id stopAtId); extern char *BpGetSubCp(enum bp_id id, bp_elem_t *pstartElem, enum bp_id stopAtId ); extern void *BpGetSubPtr(enum bp_id id, bp_elem_t *pstartElem, enum bp_id stopAtId ); extern unsigned char BpGetSubUc(enum bp_id id, bp_elem_t *pstartElem, enum bp_id stopAtId ); extern unsigned short BpGetSubUs(enum bp_id id, bp_elem_t *pstartElem, enum bp_id stopAtId ); extern unsigned int BpGetSubUl(enum bp_id id, bp_elem_t *pstartElem, enum bp_id stopAtId ); /* ---- Private Functions ------------------------------------------------ */ static void bpmemcpy( void* dstptr, const void* srcptr, int size ); static char * bpstrcpy( char* dest, const char* src ); static bp_elem_t * BpGetVoiceBoardStartElemPtr(const char * pszBaseBoardId ); static int BpIsIntfEnabled( unsigned int interfaceFlag, bp_elem_t * pBoardParms ); static int BpElemExists( bp_elem_t * pBoardParms, enum bp_id id ); #if !defined(_CFE_) static int bpstrlen( char * src ); static enum bp_id mapDcRstPinToBpType( BP_RESET_PIN rstPin ); static enum bp_id mapDcSpiDevIdToBpType( BP_SPI_SIGNAL spiId ); static unsigned int BpGetZSISpiDevID( void ); static unsigned short BpGetSlaveSelectGpioNum( BP_SPI_PORT ssNum); static int BpPcmTSCfg( BP_VOICE_CHANNEL *pCh, BP_VOICE_CHANNEL_INTERNAL *pIntCh, unsigned int *pcmRxChanMask, unsigned int *pcmTxChanMask, unsigned int *pcmChanId); static int BpApmCfg( BP_VOICE_CHANNEL *pCh, BP_VOICE_CHANNEL_INTERNAL *pIntCh, unsigned int *apmChanMask); #endif /* !defined(_CFE_) */ /* * -------------------------- Voice Daughter Board Configs ------------------------------ */ VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE88506 = { VOICECFG_LE88506_STR, /* szBoardId */ { /* voiceDevice0 parameters */ { /* Device type */ BP_VD_ZARLINK_88506, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { /* Force using timeslots 0,1 for channel 0 and 2,3 for channel 1 */ BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end the device list with BP_NULL_DEVICE */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32267 = { VOICECFG_SI32267_STR, /*Daughter board ID */ { { /* Device Type */ BP_VD_SILABS_32267, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ISI SPI CS handled internally. It is mapped by the zsiChipMap list. */ BP_RESET_FXS1, /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FB_TSS_ISO, /* General-purpose flags */ ( BP_FLAG_ISI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32267_LCQC = { VOICECFG_SI32267_LCQC_STR, /*Daughter board ID */ { { /* Device Type */ BP_VD_SILABS_32267, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ISI SPI CS handled internally. It is mapped by the zsiChipMap list. */ BP_RESET_FXS1, /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_LCQCUK, /* General-purpose flags */ ( BP_FLAG_ISI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI3217x = { VOICECFG_SI3217X_STR, /*Daughter Card ID */ { { /* Device Type */ BP_VD_SILABS_32176, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, { /* Device Type 2 */ BP_VD_SILABS_32178, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), } }, BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32176_LCQC = { VOICECFG_SI32176_LCQC_STR, /*Daughter Card ID */ { { /* Device Type */ BP_VD_SILABS_32176, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_LCQCUK, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32182_ISI_LCBC = { VOICECFG_SI32182_ISI_LCCB_STR, /*Daughter board ID */ { { /* Device Type */ BP_VD_SILABS_32182_ISI, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ISI SPI CS handled internally. It is mapped by the zsiChipMap list. */ BP_RESET_FXS1, /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_LCCB, /* General-purpose flags */ ( BP_FLAG_ISI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32286_LCCB = { VOICECFG_SI32286_LCCB_STR, /*Daughter board ID */ { { /* Device Type */ BP_VD_SILABS_32286, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* ISI SPI CS handled internally. It is mapped by the zsiChipMap list. */ BP_RESET_FXS1, /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_LCCB, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32284_ISI_LCCB = { VOICECFG_SI32284_ISI_LCCB_STR, /*Daughter board ID */ { { /* Device Type */ BP_VD_SILABS_32284_ISI, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ISI SPI CS handled internally. It is mapped by the zsiChipMap list. */ BP_RESET_FXS1, /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_LCCB, /* General-purpose flags */ ( BP_FLAG_ISI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_VE890_INVBOOST = { VOICECFG_VE890_INVBOOST_STR, /* daughter card ID */ { /* voiceDevice0 parameters */ { /* Device Type */ BP_VD_ZARLINK_89116, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1)), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, { /* Device Type 2 */ BP_VD_ZARLINK_89316, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_INVBOOST, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32260x2 = { VOICECFG_SI32260x2_STR, /*Daughter Card ID*/ { /* voiceDevice0 Parameters */ { /* Device Type */ BP_VD_SILABS_32261, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, { /* Device Type 2*/ BP_VD_SILABS_32261, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(6, 7) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FB_TSS, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32260 = { VOICECFG_SI32260_STR, /*Daughter Card ID*/ { /* voiceDevice0 Parameters */ { /* Device Type */ BP_VD_SILABS_32261, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_PMOS_BUCK_BOOST, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32260_SI3050 = { VOICECFG_SI32260_SI3050_STR, /*Daughter card ID */ { { /* Device Type */ BP_VD_SILABS_32261, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, { /* Device Type 2 */ BP_VD_SILABS_3050, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_PMOS_BUCK_BOOST, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32260_SI3050_QC = { VOICECFG_SI32260_SI3050_QC_STR, /*Daughter card ID */ { { /* Device Type */ BP_VD_SILABS_32261, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, { /* Device Type 2 */ BP_VD_SILABS_3050, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_QCUK, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32260_LCQC = { VOICECFG_SI32260_LCQC_STR, /*Daughter card ID */ { { /* Device Type */ BP_VD_SILABS_32261, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_LCQCUK, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE88536_ZSI = { VOICECFG_LE88536_ZSI_STR, /* Daughter Board ID */ { /* Voice Device 0 Parameters */ { BP_VD_ZARLINK_88536, /* Device Type */ BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ZSI SPI CS handled internally. It is mapped using the zsiMapList. */ BP_RESET_FXS1, /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_INVBOOST, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_ZL88601 = { VOICECFG_ZL88601_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_88601, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_ZL88601x2 = { VOICECFG_ZL88601x2_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_88601, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, { /* Device Type */ BP_VD_ZARLINK_88601, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(6, 7) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_MASTERSLAVE_IB, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_ZL88701 = { VOICECFG_ZL88701_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_88701, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, { /* Device Type 2 */ BP_VD_ZARLINK_89010, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_NOT_REQUIRED, /* FXO reset pin tied with FXS on this board.*/ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_INVBOOST, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_ZL88601x4_8FXS = { VOICECFG_ZL88601x4_8FXS_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_88601, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, { /* Device Type */ BP_VD_ZARLINK_88601, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(6, 7) ), } }, { /* Device Type */ BP_VD_ZARLINK_88601, BP_VDTYPE_PCM, BP_SPI_SS_B3, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS3, /* Device uses FXS3 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(8, 9) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(10, 11) ), } }, { /* Device Type */ BP_VD_ZARLINK_88601, BP_VDTYPE_PCM, BP_SPI_SS_B4, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS4, /* Device uses FXS4 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(12, 13) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(14, 15) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_ZL88702_ZSI = { VOICECFG_ZL88702_ZSI_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_88702_ZSI, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9672_ZSI = /* for ZLRR96741H Rev A0 daughter card */ { VOICECFG_LE9672_ZSI_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_9672_ZSI, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO }, /* SLIC Device Profile */ BP_VD_INVBOOST, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9661_ZSI = { VOICECFG_LE9661_ZSI_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_9661, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ZSI SPI CS handled internally. It is mapped using the zsiMapList */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_ZL88801 = { VOICECFG_ZL88801_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_88801, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO }, /* SLIC Device Profile */ BP_VD_BUCKBOOST, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9661_ZSI_BB = { VOICECFG_LE9661_ZSI_BB_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_9661, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ZSI SPI CS handled internally. It is mapped using the zsiMapList */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO }, /* SLIC Device Profile */ BP_VD_BUCKBOOST, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_ZL88801_89010_BB = /* for Microsemi ZLR88842L REV A0 DC */ { VOICECFG_ZL88801_89010_BB_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_88801, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, { /* Device Type 2 */ BP_VD_ZARLINK_89010, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_NOT_REQUIRED, /* FXO reset pin tied with FXS on this board.*/ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO }, /* SLIC Device Profile */ BP_VD_BUCKBOOST, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9662_ZSI = { VOICECFG_LE9662_ZSI_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_9662, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ZSI SPI CS handled internally. It is mapped using the zsiMapList */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9662_ZSI_BB = { VOICECFG_LE9662_ZSI_BB_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_9662, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ZSI SPI CS handled internally. It is mapped using the zsiMapList */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_BUCKBOOST, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9642_ZSI_BB = { VOICECFG_LE9642_ZSI_BB_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_9642_ZSI, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ZSI SPI CS handled internally. It is mapped using the zsiMapList */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_BUCKBOOST, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9641_ZSI_BB = { VOICECFG_LE9641_ZSI_BB_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_9641_ZSI, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ZSI SPI CS handled internally. It is mapped using the zsiMapList */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_BUCKBOOST, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9652_ZSI_IB = { VOICECFG_LE9652_ZSI_IB_STR, /* szBoardId */ { { /* Device Type */ BP_VD_ZARLINK_9652_ZSI_IB, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ZSI SPI CS handled internally. It is mapped using the zsiMapList */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel Description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_INVBOOST, /* General-purpose flags */ ( BP_FLAG_ZSI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE89116 = { VOICECFG_LE89116_STR, /* Daughter Card ID */ { { /* Device Type */ BP_VD_ZARLINK_89116, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_INVBOOST, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32176 = { VOICECFG_SI32176_STR, /* Daughter Board ID */ { { /* Device Type */ BP_VD_SILABS_32176, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_VE890HV = { VOICECFG_VE890HV_STR, /*Daughter Card ID */ { { /* Device type */ BP_VD_ZARLINK_89136, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, { /* Device type 2 */ BP_VD_ZARLINK_89336, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), } }, /* Always end the device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_INVBOOST, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE89316 = { VOICECFG_LE89316_STR, /* Daughter Card ID */ { { /* Device Type */ BP_VD_ZARLINK_89316, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_INVBOOST, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32178 = { VOICECFG_SI32178_STR, /* Daughter Board ID */ { { /* Device Type */ BP_VD_SILABS_32178, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_NOSLIC = { VOICECFG_NOSLIC_STR, /*Daughter Board ID */ { BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_NOT_DEFINED, /* General-purpose flags */ ( 0 ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32267_NTR = { VOICECFG_SI32267_NTR_STR, /* Daughter Board ID */ { { /* Device Type */ BP_VD_SILABS_32267, BP_VDTYPE_PCM, BP_SPI_SS_NOT_REQUIRED, /* ISI SPI CS handled internally. It is mapped by the zsiChipMap list. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, /* Always end the device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FB_TSS_ISO, /* General-purpose flags */ ( BP_FLAG_ISI_SUPPORT | BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32260x2_SI3050 = { VOICECFG_SI32260x2_SI3050_STR, /*Daughter card ID */ { { /* Device Type */ BP_VD_SILABS_32261, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, { /* Device Type 2 */ BP_VD_SILABS_32261, BP_VDTYPE_PCM, BP_SPI_SS_B2, /* Device uses SPI_SS_B2 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS2, /* Device uses FXS2 reset pin. Pin on base board depends on base board parameters. */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(4, 5) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(6, 7) ), } }, { /* Device Type 3 */ BP_VD_SILABS_3050, BP_VDTYPE_PCM, BP_SPI_SS_B3, /* Device uses SPI_SS_B3 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXO, /* Device uses FXO reset pin. Pin on base board depends on base board parameters. */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_DAA, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(8, 9) ), BP_CHAN( BP_VC_INACTIVE, BP_VCTYPE_NONE, BP_VC_COMP_LINEAR, BP_VC_8KHZ ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FB_TSS, /* General-purpose flags */ ( BP_FLAG_DSP_PCMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9530 = { VOICECFG_LE9530_STR, /* daughter card ID */ { /* voiceDevice0 parameters */ { /* Device Type */ BP_VD_ZARLINK_9530, BP_VDTYPE_APM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_NOT_REQUIRED, /* Device does not require a reset pin. */ { BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_A ), BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_B ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_NOT_DEFINED, /* General-purpose flags */ ( BP_FLAG_DSP_APMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9530_WB = { VOICECFG_LE9530_WB_STR, /* daughter card ID */ { /* voiceDevice0 parameters */ { /* Device Type */ BP_VD_ZARLINK_9530, BP_VDTYPE_APM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_NOT_REQUIRED, /* Device does not require a reset pin. */ { BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_16KHZ, BP_APM_CHAN_A ), BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_16KHZ, BP_APM_CHAN_B ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_NOT_DEFINED, /* General-purpose flags */ ( BP_FLAG_DSP_APMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9540 = { VOICECFG_LE9540_STR, /* daughter card ID */ { /* voiceDevice0 parameters */ { /* Device Type */ BP_VD_ZARLINK_9540, BP_VDTYPE_APM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_NOT_REQUIRED, /* Device does not require a reset pin. */ { BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_A ), BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_B ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_NOT_DEFINED, /* General-purpose flags */ ( BP_FLAG_DSP_APMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9540_WB = { VOICECFG_LE9540_WB_STR, /* daughter card ID */ { /* voiceDevice0 parameters */ { /* Device Type */ BP_VD_ZARLINK_9540, BP_VDTYPE_APM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_NOT_REQUIRED, /* Device does not require a reset pin. */ { BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_16KHZ, BP_APM_CHAN_A ), BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_16KHZ, BP_APM_CHAN_B ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_NOT_DEFINED, /* General-purpose flags */ ( BP_FLAG_DSP_APMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9541 = { VOICECFG_LE9541_STR, /* daughter card ID */ { /* voiceDevice0 parameters */ { /* Device Type */ BP_VD_ZARLINK_9541, BP_VDTYPE_APM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_NOT_REQUIRED, /* Device does not require a reset pin. */ { BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_A ), BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_B ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_NOT_DEFINED, /* General-purpose flags */ ( BP_FLAG_DSP_APMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9541_WB = { VOICECFG_LE9541_WB_STR, /* daughter card ID */ { /* voiceDevice0 parameters */ { /* Device Type */ BP_VD_ZARLINK_9541, BP_VDTYPE_APM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_NOT_REQUIRED, /* Device does not require a reset pin. */ { BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_16KHZ, BP_APM_CHAN_A ), BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_16KHZ, BP_APM_CHAN_B ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_NOT_DEFINED, /* General-purpose flags */ ( BP_FLAG_DSP_APMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI3239 = { VOICECFG_SI3239_STR, /* daughter card ID */ { /* voiceDevice0 parameters */ { /* Device type */ BP_VD_SILABS_3239, BP_VDTYPE_APM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_NOT_REQUIRED, /* Device does not require a reset pin. */ { BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_A ), BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_B ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_NOT_DEFINED, /* General-purpose flags */ ( BP_FLAG_DSP_APMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_SI32392 = { VOICECFG_SI32392_STR, /* daughter card ID */ { /* voiceDevice0 parameters */ { /* Device type */ BP_VD_SILABS_32392, BP_VDTYPE_APM, BP_SPI_SS_NOT_REQUIRED, /* Device doesn't use SPI_SS_Bx pin. Hard coded in board HAL. */ BP_RESET_NOT_REQUIRED, /* Device does not require a reset pin. */ { BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_A ), BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_B ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_NOT_DEFINED, /* General-purpose flags */ ( BP_FLAG_DSP_APMHAL_ENABLE ) }; VOICE_DAUGHTER_BOARD_PARMS g_voiceBoard_LE9530_LE88506 = { VOICECFG_LE9530_LE88506_STR, /* Daughter board ID*/ { /*voiceDevice0 Params */ { /* Device Type */ BP_VD_ZARLINK_88506, BP_VDTYPE_PCM, BP_SPI_SS_B1, /* Device uses SPI_SS_B1 pin. Pin on base board depends on base board parameters. */ BP_RESET_FXS1, /* Device uses FXS1 reset pin. Pin on base board depends on base board parameters. */ /* Channel description */ { BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(0, 1) ), BP_CHAN_PCM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, TS(2, 3) ), } }, { /* Device Type 2 */ BP_VD_ZARLINK_9530, BP_VDTYPE_APM, BP_SPI_SS_B1, /*The 9530 chips are actually internal, device ID is always 0. */ BP_RESET_NOT_REQUIRED, /* Device does not require a reset pin. */ /* Channel description */ { BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_A ), BP_CHAN_APM( BP_VC_ACTIVE, BP_VCTYPE_SLIC, BP_VC_COMP_LINEAR, BP_VC_8KHZ, BP_APM_CHAN_B ), } }, /* Always end device list with this macro. */ BP_NULL_DEVICE_MACRO, }, /* SLIC Device Profile */ BP_VD_FLYBACK, /* General-purpose flags */ ( BP_FLAG_DSP_APMHAL_ENABLE ) }; BP_VOICE_CHANNEL_INTERNAL g_iDectStdCfg[BP_MAX_DECT_DEVICE * BP_MAX_CHANNELS_PER_DEVICE] = { BP_CHAN( BP_VC_ACTIVE, BP_VCTYPE_DECT, BP_VC_COMP_LINEAR, BP_VC_16KHZ ), BP_CHAN( BP_VC_ACTIVE, BP_VCTYPE_DECT, BP_VC_COMP_LINEAR, BP_VC_16KHZ ), BP_CHAN( BP_VC_ACTIVE, BP_VCTYPE_DECT, BP_VC_COMP_LINEAR, BP_VC_16KHZ ), BP_CHAN( BP_VC_ACTIVE, BP_VCTYPE_DECT, BP_VC_COMP_LINEAR, BP_VC_16KHZ ), }; /* End of Daughter Card Definitions */ /* * -------------------------- Voice Mother Board Configs ------------------------------ */ #if defined(_BCM963268_) || defined(CONFIG_BCM963268) static VOICE_DAUGHTER_BOARD_PARMS * g_963168_dCardList_full[] = { SLICSLAC_LIST_COMMON_FXO, SLICSLAC_LIST_ZSI_FXO, SLICSLAC_LIST_4FXS_FXO, 0 }; static VOICE_DAUGHTER_BOARD_PARMS * g_963168_dCardList_noFxoRst[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_NOFXO, SLICSLAC_LIST_4FXS_NOFXO, 0 }; static bp_elem_t g_voice_bcm963168mbv_17a[] = { {bp_cpBoardId, .u.cp = "963168MBV_17A"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_7}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_14_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_15_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_23_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_35_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_8_AH}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963168_dCardList_full}, {bp_last} }; static bp_elem_t g_voice_bcm963168mbv_30a[] = { {bp_cpBoardId, .u.cp = "963168MBV_30A"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168mbv_17a}, {bp_last} }; static bp_elem_t g_voice_bcm963168mbv17a302[] = { {bp_cpBoardId, .u.cp = "963168MBV17A302"}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_10_AL}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168mbv_17a}, {bp_last} }; static bp_elem_t g_voice_bcm963168mbv30a302[] = { {bp_cpBoardId, .u.cp = "963168MBV30A302"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168mbv17a302}, {bp_last} }; static bp_elem_t g_voice_bcm963168xh[] = { {bp_cpBoardId, .u.cp = "963168XH"}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_21_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_39_AH}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168mbv_17a}, {bp_last} }; static bp_elem_t g_voice_bcm963168xh5[] = { {bp_cpBoardId, .u.cp = "963168XH5"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168xh}, {bp_last} }; static bp_elem_t g_voice_bcm963168mp[] = { {bp_cpBoardId, .u.cp = "963168MP"}, {bp_usGpioFxsFxoRst3, .u.us = BP_NOT_DEFINED}, {bp_usGpioDectRst, .u.us = BP_GPIO_19_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_39_AH}, {bp_daughterCardList, .u.ptr = g_963168_dCardList_noFxoRst}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168mbv_17a}, {bp_last} }; static bp_elem_t g_voice_bcm963168mbv3[] = { {bp_cpBoardId, .u.cp = "963168MBV3"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_5}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_14_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_15_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_23_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_35_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_12_AH}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963168_dCardList_full}, {bp_last} }; static bp_elem_t g_voice_bcm963168plc[] = { {bp_cpBoardId, .u.cp = "963168PLC"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_5}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_14_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_15_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_23_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_12_AH}, {bp_daughterCardList, .u.ptr = g_963168_dCardList_full}, {bp_last} }; static bp_elem_t g_voice_bcm963168plc_mocawan[] = { {bp_cpBoardId, .u.cp = "963168PLC_MOCAWAN"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168plc}, {bp_last} }; static bp_elem_t g_voice_bcm963268v30a[] = { {bp_cpBoardId, .u.cp = "963268V30A"}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_50_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_51_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_39_AH}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168mbv3}, {bp_last} }; static bp_elem_t g_voice_bcm963268bu[] = { {bp_cpBoardId, .u.cp = "963268BU"}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_18_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_19_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_39_AH}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168mbv3}, {bp_last} }; static bp_elem_t g_voice_bcm963268bu_p300[] = { {bp_cpBoardId, .u.cp = "963268BU_P300"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963268bu}, {bp_last} }; static bp_elem_t g_voice_bcm963168vx[] = { {bp_cpBoardId, .u.cp = "963168VX"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_5}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_14_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_15_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_9_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_8_AH}, {bp_daughterCardList, .u.ptr = g_963168_dCardList_full}, {bp_last} }; static bp_elem_t g_voice_bcm963168vx_p400[] = { {bp_cpBoardId, .u.cp = "963168VX_P400"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168vx}, {bp_last} }; static bp_elem_t g_voice_bcm963168xn5[] = { {bp_cpBoardId, .u.cp = "963168XN5"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_7}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_14_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_18_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_8_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_39_AH}, {bp_daughterCardList, .u.ptr = g_963168_dCardList_full}, {bp_last} }; static bp_elem_t g_voice_bcm963168wfar[] = { {bp_cpBoardId, .u.cp = "963168WFAR"}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_15_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_10_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_NOT_DEFINED}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168xn5}, {bp_last} }; static bp_elem_t g_voice_bcm963168ac5[] = { {bp_cpBoardId, .u.cp = "963168AC5"}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_15_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_21_AL}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963168xn5}, {bp_last} }; static bp_elem_t g_voice_bcm963268sv1[] = { {bp_cpBoardId, .u.cp = "963268SV1"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_3}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_14_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_15_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_35_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_8_AH}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963168_dCardList_noFxoRst}, {bp_last} }; static bp_elem_t * g_VoiceBoardParms[]= { g_voice_bcm963168mbv_17a, g_voice_bcm963168mbv_30a, g_voice_bcm963168mbv17a302, g_voice_bcm963168mbv30a302, g_voice_bcm963168xh, g_voice_bcm963168xh5, g_voice_bcm963168mp, g_voice_bcm963168mbv3, g_voice_bcm963268v30a, g_voice_bcm963268bu, g_voice_bcm963268bu_p300, g_voice_bcm963168vx, g_voice_bcm963168vx_p400, g_voice_bcm963168xn5, g_voice_bcm963168wfar, g_voice_bcm963168ac5, g_voice_bcm963268sv1, g_voice_bcm963168plc, g_voice_bcm963168plc_mocawan, 0 }; #endif #if defined(_BCM96838_) || defined(CONFIG_BCM96838) static VOICE_DAUGHTER_BOARD_PARMS * g_968380_dCardList_Le9540[] = { &g_voiceBoard_NOSLIC, &g_voiceBoard_LE9540, 0 }; static VOICE_DAUGHTER_BOARD_PARMS * g_968380_dCardList_Si32392[] = { &g_voiceBoard_NOSLIC, &g_voiceBoard_SI32392, 0 }; static bp_elem_t g_voice_bcm968380fhgu[] = { {bp_cpBoardId, .u.cp = "968380FHGU"}, {bp_usZarIfEnable, .u.us = BP_GPIO_0_AH}, {bp_usZarIfSdin, .u.us = BP_GPIO_1_AH}, {bp_usZarIfSdout, .u.us = BP_GPIO_2_AH}, {bp_usZarIfSclk, .u.us = BP_GPIO_3_AH}, {bp_daughterCardList, .u.ptr = g_968380_dCardList_Le9540}, {bp_last} }; static bp_elem_t g_voice_bcm968380fehg[] = { {bp_cpBoardId, .u.cp = "968380FEHG"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968380fggu[] = { {bp_cpBoardId, .u.cp = "968380FGGU"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968380fegu[] = { {bp_cpBoardId, .u.cp = "968380FEGU"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968380gerg[] = { {bp_cpBoardId, .u.cp = "968380GERG"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968380mgeg[] = { {bp_cpBoardId, .u.cp = "968380MGEG"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380gerg}, {bp_last} }; static bp_elem_t g_voice_bcm968380gwan[] = { {bp_cpBoardId, .u.cp = "968380GWAN"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968380lte[] = { {bp_cpBoardId, .u.cp = "968380LTE"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968380eprg[] = { {bp_cpBoardId, .u.cp = "968380EPRG"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968380ffhg[] = { {bp_cpBoardId, .u.cp = "968380FFHG"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968380fesfu[] = { {bp_cpBoardId, .u.cp = "968380FESFU"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968385sfu[] = { {bp_cpBoardId, .u.cp = "968385SFU"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968385esfu[] = { {bp_cpBoardId, .u.cp = "968385ESFU"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fhgu}, {bp_last} }; static bp_elem_t g_voice_bcm968380fhgu_si[] = { {bp_cpBoardId, .u.cp = "968380FHGU_SI"}, {bp_usHvgMaxPwm, .u.us = BP_GPIO_0_AH}, {bp_usSi32392SpiSSNum, .u.us = SPI_DEV_1}, {bp_daughterCardList, .u.ptr = g_968380_dCardList_Si32392}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_968380fsv_g_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_FXO, &g_voiceBoard_LE9540, 0 }; static bp_elem_t g_voice_bcm968380fsv_g[] = { {bp_cpBoardId, .u.cp = "968380FSV_G"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_6}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_7}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_5_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_6_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_7_AL}, {bp_usZarIfEnable, .u.us = BP_GPIO_40_AH}, {bp_usZarIfSdin, .u.us = BP_GPIO_6_AH}, {bp_usZarIfSdout, .u.us = BP_GPIO_42_AH}, {bp_usZarIfSclk, .u.us = BP_GPIO_41_AH}, {bp_usGpioLe9540Reset, .u.us = BP_GPIO_4_AL}, {bp_usHvgMaxPwm, .u.us = BP_GPIO_33_AH}, {bp_usSi32392SpiSSNum, .u.us = SPI_DEV_7}, {bp_daughterCardList, .u.ptr = g_968380fsv_g_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm968380fsv_e[] = { {bp_cpBoardId, .u.cp = "968380FSV_E"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fsv_g}, {bp_last} }; static bp_elem_t g_voice_bcm968380fsv_ge[] = { {bp_cpBoardId, .u.cp = "968380FSV_GE"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380fsv_g}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_968380gerg_si_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_FXO, &g_voiceBoard_SI32392, 0 }; static VOICE_DAUGHTER_BOARD_PARMS * g_968381gerg_si_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_FXO, &g_voiceBoard_SI32392, 0 }; static bp_elem_t g_voice_bcm968380gerg_si[] = { {bp_cpBoardId, .u.cp = "968380GERG_SI"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_0}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_2}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_36_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_40_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_38_AL}, {bp_usHvgMaxPwm, .u.us = BP_GPIO_0_AH}, {bp_usSi32392SpiSSNum, .u.us = SPI_DEV_1}, {bp_daughterCardList, .u.ptr = g_968380gerg_si_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm968380sv_g[] = { {bp_cpBoardId, .u.cp = "968380SV_G"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_6}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_7}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_5_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_38_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_7_AL}, {bp_usZarIfEnable, .u.us = BP_GPIO_40_AH}, {bp_usZarIfSdin, .u.us = BP_GPIO_6_AH}, {bp_usZarIfSdout, .u.us = BP_GPIO_42_AH}, {bp_usZarIfSclk, .u.us = BP_GPIO_41_AH}, {bp_daughterCardList, .u.ptr = g_968380_dCardList_Le9540}, {bp_last} }; static bp_elem_t g_voice_bcm968380sv_e[] = { {bp_cpBoardId, .u.cp = "968380SV_E"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968380sv_g}, {bp_last} }; static bp_elem_t g_voice_bcm968381sv_g[] = { {bp_cpBoardId, .u.cp = "968381SV_G"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_6}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_6}, // SPI3 and SPI2 are tied with SPI_6 {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_5_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_6_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_7_AL}, {bp_daughterCardList, .u.ptr = g_968381gerg_si_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm968385sfu_si[] = { {bp_cpBoardId, .u.cp = "968385SFU_SI"}, {bp_usHvgMaxPwm, .u.us = BP_GPIO_0_AH}, {bp_usSi32392SpiSSNum, .u.us = SPI_DEV_1}, {bp_daughterCardList, .u.ptr = g_968380_dCardList_Si32392}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_968385sv_g_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_FXO, &g_voiceBoard_LE9540, 0 }; static bp_elem_t g_voice_bcm968385sv_g[] = { {bp_cpBoardId, .u.cp = "968385SV_G"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_6}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_6}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_5_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_6_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_7_AL}, {bp_usZarIfEnable, .u.us = BP_GPIO_40_AH}, {bp_usZarIfSdin, .u.us = BP_GPIO_6_AH}, {bp_usZarIfSdout, .u.us = BP_GPIO_42_AH}, {bp_usZarIfSclk, .u.us = BP_GPIO_41_AH}, {bp_daughterCardList, .u.ptr = g_968385sv_g_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm968385sv_e[] = { {bp_cpBoardId, .u.cp = "968385SV_E"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm968385sv_g}, {bp_last} }; static bp_elem_t * g_VoiceBoardParms[]= { g_voice_bcm968380fhgu, g_voice_bcm968380fhgu_si, g_voice_bcm968380fehg, g_voice_bcm968380fggu, g_voice_bcm968380fegu, g_voice_bcm968380fsv_g, g_voice_bcm968380fsv_e, g_voice_bcm968380fsv_ge, g_voice_bcm968380gerg, g_voice_bcm968380mgeg, g_voice_bcm968380gwan, g_voice_bcm968380lte, g_voice_bcm968380gerg_si, g_voice_bcm968380eprg, g_voice_bcm968380ffhg, g_voice_bcm968380fesfu, g_voice_bcm968380sv_g, g_voice_bcm968380sv_e, g_voice_bcm968385sfu, g_voice_bcm968385sfu_si, g_voice_bcm968385esfu, g_voice_bcm968385sv_g, g_voice_bcm968385sv_e, g_voice_bcm968381sv_g, 0 }; #endif #if defined(_BCM963138_) || defined(CONFIG_BCM963138) static VOICE_DAUGHTER_BOARD_PARMS * g_963138_dCardListFull[] = { SLICSLAC_LIST_COMMON_FXO, SLICSLAC_LIST_ZSI_FXO, 0 }; static VOICE_DAUGHTER_BOARD_PARMS * g_963138_fbdCardListFull[] = { &g_voiceBoard_ZL88801, 0 }; static VOICE_DAUGHTER_BOARD_PARMS * g_963138_dCardListNoFxoRst[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_NOFXO, 0 }; static bp_elem_t g_voice_bcm963138dvt[] = { {bp_cpBoardId, .u.cp = "963138DVT"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_2}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_4}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_7_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_19_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_36_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_37_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_6_AH}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963138_dCardListFull}, {bp_last} }; static bp_elem_t g_voice_bcm963138dvt_p300[] = { {bp_cpBoardId, .u.cp = "963138DVT_P300"}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_11_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_12_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_26_AH}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138dvt}, {bp_last} }; static bp_elem_t g_voice_bcm963138ref_bmu[] = { {bp_cpBoardId, .u.cp = "963138REF_BMU"}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_60_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_61_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_NOT_DEFINED}, {bp_usGpioDectRst, .u.us = BP_GPIO_62_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_NOT_DEFINED}, {bp_daughterCardList, .u.ptr = g_963138_dCardListNoFxoRst}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138dvt}, {bp_last} }; static bp_elem_t g_voice_bcm963138ref_bgw[] = { {bp_cpBoardId, .u.cp = "963138REF_BGW"}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_34_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_NOT_DEFINED}, {bp_usGpioDectRst, .u.us = BP_NOT_DEFINED}, {bp_daughterCardList, .u.ptr = g_963138_dCardListNoFxoRst}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138ref_bmu}, {bp_last} }; static bp_elem_t g_voice_bcm963138bmu_p202[] = { {bp_cpBoardId, .u.cp = "963138BMU_P202"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138ref_bmu}, {bp_last} }; static bp_elem_t g_voice_bcm963138ref[] = { {bp_cpBoardId, .u.cp = "963138REF"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_2}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_4}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_7_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_117_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_116_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_6_AH}, {bp_daughterCardList, .u.ptr = g_963138_dCardListFull}, {bp_last} }; static bp_elem_t g_voice_bcm963138ref_p402[] = { {bp_cpBoardId, .u.cp = "963138REF_P402"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_5}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_4_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_5_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_6_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_3_AH}, {bp_daughterCardList, .u.ptr = g_963138_dCardListFull}, {bp_last} }; static bp_elem_t g_voice_bcm963138ref_p502[] = { {bp_cpBoardId, .u.cp = "963138REF_P502"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138ref_p402}, {bp_last} }; static bp_elem_t g_voice_bcm963138_fb7569[] = { {bp_cpBoardId, .u.cp = "963138_FB7569"}, // {bp_ulInterfaceEnable, .u.ul = BP_PINMUX_FNTYPE_HS_SPI}, // {bp_ulInterfaceEnable, .u.ul = BP_PINMUX_FNTYPE_PCM}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, // {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, // {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_5}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_4_AL}, // {bp_usGpioFxsFxoRst2, .u.us = BP_NOT_DEFINED}, // {bp_usGpioFxsFxoRst3, .u.us = BP_NOT_DEFINED}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_NOT_DEFINED}, {bp_usGpioDectRst, .u.us = BP_GPIO_6_AL}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963138_fbdCardListFull}, {bp_last} }; static bp_elem_t g_voice_bcm963138_fb7582[] = { {bp_cpBoardId, .u.cp = "963138_FB7582"}, // {bp_ulInterfaceEnable, .u.ul = BP_PINMUX_FNTYPE_HS_SPI}, // {bp_ulInterfaceEnable, .u.ul = BP_PINMUX_FNTYPE_PCM}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, // {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, // {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_5}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_4_AL}, // {bp_usGpioFxsFxoRst2, .u.us = BP_NOT_DEFINED}, // {bp_usGpioFxsFxoRst3, .u.us = BP_NOT_DEFINED}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_NOT_DEFINED}, {bp_usGpioDectRst, .u.us = BP_GPIO_6_AL}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963138_fbdCardListFull}, {bp_last} }; static bp_elem_t g_voice_bcm963132ref_138_p502[] = { {bp_cpBoardId, .u.cp = "132_138REF_P502"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138ref_p402}, {bp_last} }; static bp_elem_t g_voice_bcm963138ref_gfast_p40x[] = { {bp_cpBoardId, .u.cp = "963138GFP40X"}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_NONE}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138ref_p402}, {bp_last} }; static bp_elem_t g_voice_bcm963138_gfast2[] = { {bp_cpBoardId, .u.cp = "963138GFAST2"}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_NONE}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_NONE}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138ref_p402}, {bp_last} }; static bp_elem_t g_voice_bcm963132ref_138gfast2[] = { {bp_cpBoardId, .u.cp = "132_138GFAST2"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138_gfast2}, {bp_last} }; static bp_elem_t g_voice_bcm963138rref_gfast[] = { {bp_cpBoardId, .u.cp = "63138RREF_GFAST"}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_29_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_30_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_118_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_NONE}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963138_dCardListFull}, {bp_last} }; static bp_elem_t g_voice_bcm963138rref_rnc[] = { {bp_cpBoardId, .u.cp = "63138RREF_RNC"}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_29_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_30_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_NONE}, {bp_usGpioDectRst, .u.us = BP_GPIO_118_AL}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963138_dCardListFull}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_963138ref_lte_dCardList[] = { SLICSLAC_LIST_COMMON_FXO, SLICSLAC_LIST_ZSI_FXO, 0 }; static bp_elem_t g_voice_bcm963138ref_lte[] = { {bp_cpBoardId, .u.cp = "963138REF_LTE"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_34_AL}, {bp_daughterCardList, .u.ptr = g_963138ref_lte_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm963138lte_p302[] = { {bp_cpBoardId, .u.cp = "963138LTE_P302"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138ref_lte}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_963138ref_rnc_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_NOFXO, 0 }; static bp_elem_t g_voice_bcm963138ref_rnc[] = { {bp_cpBoardId, .u.cp = "963138REF_RNC"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_7_AL}, {bp_daughterCardList, .u.ptr = g_963138ref_rnc_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm963138ref_rncP400[] = { {bp_cpBoardId, .u.cp = "138REFrncP400"}, {bp_usGpioDectRst, .u.us = BP_GPIO_115_AL}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963138ref_rnc}, {bp_last} }; static bp_elem_t * g_VoiceBoardParms[]= { g_voice_bcm963138dvt, g_voice_bcm963138dvt_p300, g_voice_bcm963138ref_bmu, g_voice_bcm963138bmu_p202, g_voice_bcm963138ref, g_voice_bcm963138ref_p402, g_voice_bcm963138ref_p502, g_voice_bcm963138ref_lte, g_voice_bcm963138lte_p302, g_voice_bcm963138_fb7569, g_voice_bcm963138_fb7582, g_voice_bcm963138ref_rnc, g_voice_bcm963138ref_rncP400, g_voice_bcm963138ref_gfast_p40x, g_voice_bcm963138_gfast2, g_voice_bcm963138ref_bgw, g_voice_bcm963138rref_gfast, g_voice_bcm963138rref_rnc, g_voice_bcm963132ref_138_p502, g_voice_bcm963132ref_138gfast2, 0 }; #endif #if defined(_BCM963148_) || defined(CONFIG_BCM963148) static VOICE_DAUGHTER_BOARD_PARMS * g_963148_dCardListFull[] = { SLICSLAC_LIST_COMMON_FXO, SLICSLAC_LIST_ZSI_FXO, 0 }; static VOICE_DAUGHTER_BOARD_PARMS * g_963148_dCardListFullNoFxoRst[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_NOFXO, 0 }; static bp_elem_t g_voice_bcm963148dvt[] = { {bp_cpBoardId, .u.cp = "963148DVT"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_2}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_4}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_7_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_19_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_36_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_37_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_6_AH}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963148_dCardListFull}, {bp_last} }; static bp_elem_t g_voice_bcm963148dvt_p300[] = { {bp_cpBoardId, .u.cp = "963148DVT_P300"}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_11_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_12_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_26_AH}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963148dvt}, {bp_last} }; static bp_elem_t g_voice_bcm963148sv[] = { {bp_cpBoardId, .u.cp = "963148SV"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963148dvt}, {bp_last} }; static bp_elem_t g_voice_bcm963148ref[] = { {bp_cpBoardId, .u.cp = "963148REF"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_5}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_4_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_5_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_6_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_3_AH}, {bp_daughterCardList, .u.ptr = g_963148_dCardListFull}, {bp_last} }; static bp_elem_t g_voice_bcm963148ref_p502[] = { {bp_cpBoardId, .u.cp = "963148REF_P502"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963148ref}, {bp_last} }; static bp_elem_t g_voice_bcm963148ref_bmu[] = { {bp_cpBoardId, .u.cp = "963148REF_BMU"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_2}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_4}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_60_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_61_AL}, {bp_usGpioDectRst, .u.us = BP_GPIO_62_AL}, {bp_iDectCfg, .u.ptr = g_iDectStdCfg}, {bp_daughterCardList, .u.ptr = g_963148_dCardListFullNoFxoRst}, {bp_last} }; static bp_elem_t * g_VoiceBoardParms[]= { g_voice_bcm963148dvt, g_voice_bcm963148dvt_p300, g_voice_bcm963148sv, g_voice_bcm963148ref, g_voice_bcm963148ref_p502, g_voice_bcm963148ref_bmu, 0 }; #endif #if defined(_BCM963381_) || defined(CONFIG_BCM963381) static VOICE_DAUGHTER_BOARD_PARMS * g_963381ref1_dCardList[] = { &g_voiceBoard_NOSLIC, SLICSLAC_LIST_ZSI_FXO, 0 }; static bp_elem_t g_voice_bcm963381ref1[] = { {bp_cpBoardId, .u.cp = "963381REF1"}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_22_AL}, {bp_daughterCardList, .u.ptr = g_963381ref1_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm963381ref1_a0[] = { {bp_cpBoardId, .u.cp = "963381REF1_A0"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963381ref1}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_963381dvt_dCardList[] = { SLICSLAC_LIST_COMMON_FXO, SLICSLAC_LIST_ZSI_FXO, 0 }; static bp_elem_t g_voice_bcm963381dvt[] = { {bp_cpBoardId, .u.cp = "963381DVT"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_3}, // This is a workaround for the NC SPI_SS2 in REV03 DVT boards. Must // {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_3}, // short SPI_SS2/3 on motherboard to get any 2 chip cards to work. {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_22_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_14_AL}, {bp_usGpioVoipRelayCtrl1, .u.us = BP_GPIO_23_AH}, {bp_daughterCardList, .u.ptr = g_963381dvt_dCardList}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_963381sv_dCardList[] = { SLICSLAC_LIST_COMMON_FXO, SLICSLAC_LIST_ZSI_FXO, 0 }; static bp_elem_t g_voice_bcm963381sv[] = { {bp_cpBoardId, .u.cp = "963381SV"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_2}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_22_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_23_AL}, {bp_daughterCardList, .u.ptr = g_963381sv_dCardList}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_963381a_ref1_dCardList[] = { &g_voiceBoard_NOSLIC, &g_voiceBoard_SI32260_LCQC, 0 }; static bp_elem_t g_voice_bcm963381a_ref1[] = { {bp_cpBoardId, .u.cp = "963381A_REF1"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_22_AL}, {bp_daughterCardList, .u.ptr = g_963381a_ref1_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm963381ref2[] = { {bp_cpBoardId, .u.cp = "963381REF2"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm963381a_ref1}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_963381ref3_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_NOFXO, 0 }; static bp_elem_t g_voice_bcm963381ref3[] = { {bp_cpBoardId, .u.cp = "963381REF3"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_3}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_22_AL}, {bp_daughterCardList, .u.ptr = g_963381ref3_dCardList}, {bp_last} }; static bp_elem_t * g_VoiceBoardParms[]= { g_voice_bcm963381ref1, g_voice_bcm963381ref1_a0, g_voice_bcm963381dvt, g_voice_bcm963381sv, g_voice_bcm963381a_ref1, g_voice_bcm963381ref2, g_voice_bcm963381ref3, 0 }; #endif #if defined(_BCM96848_) || defined(CONFIG_BCM96848) static VOICE_DAUGHTER_BOARD_PARMS * g_968480fhgu_dCardList[] = { &g_voiceBoard_NOSLIC, &g_voiceBoard_LE9641_ZSI_BB, 0 }; static bp_elem_t g_voice_bcm968480fhgu[] = { {bp_cpBoardId, .u.cp = "968480FHGU"}, {bp_daughterCardList, .u.ptr = g_968480fhgu_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm968480fhbb[] = { {bp_cpBoardId, .u.cp = "968480FHBB"}, {bp_daughterCardList, .u.ptr = g_968480fhgu_dCardList}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_968485sfu_dCardList[] = { &g_voiceBoard_NOSLIC, &g_voiceBoard_LE9641_ZSI_BB, 0 }; static bp_elem_t g_voice_bcm968485sfu[] = { {bp_cpBoardId, .u.cp = "968485SFU"}, {bp_daughterCardList, .u.ptr = g_968485sfu_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm968486sgu[] = { {bp_cpBoardId, .u.cp = "968486SGU"}, {bp_daughterCardList, .u.ptr = g_968480fhgu_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm968488sgw[] = { {bp_cpBoardId, .u.cp = "968488SGW"}, {bp_daughterCardList, .u.ptr = g_968480fhgu_dCardList}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_968480sv_dCardList[] = { &g_voiceBoard_NOSLIC, &g_voiceBoard_LE9641_ZSI_BB, 0 }; static bp_elem_t g_voice_bcm968480sv[] = { {bp_cpBoardId, .u.cp = "968480SV"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_6}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_7_AL}, {bp_daughterCardList, .u.ptr = g_968480sv_dCardList}, {bp_last} }; static VOICE_DAUGHTER_BOARD_PARMS * g_968485sv_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_NOFXO, 0 }; static bp_elem_t g_voice_bcm968485sv[] = { {bp_cpBoardId, .u.cp = "968485SV"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_6}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_7}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_63_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_64_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_7_AL}, {bp_daughterCardList, .u.ptr = g_968485sv_dCardList}, {bp_last} }; static bp_elem_t * g_VoiceBoardParms[] = { g_voice_bcm968480fhgu, g_voice_bcm968480fhbb, g_voice_bcm968485sfu, g_voice_bcm968480sv, g_voice_bcm968485sv, g_voice_bcm968486sgu, g_voice_bcm968488sgw, 0 }; #endif #if defined(_BCM94908_) || defined(CONFIG_BCM94908) static VOICE_DAUGHTER_BOARD_PARMS * g_94908_dCardList[] = { SLICSLAC_LIST_COMMON_FXO, SLICSLAC_LIST_ZSI_FXO, 0 }; static bp_elem_t g_voice_bcm94908ref[] = { {bp_cpBoardId, .u.cp = "94908REF"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_2}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_3}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_11_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_12_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_13_AL}, {bp_daughterCardList, .u.ptr = g_94908_dCardList}, {bp_last} }; static bp_elem_t * g_VoiceBoardParms[] = { g_voice_bcm94908ref, 0 }; #endif #if defined(_BCM96858_) || defined(CONFIG_BCM96858) static VOICE_DAUGHTER_BOARD_PARMS * g_96858_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, &g_voiceBoard_ZL88601x2, SLICSLAC_LIST_4FXS_NOFXO, &g_voiceBoard_LE9661_ZSI, &g_voiceBoard_LE9642_ZSI_BB, &g_voiceBoard_ZL88601x4_8FXS, 0 }; static VOICE_DAUGHTER_BOARD_PARMS * g_96858SV_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_NOFXO, 0 }; static bp_elem_t g_voice_bcm96858ref[] = { {bp_cpBoardId, .u.cp = "968580XREF"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_3}, {bp_usFxsFxo2SpiSSNum, .u.us = SPI_DEV_4}, {bp_usFxsFxo3SpiSSNum, .u.us = SPI_DEV_5}, {bp_usFxsFxo4SpiSSNum, .u.us = SPI_DEV_1}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_21_AL}, {bp_usGpioFxsFxoRst2, .u.us = BP_GPIO_22_AL}, {bp_usGpioFxsFxoRst3, .u.us = BP_GPIO_20_AL}, {bp_usGpioFxsFxoRst4, .u.us = BP_GPIO_4_AL}, {bp_daughterCardList, .u.ptr = g_96858_dCardList}, {bp_last} }; static bp_elem_t g_voice_bcm96858xref_xfi[] = { {bp_cpBoardId, .u.cp = "968580XREF_XFI"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm96858ref}, {bp_last} }; static bp_elem_t g_voice_bcm96858xsv[] = { {bp_cpBoardId, .u.cp = "968580XSV"}, {bp_daughterCardList, .u.ptr = g_96858SV_dCardList}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm96858ref}, {bp_last} }; static bp_elem_t g_voice_bcm96858xsv_rgmii_phy[] = { {bp_cpBoardId, .u.cp = "968580XSV_RGPHY"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm96858xsv}, {bp_last} }; static bp_elem_t g_voice_bcm96858xsv_sgmii_phy[] = { {bp_cpBoardId, .u.cp = "968580XSV_SGPHY"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm96858xsv}, {bp_last} }; static bp_elem_t g_voice_bcm96858xsv_hsgmii_phy[] = { {bp_cpBoardId, .u.cp = "968580XSV_HSG"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm96858xsv}, {bp_last} }; static bp_elem_t g_voice_bcm96858xsv_sgmii_opt[] = { {bp_cpBoardId, .u.cp = "968580XSV_SGOPT"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm96858xsv}, {bp_last} }; static bp_elem_t g_voice_bcm96858xsv_xfi_opt[] = { {bp_cpBoardId, .u.cp = "968580XSV_XFI"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm96858xsv}, {bp_last} }; static bp_elem_t g_voice_bcm96858xref_opt[] = { {bp_cpBoardId, .u.cp = "968580XREF_OPT"}, {bp_elemTemplate, .u.bp_elemp = g_voice_bcm96858ref}, {bp_last} }; static bp_elem_t * g_VoiceBoardParms[] = { g_voice_bcm96858ref, g_voice_bcm96858xref_xfi, g_voice_bcm96858xsv, g_voice_bcm96858xsv_rgmii_phy, g_voice_bcm96858xsv_sgmii_phy, g_voice_bcm96858xsv_hsgmii_phy, g_voice_bcm96858xsv_sgmii_opt, g_voice_bcm96858xsv_xfi_opt, g_voice_bcm96858xref_opt, 0 }; #endif #if defined(_BCM96836_) || defined(CONFIG_BCM96836) static VOICE_DAUGHTER_BOARD_PARMS * g_96836_dCardList[] = { SLICSLAC_LIST_COMMON_NOFXO, SLICSLAC_LIST_ZSI_NOFXO, 0 }; static bp_elem_t g_voice_bcm96836ref[] = { {bp_cpBoardId, .u.cp = "968360GREF"}, {bp_usFxsFxo1SpiSSNum, .u.us = SPI_DEV_1}, {bp_usGpioFxsFxoRst1, .u.us = BP_GPIO_3_AL}, {bp_daughterCardList, .u.ptr = g_96836_dCardList}, {bp_last} }; static bp_elem_t * g_VoiceBoardParms[] = { g_voice_bcm96836ref, 0 }; #endif #if !defined(_BCM963268_) && !defined(CONFIG_BCM963268) && !defined(_BCM96838_) && !defined(CONFIG_BCM96838) && !defined(_BCM963138_) && !defined(CONFIG_BCM963138) && !defined(_BCM963381_) && !defined(CONFIG_BCM963381) && !defined(_BCM963148_) && !defined(CONFIG_BCM963148) && !defined(CONFIG_BCM96848) && !defined(_BCM94908_) && !defined(CONFIG_BCM94908) && !defined(_BCM96858_) && !defined(CONFIG_BCM96858) && !defined(_BCM96836_) && !defined(CONFIG_BCM96836) static bp_elem_t * g_VoiceBoardParms[]= { 0 }; #endif /* Voice Boardparams End */ /***************************************************************************** * * String and memory manipulation private functions * ******************************************************************************/ static void bpmemcpy( void* dstptr, const void* srcptr, int size ) { char* dstp = dstptr; const char* srcp = srcptr; int i; for( i=0; i < size; i++ ) { *dstp++ = *srcp++; } } static char * bpstrcpy( char* dest, const char* src) { while(*src) { *dest++ = *src++; } *dest = '\0'; return dest; } #if !defined(_CFE_) static int bpstrlen( char * src ) { char *s; for(s = src; (s != 0) && (*s != 0); ++s); return(s - src); } #endif /* !defined(_CFE_) */ #if !defined(_CFE_) /***************************************************************************** * * voice Daughtercard type to BoardParam Type mapping functions * ******************************************************************************/ static enum bp_id mapDcRstPinToBpType( BP_RESET_PIN rstPin ) { return( bp_usGpioFxsFxoRst1 + (enum bp_id)( rstPin - BP_RESET_FXS1 ) ); } static enum bp_id mapDcSpiDevIdToBpType( BP_SPI_SIGNAL spiId ) { return( bp_usFxsFxo1SpiSSNum + (enum bp_id)( spiId - BP_SPI_SS_B1 ) ); } #endif /* !defined(_CFE_) */ #if !defined(_CFE_) /***************************************************************************** * Name: BpGetZSISpiDevID() * * Description: This function returns the SPI Device ID for the ZSI daughter * boards based on the current chip. * * Parameters: Nothing * * Returns: SPI Dev ID for ZSI Daughter Boards * *****************************************************************************/ static unsigned int BpGetZSISpiDevID( void ) { #ifdef ZSI_SPI_DEV_ID return ZSI_SPI_DEV_ID; #else return BP_NOT_DEFINED; #endif } #endif /* !defined(_CFE_) */ /***************************************************************************** * Name: BpSetDectPopulatedData() * * Description: This function sets the g_BpDectPopulated variable. It is * used for the user to specify in the board parameters if the * board DECT is populated or not (1 for populated, 0 for not). * * Parameters: int BpData - The data that g_BpDectPopulated will be set to. * * Returns: Nothing * *****************************************************************************/ void BpSetDectPopulatedData( int BpData ) { g_BpDectPopulated = BpData; } /***************************************************************************** * Name: BpDectPopulated() * * Description: This function is used to determine if DECT is populated on * the board. * * Parameters: None * * Returns: BP_DECT_POPULATED if DECT is populated, otherwise it will * return BP_DECT_NOT_POPULATED. * *****************************************************************************/ int BpDectPopulated( void ) { return (g_BpDectPopulated ? BP_DECT_POPULATED : BP_DECT_NOT_POPULATED); } #if !defined(_CFE_) /***************************************************************************** * Name: BpGetVoiceParms() * * Description: Finds the voice parameters based on the daughter board and * base board IDs and fills the old parameters structure with * information. * * Parameters: pszVoiceDaughterCardId - The daughter board ID that is being used. * voiceParms - The old voice parameters structure that must be * filled with data from the new structure. * pszBaseBoardId - The base board ID that is being used. * * Returns: If the board is not found, returns BP_BOARD_ID_NOT_FOUND. * If everything goes properly, returns BP_SUCCESS. * *****************************************************************************/ int BpGetVoiceParms( char* pszVoiceDaughterCardId, VOICE_BOARD_PARMS* voiceParmsOut, char* pszBaseBoardId ) { PVOICE_DAUGHTER_BOARD_PARMS *ppDc; VOICE_DAUGHTER_BOARD_PARMS *pDc; bp_elem_t *pBpStartElem; BP_VOICE_CHANNEL_INTERNAL *dectChanCfg = NULL; BP_VOICE_DEVICE *vd = NULL; BP_VOICE_DEVICE_INTERNAL *vdi = NULL; int gId = 0; int deviceCount = 0; int i, j, pass; unsigned int pcmRxChanMask = 0; unsigned int pcmTxChanMask = 0; unsigned int apmChanMask = 0; unsigned int dectChanId = 0; unsigned int pcmChanId = 0; /* If we have already initialized the boardparms, return a copy */ if(vpInitialized) { *voiceParmsOut = vp; return BP_SUCCESS; } /* Wipe the returned voice devices */ for(deviceCount = 0; deviceCount < BP_MAX_VOICE_DEVICES; deviceCount++) { vp.voiceDevice[deviceCount].voiceDeviceType = BP_VD_NONE; } /* Get start element of voice board params structure */ if( !(pBpStartElem = BpGetVoiceBoardStartElemPtr(pszBaseBoardId)) ) { /* No matching base board found */ printk("%s: Configured base board '%s' not found\n", __FUNCTION__, pszBaseBoardId); return BP_BOARD_ID_NOT_FOUND; } /* Get dectcfg pointer */ if( BpDectPopulated() == BP_DECT_POPULATED ) { dectChanCfg = (BP_VOICE_CHANNEL_INTERNAL *)BpGetSubPtr(bp_iDectCfg, pBpStartElem, bp_last); } /* Get daughtercard list pointer */ ppDc = (PVOICE_DAUGHTER_BOARD_PARMS *)BpGetSubPtr(bp_daughterCardList, pBpStartElem, bp_last); if( !ppDc ) { /* No matching daughtercard list was found */ printk("%s: No daughter board configured\n", __FUNCTION__); return BP_BOARD_ID_NOT_FOUND; } /* Iterate through daughter card list */ for(; *ppDc; ppDc++) { pDc = *ppDc; if( bpstrcmp(pDc->szBoardId, pszVoiceDaughterCardId) == 0 ) { break; } } if(!*ppDc) { printk("%s: Configured daughter board '%s' not found\n", __FUNCTION__, pszVoiceDaughterCardId); return BP_BOARD_ID_NOT_FOUND; } /* Succesfully found base board + daughter card combination * Must now fill the vp structure with data and copy to voiceParms * First set base board and daughter board strings */ bpmemcpy(vp.szBoardId, pszVoiceDaughterCardId, bpstrlen(pszVoiceDaughterCardId)); bpmemcpy(vp.szBaseBoardId, pszBaseBoardId, bpstrlen(pszBaseBoardId)); /* Count the configured devices */ for(i = 0; i < BP_MAX_VOICE_DEVICES; i++) { vdi = &pDc->voiceDevice[i]; if( vdi->deviceType == BP_VD_NONE || vdi->deviceType >= BP_VD_MAX ) { break; } for(j = 0; j < BP_MAX_CHANNELS_PER_DEVICE; j++) { switch(vdi->channel[j].type) { case BP_VCTYPE_SLIC: vp.numFxsLines++; break; case BP_VCTYPE_DAA: vp.numFxoLines++; break; default: break; } } } #ifdef CONFIG_BCM_DECT_SUPPORT for(i = 0; i < BP_MAX_DECT_DEVICE * BP_MAX_CHANNELS_PER_DEVICE; i++) { if(dectChanCfg && dectChanCfg[i].type == BP_VCTYPE_DECT) vp.numDectLines++; } #endif /* CONFIG_BCM_DECT_SUPPORT */ /* If DECT is not populated enabled, explicitly set the number of DECT lines * to 0 */ if( BpDectPopulated() != BP_DECT_POPULATED ) { vp.numDectLines = 0; } /* This prevents the total number of channels from being greater than 8 */ if(vp.numFxsLines + vp.numFxoLines + vp.numDectLines > 8) { if(vp.numDectLines == 4) { /* If there are four DECT lines and it is exceeding limit, can * cut two of the DECT lines for board/daughter card combinations * with 4 FXS lines such as 963268V30A with Si32260x2.*/ vp.numDectLines = 2; } else { return BP_MAX_CHANNELS_EXCEEDED; } } /* Set the relay GPIO pins */ vp.pstnRelayCtrl.relayGpio[0] = BpGetSubUs(bp_usGpioVoipRelayCtrl1, pBpStartElem, bp_last); vp.pstnRelayCtrl.relayGpio[1] = BpGetSubUs(bp_usGpioVoipRelayCtrl2, pBpStartElem, bp_last); for( i = 0, vp.numFailoverRelayPins = 0; i < BP_MAX_RELAY_PINS; i++ ) { if(vp.pstnRelayCtrl.relayGpio[i] != BP_NOT_DEFINED) { vp.numFailoverRelayPins++; } } /*Set DECT UART to Not Defined always for now. */ vp.dectUartControl.dectUartGpioTx = BP_NOT_DEFINED; vp.dectUartControl.dectUartGpioRx = BP_NOT_DEFINED; /* Set the device profile and flags */ vp.deviceProfile = pDc->deviceProfile; vp.flags = pDc->flags; /* Iterate through the DECT devices and copy the channel configurations */ for( deviceCount = 0; BP_MAX_CHANNELS_PER_DEVICE * deviceCount < vp.numDectLines; deviceCount++) { vd = &vp.voiceDevice[deviceCount]; vd->voiceDeviceType = BP_VD_IDECT1; vd->audioInterfaceType = BP_VDTYPE_DECT; vd->spiCtrl.spiDevId = 0; vd->spiCtrl.spiGpio = BP_NOT_DEFINED; vd->requiresReset = 1; vd->resetGpio = BpGetSubUs(bp_usGpioDectRst, pBpStartElem, bp_last); for( i = 0; i < BP_MAX_CHANNELS_PER_DEVICE; i++ ) { BP_VOICE_CHANNEL *pCh = &vd->channel[i]; BP_VOICE_CHANNEL_INTERNAL *pIntCh = &dectChanCfg[i + deviceCount * BP_MAX_CHANNELS_PER_DEVICE]; /* Set the relevant parts for each channel */ pCh->id = gId++; pCh->status = pIntCh->status; pCh->type = pIntCh->type; pCh->sampleComp = pIntCh->sampleComp; pCh->sampleRate = pIntCh->sampleRate; pCh->cfg.dect.dectChanId = dectChanId++; } } /* Loop through the voice devices twice. On the first pass, setup any * channel overrides that are required. On the second pass, finish all the * automatic configuration. */ for(pass = 0; pass < 2; pass++) { int devIdx = deviceCount; /* Device configuration */ for( i = 0; i < BP_MAX_VOICE_DEVICES; i++ ) { vd = &vp.voiceDevice[devIdx]; vdi = &pDc->voiceDevice[i]; if( vdi->deviceType == BP_VD_NONE ) { break; } if(pass == 0) { vd->voiceDeviceType = vdi->deviceType; vd->audioInterfaceType = vdi->audioType; /* Retrieve the Reset GPIO */ vd->requiresReset = (vdi->rstPin == BP_RESET_NOT_REQUIRED) ? 0 : 1; vd->resetGpio = BpGetSubUs( mapDcRstPinToBpType(vdi->rstPin), pBpStartElem, bp_last ); /* Handle the ZSI/ISI devices */ if(vdi->SPI_SS_Bx == BP_SPI_SS_NOT_REQUIRED) { /* Current device _IS_ a ZSI/ISI device. */ vd->spiCtrl.spiDevId = BpGetZSISpiDevID(); if(vd->spiCtrl.spiDevId == BP_NOT_DEFINED) { /* Failure - Tried to use a ZSI/ISI chip on a board which does not support it*/ return BP_NO_ZSI_ON_BOARD_ERR; } vd->spiCtrl.spiGpio = BP_NOT_DEFINED; } else { /* Assign system SPI device ID */ vd->spiCtrl.spiDevId = BpGetSubUs(mapDcSpiDevIdToBpType(vdi->SPI_SS_Bx), pBpStartElem, bp_last); /* Assign SPI associated GPIO pin */ vd->spiCtrl.spiGpio = BpGetSlaveSelectGpioNum(vd->spiCtrl.spiDevId); } /* Handle speical case for Si3239 */ switch(vdi->deviceType) { case BP_VD_SILABS_3239: case BP_VD_SILABS_32392: /* FIXME - Add SPI retrieval function for SI3239X in boardhal code */ vd->spiCtrl.spiDevId = BpGetSubUs(bp_usSi32392SpiSSNum, pBpStartElem, bp_last); vd->spiCtrl.spiGpio = BpGetSlaveSelectGpioNum( vd->spiCtrl.spiDevId ); break; default: break; } } /* Channel configuration */ for( j = 0; j < BP_MAX_CHANNELS_PER_DEVICE; j++ ) { BP_VOICE_CHANNEL *pCh = &vd->channel[j]; BP_VOICE_CHANNEL_INTERNAL *pIntCh = &vdi->channel[j]; /* Set data on the first pass */ if(pass == 0) { /* Copy the relevant parts for each channel */ pCh->id = (pIntCh->status == BP_VC_ACTIVE) ? gId++ : -1; pCh->status = pIntCh->status; pCh->type = pIntCh->type; pCh->sampleComp = pIntCh->sampleComp; pCh->sampleRate = pIntCh->sampleRate; } if(pIntCh->status != BP_VC_ACTIVE) continue; /* Set the channel configuration, as required */ switch(vdi->audioType) { case BP_VDTYPE_PCM: /* If this is the first pass, ignore channels with no * overrides. If this is the second pass, ignore channels * that have already been setup. */ if( (!pIntCh->override.pcm && pass == 0) || (pIntCh->override.pcm && pass == 1) ) break; /* Configure PCM timeslots */ if( BpPcmTSCfg( pCh, pIntCh, &pcmRxChanMask, &pcmTxChanMask, &pcmChanId ) ) return BP_MAX_CHANNELS_EXCEEDED; break; case BP_VDTYPE_APM: /* If this is the first pass, ignore channels with no * overrides. If this is the second pass, ignore channels * that have already been setup. */ if( (!pIntCh->override.apm && pass == 0) || (pIntCh->override.apm && pass == 1) ) break; /* Configure APM */ if( BpApmCfg( pCh, pIntCh, &apmChanMask ) ) return BP_MAX_CHANNELS_EXCEEDED; break; default: break; } } /* for each channel */ devIdx++; } /* for each device */ } /* pass */ *voiceParmsOut = vp; vpInitialized = 1; return BP_SUCCESS; } /***************************************************************************** * Name: BpPcmTsCfg() * * Description: Configure the PCM timeslots * * Parameters: pCh - channel to be configured * pIntCh - internally defined channel parameters * pcmRxChanMask - current receive PCM channel mask * pcmTxChanMask - current transmit PCM channel mask * * Returns: 0 on success, 1 otherwise * *****************************************************************************/ static int BpPcmTSCfg( BP_VOICE_CHANNEL *pCh, BP_VOICE_CHANNEL_INTERNAL *pIntCh, unsigned int *pcmRxChanMask, unsigned int *pcmTxChanMask, unsigned int *pcmChanId) { int i, numBytes; numBytes = BP_PCM_TS_COUNT(pIntCh->sampleComp, pIntCh->sampleRate); /* Make sure all the timeslots start uninitialized */ for(i = 0; i < 4; i++) { pCh->cfg.pcm.ts.rxTimeslot[i] = -1; pCh->cfg.pcm.ts.txTimeslot[i] = -1; } if( pIntCh->override.pcm ) { for(i = 0; i < numBytes; i++) { if( pIntCh->override.pcm->rxTimeslot[i] > 8 * sizeof(*pcmRxChanMask) ) { printk("%s: RX timeslot %d (%d) is larger than timeslot limit\n", __FUNCTION__, i, pIntCh->override.pcm->rxTimeslot[i] ); return 1; } if( pIntCh->override.pcm->txTimeslot[i] > 8 * sizeof(*pcmTxChanMask) ) { printk("%s: TX timeslot %d (%d) is larger than timeslot limit\n", __FUNCTION__, i, pIntCh->override.pcm->txTimeslot[i] ); return 1; } if( *pcmRxChanMask & (1 << pIntCh->override.pcm->rxTimeslot[i]) ) { printk("%s: RX timeslot %d (%d) is already used\n", __FUNCTION__, i, pIntCh->override.pcm->rxTimeslot[i] ); return 1; } if( *pcmTxChanMask & (1 << pIntCh->override.pcm->txTimeslot[i]) ) { printk("%s: TX timeslot %d (%d) is already used\n", __FUNCTION__, i, pIntCh->override.pcm->txTimeslot[i] ); return 1; } /* Assign the timeslots and mask */ pCh->cfg.pcm.ts.rxTimeslot[i] = pIntCh->override.pcm->rxTimeslot[i]; pCh->cfg.pcm.ts.txTimeslot[i] = pIntCh->override.pcm->txTimeslot[i]; *pcmRxChanMask |= 1 << pIntCh->override.pcm->rxTimeslot[i]; *pcmTxChanMask |= 1 << pIntCh->override.pcm->txTimeslot[i]; } } else { /* No support currently for auto channel setup */ printk("%s: No timeslot specified for PCM device %d\n", __FUNCTION__, pCh->id); return 1; } /* Set the PCM channel and update globally */ pCh->cfg.pcm.pcmChanId = *pcmChanId; *pcmChanId += 1; return 0; } /***************************************************************************** * Name: BpApmCfg * * Description: Configure the APM DMA channels * * Parameters: pCh - channel to be configured * pIntCh - internally defined channel parameters * apmChanMask - current APM channel mask * * Returns: 0 on success, nonzero otherwise * *****************************************************************************/ static int BpApmCfg( BP_VOICE_CHANNEL *pCh, BP_VOICE_CHANNEL_INTERNAL *pIntCh, unsigned int *apmChanMask) { BP_APM_CHAN chan; int i; if(pIntCh->override.apm) { chan = pIntCh->override.apm->chan; if(*apmChanMask & (1 << chan)) { printk("%s: unable to re-use APM channel %d\n", __FUNCTION__, chan); return 1; } } else { /* Find next free channel */ for(i = 0; i < BP_APM_CHAN_LAST; i++) { if((*apmChanMask & (1 << i)) == 0) { break; } } if(i >= BP_APM_CHAN_LAST) { printk("%s: no APM channel available\n", __FUNCTION__); return 1; } chan = i; } pCh->cfg.apm.chan = chan; *apmChanMask |= (1 << chan); return 0; } #endif /* !defined(_CFE_) */ /************************************************************************** * Name : BpSetVoiceBoardId * * Description: This function find the BOARD_PARAMETERS structure for the * specified board id string and assigns it to a global, static * variable. * * Parameters : [IN] pszVoiceDaughterCardId - Board id string that is saved into NVRAM. * * Returns : BP_SUCCESS - Success, value is returned. * BP_BOARD_ID_NOT_FOUND - Error, board id input string does not * have a board parameters configuration record. ***************************************************************************/ int BpSetVoiceBoardId( const char *pszVoiceDaughterCardId ) { bp_elem_t * pBpStartElem; PVOICE_DAUGHTER_BOARD_PARMS *ppDc; /* Get start element of voice board params structure - Pass 0 to retrieve base board id in utility function */ if( !(pBpStartElem = BpGetVoiceBoardStartElemPtr(0)) ) { /* No matching base board found */ return BP_BOARD_ID_NOT_FOUND; } /* Get daughtercard list pointer */ ppDc = (PVOICE_DAUGHTER_BOARD_PARMS *)BpGetSubPtr(bp_daughterCardList, pBpStartElem, bp_last); if( !ppDc ) { /* No matching daughtercard list was found */ return BP_BOARD_ID_NOT_FOUND; } /* Iterate through daughter card list */ for(; *ppDc; ppDc++) { if( (0 == bpstrcmp((*ppDc)->szBoardId, pszVoiceDaughterCardId))) { bpmemcpy(voiceCurrentDgtrCardCfgId, pszVoiceDaughterCardId, BP_BOARD_ID_LEN); return BP_SUCCESS; } } return BP_BOARD_ID_NOT_FOUND; } /* BpSetVoiceBoardId */ /************************************************************************** * Name : BpGetVoiceBoardId * * Description: This function returns the current board id strings. * * Parameters : [OUT] pszVoiceDaughterCardId - Address of a buffer that the board id * string is returned in. * * Returns : BP_SUCCESS - Success, value is returned. ***************************************************************************/ int BpGetVoiceBoardId( char *pszVoiceDaughterCardId ) { int i; if (0 == bpstrcmp(voiceCurrentDgtrCardCfgId, VOICE_BOARD_ID_DEFAULT)) { return -1; } for (i = 0; i < BP_BOARD_ID_LEN; i++) { pszVoiceDaughterCardId[i] = voiceCurrentDgtrCardCfgId[i]; } return 0; } int BpGetNumVoiceBoardIds(const char *pszBaseBoardId) { PVOICE_DAUGHTER_BOARD_PARMS *ppDc; bp_elem_t * pBpStartElem; int i = 0; /* Get start element of voice board params structure */ if( !(pBpStartElem = BpGetVoiceBoardStartElemPtr(pszBaseBoardId)) ) return 0; /* Get daughtercard list pointer */ ppDc = (PVOICE_DAUGHTER_BOARD_PARMS *)BpGetSubPtr(bp_daughterCardList, pBpStartElem, bp_last); for (; ppDc && *ppDc; ppDc++) i++; return i; } char *BpGetVoiceBoardIdNameByIndex(int i, const char *pszBaseBoardId) { PVOICE_DAUGHTER_BOARD_PARMS *ppDc; bp_elem_t * pBpStartElem; /* Get start element of voice board params structure */ if( !(pBpStartElem = BpGetVoiceBoardStartElemPtr(pszBaseBoardId)) ) return "(unsupported)"; /* Get daughtercard list pointer */ ppDc = (PVOICE_DAUGHTER_BOARD_PARMS *)BpGetSubPtr(bp_daughterCardList, pBpStartElem, bp_last); for(; ppDc && *ppDc && i > 0; i--, ppDc++); if(ppDc && *ppDc) return (*ppDc)->szBoardId; return "(null)"; } /************************************************************************** * Name : BpGetVoiceBoardIds * * Description: This function returns all of the supported voice board id strings. * * Parameters : [OUT] pszVoiceDaughterCardIds - Address of a buffer that the board id * strings are returned in. Each id starts at BP_BOARD_ID_LEN * boundary. * [IN] nBoardIdsSize - Number of BP_BOARD_ID_LEN elements that * were allocated in pszBoardIds. * [IN] pszBaseBoardId - Name of base Board ID to associate Voice * Board ID with. * * Returns : Number of board id strings returned. ***************************************************************************/ int BpGetVoiceBoardIds( char *pszVoiceDaughterCardIds, int nBoardIdsSize, char *pszBaseBoardId ) { int count = 0; bp_elem_t * pBpStartElem; PVOICE_DAUGHTER_BOARD_PARMS *ppDc; /* Get start element of voice board params structure */ if( !(pBpStartElem = BpGetVoiceBoardStartElemPtr(pszBaseBoardId)) ) { /* No matching base board found */ return 0; } /* Get daughtercard list pointer */ ppDc = (PVOICE_DAUGHTER_BOARD_PARMS *)BpGetSubPtr(bp_daughterCardList, pBpStartElem, bp_last); if( !ppDc ) { /* No matching daughtercard list was found */ return count; } /* Iterate through daughter card list */ for(; (*ppDc != 0) && (*ppDc != 0) && (nBoardIdsSize != 0); ppDc++) { /* Copy over daughtercard Ids */ bpstrcpy(pszVoiceDaughterCardIds, (*ppDc)->szBoardId); pszVoiceDaughterCardIds += BP_BOARD_ID_LEN; nBoardIdsSize--; count++; } return( count ); } /* BpGetVoiceBoardIds */ /************************************************************************** * Name : BpGetVoiceDectType * * Description: This function returns whether or not Dect is supported on a given board. * * Parameters : [IN] pszBaseBoardId - Name of the base Board ID * * Returns : Status indicating if the base board supports dect. ***************************************************************************/ int BpGetVoiceDectType( const char *pszBaseBoardId ) { bp_elem_t * pBpStartElem; BP_VOICE_CHANNEL_INTERNAL * dectChanCfg = 0; /* Get start element of voice board params structure */ if( !(pBpStartElem = BpGetVoiceBoardStartElemPtr(pszBaseBoardId)) ) { /* No matching base board found */ return BP_VOICE_NO_DECT; } /* Get IDECT Cfg */ dectChanCfg = (BP_VOICE_CHANNEL_INTERNAL *)BpGetSubPtr(bp_iDectCfg, pBpStartElem, bp_last); if( dectChanCfg ) { return BP_VOICE_INT_DECT; } return BP_VOICE_NO_DECT; } /************************************************************************** * Name : BpGetVoiceBoardStartElemPtr * * Description: This function returns the start element of a voice board params stucture * when given a baseboard id. If base boardid is not specified then the * currently active base board id is retreived and used * * Parameters : [IN] pszBaseBoardId - Name of the base Board ID * * Returns : Start element of matching voice boardparams structure. ***************************************************************************/ static bp_elem_t * BpGetVoiceBoardStartElemPtr( const char * pszBaseBoardId ) { int bpPtrIndex; char * baseBoardId; char boardIdStr[BP_BOARD_ID_LEN]; /* Get Base board Id if not specified */ if( !pszBaseBoardId ) { if ( BpGetBoardId(boardIdStr) != BP_SUCCESS ) { /* No matching base board found */ return 0; } } else { /* Copy over specified base board id */ bpstrcpy(boardIdStr, pszBaseBoardId); } /* Iterate through list of voice board params to find matching structure to base board */ for( bpPtrIndex=0; g_VoiceBoardParms[bpPtrIndex]; bpPtrIndex++ ) { baseBoardId = BpGetSubCp(bp_cpBoardId, g_VoiceBoardParms[bpPtrIndex], bp_last); if( baseBoardId && (0 == bpstrcmp(baseBoardId, boardIdStr)) ) { /* Found the matching board */ break; } } return g_VoiceBoardParms[bpPtrIndex]; } #if !defined(_CFE_) /************************************************************************** * Name : BpGetSlaveSelectGpioNum * * Description: This function returns the gpio number associated with a particular * SPI slave select * * Parameters : ssNum - Slave select ID * * Returns : Start element of matching voice boardparams structure. ***************************************************************************/ static unsigned short BpGetSlaveSelectGpioNum( BP_SPI_PORT ssNum) { bp_elem_t * pElem; for( pElem = g_pCurrentBp; pElem && (pElem->id != bp_last); pElem++ ) { /* check for spi slave select definition.bp_usSpiSlaveSelectNum must be follwed by bp_usSpiSlaveSelectGpioNum */ if( pElem->id == bp_usSpiSlaveSelectNum && pElem->u.us == (unsigned short)ssNum ) { pElem++; if( (pElem->id != bp_last) && (pElem->id == bp_usSpiSlaveSelectGpioNum) ) { /* Return active low for compatibility with legacy code */ return (pElem->u.us | BP_ACTIVE_LOW); } } /* Assign parent bp if pointer present */ if( pElem->id == bp_elemTemplate ) { pElem = pElem->u.bp_elemp; } } return BP_NOT_DEFINED; } #endif /* !defined(_CFE_) */ /************************************************************************** * Name : BpGetVoicePmuxBp * * Description: This function returns a filtered version of the voice board params * based on the daughter card that is configured. The last element * in the filtered boardparams struct is a pointer to the passed-in * data side board params struct * * Parameters : pCurrentDataBp - pointer to current data boardparams * * Returns : filtered voice boardparams. ***************************************************************************/ bp_elem_t * BpGetVoicePmuxBp( bp_elem_t * pCurrentDataBp ) { int i = 0; int bSi3239x = 0; int bLe954x = 0; int bHspi = 0; bp_elem_t * pBpStartElem = 0; bp_elem_t * pElem; PVOICE_DAUGHTER_BOARD_PARMS *ppDc; bp_elem_t * pNewElem; BP_VOICE_CHANNEL_INTERNAL * dectChanCfg = 0; if( !pCurrentDataBp || pCurrentDataBp[0].id != bp_cpBoardId ) { return 0; } /* Get start element of voice board params structure */ if( pCurrentDataBp[0].u.cp && !(pBpStartElem = BpGetVoiceBoardStartElemPtr(pCurrentDataBp[0].u.cp)) ) { /* No matching base board found */ return 0; } /* Get dectcfg pointer */ if( BpDectPopulated() == BP_DECT_POPULATED ) { dectChanCfg = (BP_VOICE_CHANNEL_INTERNAL *)BpGetSubPtr(bp_iDectCfg, pBpStartElem, bp_last); } /* Get daughtercard list pointer */ ppDc = (PVOICE_DAUGHTER_BOARD_PARMS *)BpGetSubPtr(bp_daughterCardList, pBpStartElem, bp_last); if( !ppDc ) { /* No matching daughtercard list was found */ return 0; } /* Iterate through daughter card list */ for(; *ppDc; ppDc++) { /* If matching voice board is found, break out */ if( (0 == bpstrcmp((*ppDc)->szBoardId, &voiceCurrentDgtrCardCfgId[0]))) { break; } } /* Return if no dect && ( no dc match || dc match with zero lines ) */ if( !dectChanCfg && ( !(*ppDc) || bpstrcmp((*ppDc)->szBoardId, VOICECFG_NOSLIC_STR) == 0 ) ) { /* No voice lines configured */ return 0; } /* Initialize filtered list and assign to pointer */ for( i=0; i< BP_VOICE_FILTERED_MAX_SIZE; i++ ) { g_voice_filteredBp[i].id = bp_last; } pNewElem = &g_voice_filteredBp[0]; /* 1 - Configure FXS/FXO related interface enables */ if( (*ppDc)->flags & BP_FLAG_DSP_APMHAL_ENABLE ) { /* Enable APM interface */ BP_VOICE_ADD_INTERFACE_PINMUX( pNewElem, BP_PINMUX_FNTYPE_APM ); } if( (*ppDc)->flags & BP_FLAG_DSP_PCMHAL_ENABLE ) { /* Enable PCM interface */ BP_VOICE_ADD_INTERFACE_PINMUX( pNewElem, BP_PINMUX_FNTYPE_PCM ); } /* Iterate through devices to determine device type */ for( i=0; (i < BP_MAX_VOICE_DEVICES) && ((*ppDc)->voiceDevice[i].deviceType != BP_VD_NONE); i++ ) { switch( (*ppDc)->voiceDevice[i].deviceType ) { case BP_VD_SILABS_3239: case BP_VD_SILABS_32392: { bSi3239x = 1; if( !bHspi ) { /* Enable HS_SPI interface */ BP_VOICE_ADD_INTERFACE_PINMUX( pNewElem, BP_PINMUX_FNTYPE_HS_SPI ); bHspi = 1; } } break; case BP_VD_ZARLINK_9540: case BP_VD_ZARLINK_9541: { bLe954x = 1; } break; default: { /* PCM SLACs */ if( (*ppDc)->voiceDevice[i].SPI_SS_Bx != BP_SPI_SS_NOT_REQUIRED && !bHspi ) { /* Enable SPI for PCM SLACS only if no ISI/ZSI && no APM SLICs configured */ BP_VOICE_ADD_INTERFACE_PINMUX( pNewElem, BP_PINMUX_FNTYPE_HS_SPI ); bHspi = 1; } } break; } } /* 2 - Configure DECT related interface enable */ if( dectChanCfg ) { /* Enable DECT interface */ BP_VOICE_ADD_INTERFACE_PINMUX( pNewElem, BP_PINMUX_FNTYPE_DECT ); } /* 3 - Start adding signals based on interface enables and dc selection */ pElem = pBpStartElem; while( pElem->id != bp_last ) { switch ( pElem->id ) { case bp_usGpioFxsFxoRst1: case bp_usGpioFxsFxoRst2: case bp_usGpioFxsFxoRst3: case bp_usGpioFxsFxoRst4: { /* Check if PCM interface is enabled. Only copy over elem if it * doesnt already exist in filtered list. This accounts for sibling * board overrides */ if( BpIsIntfEnabled(BP_PINMUX_FNTYPE_PCM, &g_voice_filteredBp[0]) && !BpElemExists( &g_voice_filteredBp[0], pElem->id ) ) { BP_VOICE_ADD_SIGNAL_PINMUX( pNewElem, pElem->id, pElem->u.us ); } } break; case bp_usGpioVoipRelayCtrl1: case bp_usGpioVoipRelayCtrl2: { /* Only copy over elem if it doesnt already exist in filtered list. * This accounts for sibling board overrides */ if( !BpElemExists( &g_voice_filteredBp[0], pElem->id ) ) { /* TODO: Maybe only add this for FXO enabled devices */ BP_VOICE_ADD_SIGNAL_PINMUX( pNewElem, pElem->id, pElem->u.us ); } } break; case bp_usGpioDectRst: { /* Check if DECT interface is enabled. Only copy over elem if it * doesnt already exist in filtered list. This accounts for sibling * board overrides */ if( BpIsIntfEnabled(BP_PINMUX_FNTYPE_DECT, &g_voice_filteredBp[0]) && !BpElemExists( &g_voice_filteredBp[0], pElem->id ) ) { BP_VOICE_ADD_SIGNAL_PINMUX( pNewElem, pElem->id, pElem->u.us ); } } break; case bp_usZarIfSclk: case bp_usZarIfSdout: case bp_usZarIfSdin: case bp_usZarIfEnable: case bp_usGpioLe9540Reset: { /* Check if APM and Le954x are enabled */ if( BpIsIntfEnabled(BP_PINMUX_FNTYPE_APM, &g_voice_filteredBp[0]) && bLe954x ) { BP_VOICE_ADD_SIGNAL_PINMUX( pNewElem, pElem->id, pElem->u.us ); } } break; case bp_usHvgMaxPwm: case bp_usSi32392SpiSSNum: { /* Check if APM and Si3239x are enabled */ if( BpIsIntfEnabled(BP_PINMUX_FNTYPE_APM, &g_voice_filteredBp[0]) && bSi3239x && !BpElemExists( &g_voice_filteredBp[0], pElem->id ) ) { BP_VOICE_ADD_SIGNAL_PINMUX( pNewElem, pElem->id, pElem->u.us ); } } break; default: break; } pElem++; /* Assign parent bp if pointer present */ if( pElem->id == bp_elemTemplate ) { pElem = pElem->u.bp_elemp; } } /* 4 - Add pointer to data bp at the end of voice bp */ pNewElem->id = bp_elemTemplate; pNewElem++->u.bp_elemp = pCurrentDataBp; pNewElem->id = bp_last; return ( &g_voice_filteredBp[0] ); } /************************************************************************** * Name : BpIsIntfEnabled * * Description: Checks if a particular interface is enabled in boardparms * * Parameters : interfaceFlag - Flag representing interface * pBoardParms - pointer to boardparams * * Returns : 1 if found, 0 otherwise ***************************************************************************/ static int BpIsIntfEnabled( unsigned int interfaceFlag, bp_elem_t * pBoardParms ) { if( !pBoardParms ) { return 0; } for( ; pBoardParms->id != bp_last; pBoardParms++ ) { if( (pBoardParms->id == bp_ulInterfaceEnable) && (pBoardParms->u.ul == interfaceFlag) ) { return 1; } } return 0; } /************************************************************************** * Name : BpElemExists * * Description: Checks if element with specific id already exists in bp * * Parameters : pBoardParms - pointer to boardparams * id - element id to look for * * Returns : 1 if found, 0 otherwise ***************************************************************************/ static int BpElemExists( bp_elem_t * pBoardParms, enum bp_id id ) { bp_elem_t * tempPtr = pBoardParms; bp_elem_t * pFoundElem; pFoundElem = BpGetElem(id, &tempPtr, bp_last); return (id == pFoundElem->id); } #if !defined(_CFE_) EXPORT_SYMBOL(BpSetDectPopulatedData); EXPORT_SYMBOL(BpDectPopulated); EXPORT_SYMBOL(BpGetVoiceParms); EXPORT_SYMBOL(BpSetVoiceBoardId); EXPORT_SYMBOL(BpGetVoiceBoardId); EXPORT_SYMBOL(BpGetVoiceBoardIds); EXPORT_SYMBOL(BpGetVoiceDectType); #endif /* !defined(_CFE_) */