www.pudn.com > scaling.rar > evmdm642_edma_aic23.c
/* * Copyright 2003 by Texas Instruments Incorporated. * All rights reserved. Property of Texas Instruments Incorporated. * Restricted rights to use, duplicate or disclose this code are * granted through contract. * */ /* "@(#) DDK 1.10.00.23 07-02-03 (ddk-b12)" */ /* * ======== evmdm642_edma_aic23.c ======== * * Driver for the aic23 codec on the TMS320C642 EVM. * Requires the generic TMS320C6x1x McASP driver. */ #include#include #include #include #include #include #include #include #define MCASPPORT 0 #define GENERICDEVPARAMS { \ C6X1X_EDMA_MCASP_VERSION_1, /* version id */ \ TRUE, /* True if buffers are in cacheable memory (set in mdBindDev) */ \ /* Driver not enable the McASP high frequecy rate generator */ \ C6X1X_EDMA_MCASP_EXTERNAL, \ /* Driver not enable the McASP clk rate generator */ \ C6X1X_EDMA_MCASP_EXTERNAL, \ /* Driver not enable the McASP frame sync generator */ \ C6X1X_EDMA_MCASP_EXTERNAL, \ 0, /* IRQ id to use for the EDMA (set in mdBindDev) */ \ NULL, /* McASP configuration for the loopback (set in mdBindDev) */ \ -1, /* input event irq id */ \ -1, /* output event irq id */ \ NULL, /* event callback */ \ EVMDM642_EDMA_AIC23_INTR_MASK_DEFAULT, \ EVMDM642_EDMA_AIC23_INTR_MASK_DEFAULT, \ EVMDM642_EDMA_AIC23_INTR_MASK_DEFAULT \ } EVMDM642_EDMA_AIC23_DevParams EVMDM642_EDMA_AIC23_DEVPARAMS = \ EVMDM642_EDMA_AIC23_DEFAULT_DEVPARAMS; /* * Forward declaration of the IOM interface functions. They are only * exposed via the IOM function table to avoid namespace pollution. */ static Int mdBindDev(Ptr *devp, Int devid, Ptr devParams); static Int mdCreateChan(Ptr *chanp, Ptr devp, String name, Int mode, Ptr chanParams, IOM_TiomCallback cbFxn, Ptr cbArg); static Int mdControlChan(Ptr chanp, Uns cmd, Ptr args); /* * The codec driver function table. Notice how we copy most functions * from the generic c6x1x edma mcasp driver. */ IOM_Fxns EVMDM642_EDMA_AIC23_FXNS = { &mdBindDev, NULL, &mdControlChan, &mdCreateChan, NULL, NULL }; /* * ======== mdBindDev ======== * This function allocates and configures the pcm3002 codec. */ static Int mdBindDev(Ptr *devp, Int devid, Ptr devParams) { EVMDM642_EDMA_AIC23_DevParams *params = (EVMDM642_EDMA_AIC23_DevParams *) devParams; C6X1X_EDMA_MCASP_DevParams genericParams = GENERICDEVPARAMS; MCASP_ConfigGbl configGbl = { MCASP_FMKS(PFUNC, AFSR, MCASP) | MCASP_FMKS(PFUNC, AHCLKR, MCASP) | MCASP_FMKS(PFUNC, ACLKR, MCASP) | MCASP_FMKS(PFUNC, AFSX, MCASP) | MCASP_FMKS(PFUNC, AHCLKX, MCASP) | MCASP_FMKS(PFUNC, ACLKX, MCASP) | MCASP_FMKS(PFUNC, AMUTE, MCASP) | /* MCASP_FMKS(PFUNC, AXR15, MCASP) | MCASP_FMKS(PFUNC, AXR14, MCASP) | MCASP_FMKS(PFUNC, AXR13, MCASP) | MCASP_FMKS(PFUNC, AXR12, MCASP) | MCASP_FMKS(PFUNC, AXR11, MCASP) | MCASP_FMKS(PFUNC, AXR10, MCASP) | MCASP_FMKS(PFUNC, AXR9, MCASP) | MCASP_FMKS(PFUNC, AXR8, MCASP) | */ MCASP_FMKS(PFUNC, AXR7, MCASP) | MCASP_FMKS(PFUNC, AXR6, MCASP) | MCASP_FMKS(PFUNC, AXR5, MCASP) | MCASP_FMKS(PFUNC, AXR4, MCASP) | MCASP_FMKS(PFUNC, AXR3, MCASP) | MCASP_FMKS(PFUNC, AXR2, MCASP) | MCASP_FMKS(PFUNC, AXR1, MCASP) | MCASP_FMKS(PFUNC, AXR0, MCASP), MCASP_FMKS(PDIR, AFSR, IN) | MCASP_FMKS(PDIR, AHCLKR, IN) | MCASP_FMKS(PDIR, ACLKR, IN) | MCASP_FMKS(PDIR, AFSX, IN) | MCASP_FMKS(PDIR, AHCLKX, IN) | MCASP_FMKS(PDIR, ACLKX, IN) | MCASP_FMKS(PDIR, AMUTE, DEFAULT) | /* MCASP_FMKS(PDIR, AXR15, IN) | MCASP_FMKS(PDIR, AXR14, IN) | MCASP_FMKS(PDIR, AXR13, IN) | MCASP_FMKS(PDIR, AXR12, IN) | MCASP_FMKS(PDIR, AXR11, IN) | MCASP_FMKS(PDIR, AXR10, IN) | MCASP_FMKS(PDIR, AXR9, IN) | MCASP_FMKS(PDIR, AXR8, IN) | */ MCASP_FMKS(PDIR, AXR7, IN) | MCASP_FMKS(PDIR, AXR6, IN) | MCASP_FMKS(PDIR, AXR5, IN) | MCASP_FMKS(PDIR, AXR4, IN) | MCASP_FMKS(PDIR, AXR3, IN) | MCASP_FMKS(PDIR, AXR2, IN) | MCASP_FMKS(PDIR, AXR1, IN) | MCASP_FMKS(PDIR, AXR0, OUT), MCASP_DITCTL_DEFAULT, MCASP_FMKS(DLBCTL, MODE, DEFAULT) | MCASP_FMKS(DLBCTL, ORD, DEFAULT) | MCASP_FMKS(DLBCTL, DLBEN, DISABLE), MCASP_AMUTE_DEFAULT }; MCASP_ConfigRcv configRcv = { MCASP_FMKS(RMASK, RMASK31, NOMASK) | MCASP_FMKS(RMASK, RMASK30, NOMASK) | MCASP_FMKS(RMASK, RMASK29, NOMASK) | MCASP_FMKS(RMASK, RMASK28, NOMASK) | MCASP_FMKS(RMASK, RMASK27, NOMASK) | MCASP_FMKS(RMASK, RMASK26, NOMASK) | MCASP_FMKS(RMASK, RMASK25, NOMASK) | MCASP_FMKS(RMASK, RMASK24, NOMASK) | MCASP_FMKS(RMASK, RMASK23, NOMASK) | MCASP_FMKS(RMASK, RMASK22, NOMASK) | MCASP_FMKS(RMASK, RMASK21, NOMASK) | MCASP_FMKS(RMASK, RMASK20, NOMASK) | MCASP_FMKS(RMASK, RMASK19, NOMASK) | MCASP_FMKS(RMASK, RMASK18, NOMASK) | MCASP_FMKS(RMASK, RMASK17, NOMASK) | MCASP_FMKS(RMASK, RMASK16, NOMASK) | MCASP_FMKS(RMASK, RMASK15, NOMASK) | MCASP_FMKS(RMASK, RMASK14, NOMASK) | MCASP_FMKS(RMASK, RMASK13, NOMASK) | MCASP_FMKS(RMASK, RMASK12, NOMASK) | MCASP_FMKS(RMASK, RMASK11, NOMASK) | MCASP_FMKS(RMASK, RMASK10, NOMASK) | MCASP_FMKS(RMASK, RMASK9, NOMASK) | MCASP_FMKS(RMASK, RMASK8, NOMASK) | MCASP_FMKS(RMASK, RMASK7, NOMASK) | MCASP_FMKS(RMASK, RMASK6, NOMASK) | MCASP_FMKS(RMASK, RMASK5, NOMASK) | MCASP_FMKS(RMASK, RMASK4, NOMASK) | MCASP_FMKS(RMASK, RMASK3, NOMASK) | MCASP_FMKS(RMASK, RMASK2, NOMASK) | MCASP_FMKS(RMASK, RMASK1, NOMASK) | MCASP_FMKS(RMASK, RMASK0, NOMASK), MCASP_FMKS(RFMT, RDATDLY, 0BIT) | MCASP_FMKS(RFMT, RRVRS, MSBFIRST) | MCASP_FMKS(RFMT, RPAD, ZERO) | MCASP_FMKS(RFMT, RPBIT, DEFAULT) | MCASP_FMKS(RFMT, RSSZ, 32BITS) | MCASP_FMKS(RFMT, RBUSEL, DAT) | MCASP_FMKS(RFMT, RROT, NONE), MCASP_FMKS(AFSRCTL, RMOD, BURST) | MCASP_FMKS(AFSRCTL, FRWID, BIT) | MCASP_FMKS(AFSRCTL, FSRM, EXTERNAL) | MCASP_FMKS(AFSRCTL, FSRP, ACTIVEHIGH), MCASP_FMKS(ACLKRCTL, CLKRP, RISING) | MCASP_FMKS(ACLKRCTL, CLKRM, EXTERNAL) | MCASP_FMKS(ACLKRCTL, CLKRDIV, OF(0)), MCASP_FMKS(AHCLKRCTL, HCLKRM, EXTERNAL) | MCASP_FMKS(AHCLKRCTL, HCLKRP, RISING) | MCASP_FMKS(AHCLKRCTL, HCLKRDIV, OF(0)), MCASP_FMKS(RTDM, RTDMS31, INACTIVE) | MCASP_FMKS(RTDM, RTDMS30, INACTIVE) | MCASP_FMKS(RTDM, RTDMS29, INACTIVE) | MCASP_FMKS(RTDM, RTDMS28, INACTIVE) | MCASP_FMKS(RTDM, RTDMS27, INACTIVE) | MCASP_FMKS(RTDM, RTDMS26, INACTIVE) | MCASP_FMKS(RTDM, RTDMS25, INACTIVE) | MCASP_FMKS(RTDM, RTDMS24, INACTIVE) | MCASP_FMKS(RTDM, RTDMS23, INACTIVE) | MCASP_FMKS(RTDM, RTDMS22, INACTIVE) | MCASP_FMKS(RTDM, RTDMS21, INACTIVE) | MCASP_FMKS(RTDM, RTDMS20, INACTIVE) | MCASP_FMKS(RTDM, RTDMS19, INACTIVE) | MCASP_FMKS(RTDM, RTDMS18, INACTIVE) | MCASP_FMKS(RTDM, RTDMS17, INACTIVE) | MCASP_FMKS(RTDM, RTDMS16, INACTIVE) | MCASP_FMKS(RTDM, RTDMS15, INACTIVE) | MCASP_FMKS(RTDM, RTDMS14, INACTIVE) | MCASP_FMKS(RTDM, RTDMS13, INACTIVE) | MCASP_FMKS(RTDM, RTDMS12, INACTIVE) | MCASP_FMKS(RTDM, RTDMS11, INACTIVE) | MCASP_FMKS(RTDM, RTDMS10, INACTIVE) | MCASP_FMKS(RTDM, RTDMS9, INACTIVE) | MCASP_FMKS(RTDM, RTDMS8, INACTIVE) | MCASP_FMKS(RTDM, RTDMS7, INACTIVE) | MCASP_FMKS(RTDM, RTDMS6, INACTIVE) | MCASP_FMKS(RTDM, RTDMS5, INACTIVE) | MCASP_FMKS(RTDM, RTDMS4, INACTIVE) | MCASP_FMKS(RTDM, RTDMS3, INACTIVE) | MCASP_FMKS(RTDM, RTDMS2, INACTIVE) | MCASP_FMKS(RTDM, RTDMS1, INACTIVE) | MCASP_FMKS(RTDM, RTDMS0, ACTIVE), MCASP_FMKS(RINTCTL, RSTAFRM, DISABLE) | MCASP_FMKS(RINTCTL, RDATA, DISABLE) | MCASP_FMKS(RINTCTL, RLAST, DISABLE) | MCASP_FMKS(RINTCTL, RDMAERR, DISABLE) | MCASP_FMKS(RINTCTL, RCKFAIL, DISABLE) | MCASP_FMKS(RINTCTL, RSYNCERR, DISABLE) | MCASP_FMKS(RINTCTL, ROVRN, DISABLE), MCASP_FMKS(RCLKCHK, RMAX, DEFAULT) | MCASP_FMKS(RCLKCHK, RMIN, DEFAULT) | MCASP_FMKS(RCLKCHK, RPS, DEFAULT) }; MCASP_ConfigXmt configXmt = { MCASP_FMKS(XMASK, XMASK31, NOMASK) | MCASP_FMKS(XMASK, XMASK30, NOMASK) | MCASP_FMKS(XMASK, XMASK29, NOMASK) | MCASP_FMKS(XMASK, XMASK28, NOMASK) | MCASP_FMKS(XMASK, XMASK27, NOMASK) | MCASP_FMKS(XMASK, XMASK26, NOMASK) | MCASP_FMKS(XMASK, XMASK25, NOMASK) | MCASP_FMKS(XMASK, XMASK24, NOMASK) | MCASP_FMKS(XMASK, XMASK23, NOMASK) | MCASP_FMKS(XMASK, XMASK22, NOMASK) | MCASP_FMKS(XMASK, XMASK21, NOMASK) | MCASP_FMKS(XMASK, XMASK20, NOMASK) | MCASP_FMKS(XMASK, XMASK19, NOMASK) | MCASP_FMKS(XMASK, XMASK18, NOMASK) | MCASP_FMKS(XMASK, XMASK17, NOMASK) | MCASP_FMKS(XMASK, XMASK16, NOMASK) | MCASP_FMKS(XMASK, XMASK15, NOMASK) | MCASP_FMKS(XMASK, XMASK14, NOMASK) | MCASP_FMKS(XMASK, XMASK13, NOMASK) | MCASP_FMKS(XMASK, XMASK12, NOMASK) | MCASP_FMKS(XMASK, XMASK11, NOMASK) | MCASP_FMKS(XMASK, XMASK10, NOMASK) | MCASP_FMKS(XMASK, XMASK9, NOMASK) | MCASP_FMKS(XMASK, XMASK8, NOMASK) | MCASP_FMKS(XMASK, XMASK7, NOMASK) | MCASP_FMKS(XMASK, XMASK6, NOMASK) | MCASP_FMKS(XMASK, XMASK5, NOMASK) | MCASP_FMKS(XMASK, XMASK4, NOMASK) | MCASP_FMKS(XMASK, XMASK3, NOMASK) | MCASP_FMKS(XMASK, XMASK2, NOMASK) | MCASP_FMKS(XMASK, XMASK1, NOMASK) | 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(); }