?? evmdm642_edma_aic23.c
字號:
MCASP_FMKS(XMASK, XMASK0, NOMASK),
MCASP_FMKS(XFMT, XDATDLY, 0BIT) |
MCASP_FMKS(XFMT, XRVRS, MSBFIRST) |
MCASP_FMKS(XFMT, XPAD, ZERO) |
MCASP_FMKS(XFMT, XPBIT, DEFAULT) |
MCASP_FMKS(XFMT, XSSZ, 32BITS) |
MCASP_FMKS(XFMT, XBUSEL, DAT) |
MCASP_FMKS(XFMT, XROT, NONE),
MCASP_FMKS(AFSXCTL, XMOD, BURST) |
MCASP_FMKS(AFSXCTL, FXWID, BIT) |
MCASP_FMKS(AFSXCTL, FSXM, EXTERNAL) |
MCASP_FMKS(AFSXCTL, FSXP, ACTIVEHIGH),
MCASP_FMKS(ACLKXCTL, CLKXP, FALLING) |
MCASP_FMKS(ACLKXCTL, ASYNC, ASYNC) |
MCASP_FMKS(ACLKXCTL, CLKXM, EXTERNAL) |
MCASP_FMKS(ACLKXCTL, CLKXDIV, OF(0)),
MCASP_FMKS(AHCLKXCTL, HCLKXM, EXTERNAL) |
MCASP_FMKS(AHCLKXCTL, HCLKXP, RISING) |
MCASP_FMKS(AHCLKXCTL, HCLKXDIV, OF(0)),
MCASP_FMKS(XTDM, XTDMS31, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS30, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS29, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS28, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS27, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS26, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS25, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS24, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS23, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS22, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS21, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS20, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS19, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS18, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS17, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS16, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS15, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS14, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS13, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS12, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS11, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS10, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS9, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS8, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS7, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS6, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS5, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS4, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS3, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS2, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS1, INACTIVE) |
MCASP_FMKS(XTDM, XTDMS0, ACTIVE),
MCASP_FMKS(XINTCTL, XSTAFRM, DISABLE) |
MCASP_FMKS(XINTCTL, XDATA, DISABLE) |
MCASP_FMKS(XINTCTL, XLAST, DISABLE) |
MCASP_FMKS(XINTCTL, XDMAERR, DISABLE) |
MCASP_FMKS(XINTCTL, XCKFAIL, DISABLE) |
MCASP_FMKS(XINTCTL, XSYNCERR, DISABLE) |
MCASP_FMKS(XINTCTL, XUNDRN, DISABLE),
MCASP_FMKS(XCLKCHK, XMAX, DEFAULT) |
MCASP_FMKS(XCLKCHK, XMIN, DEFAULT) |
MCASP_FMKS(XCLKCHK, XPS, DEFAULT)
};
MCASP_ConfigSrctl configSrctl = {
MCASP_FMKS(SRCTL, DISMOD, HIGH) |
MCASP_FMKS(SRCTL, SRMOD, XMT),
MCASP_FMKS(SRCTL, DISMOD, HIGH) |
MCASP_FMKS(SRCTL, SRMOD, RCV),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE)
/* MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
MCASP_FMKS(SRCTL, DISMOD, 3STATE) |
MCASP_FMKS(SRCTL, SRMOD, INACTIVE) */
};
MCASP_Config mcaspCfg;
mcaspCfg.global = &configGbl;
mcaspCfg.receive = &configRcv;
mcaspCfg.transmit = &configXmt;
mcaspCfg.srctl = &configSrctl;
/* If no device parameters are passed, use the defaults. */
if (params == NULL) {
params = &EVMDM642_EDMA_AIC23_DEVPARAMS;
}
/* Check if the version is supported by the driver. */
if(params->versionId != EVMDM642_EDMA_AIC23_VERSION_1){
/* Unsupported version */
return(IOM_EBADARGS);
}
/* Set the McASP */
genericParams.mcaspCfgPtr = &mcaspCfg;
genericParams.irqId = params->irqId;
genericParams.enableClkg = params->enableClkg;
genericParams.enableHclkg = params->enableHclkg;
genericParams.enableFsyncg = params->enableFsyncg;
genericParams.cacheCalls = params->cacheCalls;
genericParams.inEvtIrqId = params->inEvtIrqId;
genericParams.outEvtIrqId = params->outEvtIrqId;
genericParams.evtCallback = params->evtCallback;
genericParams.inEvtIntrMask = params->inEvtIntrMask;
genericParams.outEvtIntrMask = params->outEvtIntrMask;
/* Set the interrupt mask */
genericParams.edmaIntrMask = params->edmaIntrMask;
/* Set codec parameters */
if (!AIC23_setParams(&(params->aic23Config))) {
return (IOM_EALLOC);
}
/* Call the generic mdBindDev to claim mcasp port MCASPPORT */
return (C6X1X_EDMA_MCASP_FXNS.mdBindDev)(devp, MCASPPORT, &genericParams);
}
/*
* ======== mdCreateChan ========
* This function creates and configures a device channel.
*/
static Int mdCreateChan(Ptr *chanp, Ptr devp, String name, Int mode,
Ptr chanParams, IOM_TiomCallback cbFxn, Ptr cbArg)
{
Int result;
C6X1X_EDMA_MCASP_ChanParams genericParams;
EDMA_Config edmaCfg = {
EDMA_FMKS(OPT, PRI, HIGH) |
EDMA_FMKS(OPT, ESIZE, 32BIT) |
EDMA_FMKS(OPT, 2DS, NO) |
EDMA_FMKS(OPT, SUM, NONE) |
EDMA_FMKS(OPT, 2DD, NO) |
EDMA_FMKS(OPT, DUM, NONE) |
EDMA_FMKS(OPT, TCINT, YES) |
EDMA_FMK (OPT, TCC, NULL) |
EDMA_FMKS(OPT, LINK, YES) |
EDMA_FMKS(OPT, FS, YES),
EDMA_FMK(SRC, SRC, NULL),
EDMA_FMKS(CNT, FRMCNT, DEFAULT) |
EDMA_FMKS(CNT, ELECNT, DEFAULT),
EDMA_FMK(DST, DST, NULL),
EDMA_FMKS(IDX, FRMIDX, DEFAULT) |
EDMA_FMKS(IDX, ELEIDX, DEFAULT),
EDMA_FMKS(RLD, ELERLD, DEFAULT) |
EDMA_FMK(RLD, LINK, NULL)
};
/* Set ELECNT, ELERLD to the active serializers */
/* FRMCNT will be 1 pair of SRCTL and set in C6x1x_edma_mcasp driver */
EDMA_FSETA(&edmaCfg.cnt, CNT, ELECNT, 1);
EDMA_FSETA(&edmaCfg.rld, RLD, ELERLD, 1);
if (mode == IOM_INPUT) {
EDMA_FSETSA(&edmaCfg.opt, OPT, DUM, INC);
/* Select EDMA channel 13 for rcv here */
genericParams.edmaChan = 13;
} else {
EDMA_FSETSA(&edmaCfg.opt, OPT, SUM, INC);
/* Select EDMA channel 12 for xmt here */
genericParams.edmaChan = 12;
}
genericParams.edmaCfgPtr = &edmaCfg;
/*
* for loopback, no need to sync to external frame sync,
* set to 5 to run loop edma job long enough for sync real xmt & rcv job
*/
genericParams.tdmChans = 1;
result = (C6X1X_EDMA_MCASP_FXNS.mdCreateChan)(chanp, devp, name, mode,
&genericParams, cbFxn, cbArg);
return (result);
}
/*
* ======== mdControlChan ========
* Control the channel.
*/
static Int mdControlChan(Ptr chanp, Uns cmd, Ptr args)
{
Uint32 sampleRate = (Uint32) args;
Int result = 0;
if (cmd == IOM_CNTL_AUDIO_SETSAMPLERATE) {
AIC23_setSampleRate(sampleRate);
result = 1;
}
// Maybe should always call underlying?
else {
// Call underlying mdControlChan
result = (C6X1X_EDMA_MCASP_FXNS.mdControlChan)(chanp, cmd, args);
}
return (result);
}
/*
* ======== EVMDM642_EDMA_AIC23_init ========
* This function initializes the driver's structures.
*/
Void EVMDM642_EDMA_AIC23_init()
{
/* Pass some IOM fxns straight to the generic driver */
// EVMDM642_EDMA_AIC23_FXNS.mdControlChan =
// C6X1X_EDMA_MCASP_FXNS.mdControlChan;
EVMDM642_EDMA_AIC23_FXNS.mdDeleteChan =
C6X1X_EDMA_MCASP_FXNS.mdDeleteChan;
EVMDM642_EDMA_AIC23_FXNS.mdSubmitChan =
C6X1X_EDMA_MCASP_FXNS.mdSubmitChan;
EVMDM642_EDMA_AIC23_FXNS.mdUnBindDev =
C6X1X_EDMA_MCASP_FXNS.mdUnBindDev;
C6X1X_EDMA_MCASP_init();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -