evmdm642_edma_aic23.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:20k
源码类别:

DSP编程

开发平台:

C/C++

  1. /*
  2.  *  Copyright 2003 by Texas Instruments Incorporated.
  3.  *  All rights reserved. Property of Texas Instruments Incorporated.
  4.  *  Restricted rights to use, duplicate or disclose this code are
  5.  *  granted through contract.
  6.  *  
  7.  */
  8. /* "@(#) DDK 1.11.00.00 11-04-03 (ddk-b13)" */
  9. /* 
  10.  *  ======== evmdm642_edma_aic23.c ========
  11.  * 
  12.  *  Driver for the aic23 codec on the TMS320C642 EVM. 
  13.  *  Requires the generic TMS320C6x1x McASP driver.
  14.  */
  15. #include <std.h>
  16. #include <iom.h>
  17. #include <csl.h>
  18. #include <csl_mcasp.h>
  19. #include <csl_edma.h>
  20. #include <aic23.h>
  21. #include <evmdm642_edma_aic23.h>
  22. #include <c6x1x_edma_mcasp.h>
  23. #define MCASPPORT  0
  24. #define GENERICDEVPARAMS {                                                 
  25.     C6X1X_EDMA_MCASP_VERSION_1, /* version id */                           
  26.     TRUE, /* True if buffers are in cacheable memory (set in mdBindDev) */ 
  27.     /* Driver not enable the McASP high frequecy rate generator */         
  28.     C6X1X_EDMA_MCASP_EXTERNAL,                                             
  29.     /* Driver not enable the McASP clk rate generator */                   
  30.     C6X1X_EDMA_MCASP_EXTERNAL,                                             
  31.     /* Driver not enable the McASP frame sync generator */                 
  32.     C6X1X_EDMA_MCASP_EXTERNAL,                                             
  33.     0,     /* IRQ id to use for the EDMA (set in mdBindDev) */             
  34.     NULL,  /* McASP configuration for the loopback (set in mdBindDev) */   
  35.     -1,    /* input event irq id */                                        
  36.     -1,    /* output event irq id */                                       
  37.     NULL,   /* event callback */                                           
  38.     EVMDM642_EDMA_AIC23_INTR_MASK_DEFAULT,                                 
  39.     EVMDM642_EDMA_AIC23_INTR_MASK_DEFAULT,                                 
  40.     EVMDM642_EDMA_AIC23_INTR_MASK_DEFAULT                                  
  41. }
  42. EVMDM642_EDMA_AIC23_DevParams EVMDM642_EDMA_AIC23_DEVPARAMS =  
  43.                                  EVMDM642_EDMA_AIC23_DEFAULT_DEVPARAMS;
  44. /*
  45.  * Forward declaration of the IOM interface functions. They are only
  46.  * exposed via the IOM function table to avoid namespace pollution.
  47.  */
  48. static Int mdBindDev(Ptr *devp, Int devid, Ptr devParams);
  49. static Int mdCreateChan(Ptr *chanp, Ptr devp, String name, Int mode,
  50.                         Ptr chanParams, IOM_TiomCallback cbFxn, Ptr cbArg);
  51. /*
  52.  * The codec driver function table. Notice how we copy most functions
  53.  * from the generic c6x1x edma mcasp driver.
  54.  */
  55. IOM_Fxns EVMDM642_EDMA_AIC23_FXNS = {
  56.     &mdBindDev,
  57.     NULL,
  58.     NULL,
  59.     &mdCreateChan,
  60.     NULL,
  61.     NULL
  62. };
  63. /*
  64.  * ======== mdBindDev ========
  65.  * This function allocates and configures the pcm3002 codec.
  66.  */
  67. static Int mdBindDev(Ptr *devp, Int devid, Ptr devParams)
  68. {
  69.    EVMDM642_EDMA_AIC23_DevParams *params =
  70.         (EVMDM642_EDMA_AIC23_DevParams *) devParams;
  71.     C6X1X_EDMA_MCASP_DevParams genericParams = GENERICDEVPARAMS;
  72.     MCASP_ConfigGbl configGbl = {
  73.         MCASP_FMKS(PFUNC, AFSR, MCASP)          |
  74.         MCASP_FMKS(PFUNC, AHCLKR, MCASP)        |
  75.         MCASP_FMKS(PFUNC, ACLKR, MCASP)         |
  76.         MCASP_FMKS(PFUNC, AFSX, MCASP)          |
  77.         MCASP_FMKS(PFUNC, AHCLKX, MCASP)        |
  78.         MCASP_FMKS(PFUNC, ACLKX, MCASP)         |
  79.         MCASP_FMKS(PFUNC, AMUTE, MCASP)         |
  80. /*      MCASP_FMKS(PFUNC, AXR15, MCASP)         |
  81.         MCASP_FMKS(PFUNC, AXR14, MCASP)         |
  82.         MCASP_FMKS(PFUNC, AXR13, MCASP)         |
  83.         MCASP_FMKS(PFUNC, AXR12, MCASP)         |
  84.         MCASP_FMKS(PFUNC, AXR11, MCASP)         |
  85.         MCASP_FMKS(PFUNC, AXR10, MCASP)         |
  86.         MCASP_FMKS(PFUNC, AXR9, MCASP)          |
  87.         MCASP_FMKS(PFUNC, AXR8, MCASP)          |  */ 
  88.         MCASP_FMKS(PFUNC, AXR7, MCASP)          |
  89.         MCASP_FMKS(PFUNC, AXR6, MCASP)          |
  90.         MCASP_FMKS(PFUNC, AXR5, MCASP)          |
  91.         MCASP_FMKS(PFUNC, AXR4, MCASP)          |
  92.         MCASP_FMKS(PFUNC, AXR3, MCASP)          |
  93.         MCASP_FMKS(PFUNC, AXR2, MCASP)          |
  94.         MCASP_FMKS(PFUNC, AXR1, MCASP)          |
  95.         MCASP_FMKS(PFUNC, AXR0, MCASP),
  96.         MCASP_FMKS(PDIR, AFSR, IN)              |
  97.         MCASP_FMKS(PDIR, AHCLKR, IN)            |
  98.         MCASP_FMKS(PDIR, ACLKR, IN)             |
  99.         MCASP_FMKS(PDIR, AFSX, IN)              |
  100.         MCASP_FMKS(PDIR, AHCLKX, IN)            |
  101.         MCASP_FMKS(PDIR, ACLKX, IN)             |
  102.         MCASP_FMKS(PDIR, AMUTE, DEFAULT)        |
  103.  /*     MCASP_FMKS(PDIR, AXR15, IN)             |
  104.         MCASP_FMKS(PDIR, AXR14, IN)             |
  105.         MCASP_FMKS(PDIR, AXR13, IN)             |
  106.         MCASP_FMKS(PDIR, AXR12, IN)             |
  107.         MCASP_FMKS(PDIR, AXR11, IN)             |
  108.         MCASP_FMKS(PDIR, AXR10, IN)             |
  109.         MCASP_FMKS(PDIR, AXR9, IN)              |
  110.         MCASP_FMKS(PDIR, AXR8, IN)              |  */
  111.         MCASP_FMKS(PDIR, AXR7, IN)              |
  112.         MCASP_FMKS(PDIR, AXR6, IN)              |
  113.         MCASP_FMKS(PDIR, AXR5, IN)              |
  114.         MCASP_FMKS(PDIR, AXR4, IN)              |
  115.         MCASP_FMKS(PDIR, AXR3, IN)              |
  116.         MCASP_FMKS(PDIR, AXR2, IN)              |
  117.         MCASP_FMKS(PDIR, AXR1, IN)              |
  118.         MCASP_FMKS(PDIR, AXR0, OUT),
  119.         MCASP_DITCTL_DEFAULT,   
  120.         MCASP_FMKS(DLBCTL, MODE, DEFAULT)       |
  121.         MCASP_FMKS(DLBCTL, ORD, DEFAULT)        |
  122.         MCASP_FMKS(DLBCTL, DLBEN, DISABLE),
  123.         MCASP_AMUTE_DEFAULT
  124.     };
  125.     
  126.     MCASP_ConfigRcv configRcv = {
  127.         MCASP_FMKS(RMASK, RMASK31, NOMASK)      |
  128.         MCASP_FMKS(RMASK, RMASK30, NOMASK)      |
  129.         MCASP_FMKS(RMASK, RMASK29, NOMASK)      |
  130.         MCASP_FMKS(RMASK, RMASK28, NOMASK)      |
  131.         MCASP_FMKS(RMASK, RMASK27, NOMASK)      |
  132.         MCASP_FMKS(RMASK, RMASK26, NOMASK)      |
  133.         MCASP_FMKS(RMASK, RMASK25, NOMASK)      |
  134.         MCASP_FMKS(RMASK, RMASK24, NOMASK)      |
  135.         MCASP_FMKS(RMASK, RMASK23, NOMASK)      |
  136.         MCASP_FMKS(RMASK, RMASK22, NOMASK)      |
  137.         MCASP_FMKS(RMASK, RMASK21, NOMASK)      |
  138.         MCASP_FMKS(RMASK, RMASK20, NOMASK)      |
  139.         MCASP_FMKS(RMASK, RMASK19, NOMASK)      |
  140.         MCASP_FMKS(RMASK, RMASK18, NOMASK)      |
  141.         MCASP_FMKS(RMASK, RMASK17, NOMASK)      |
  142.         MCASP_FMKS(RMASK, RMASK16, NOMASK)      |
  143.         MCASP_FMKS(RMASK, RMASK15, NOMASK)      |
  144.         MCASP_FMKS(RMASK, RMASK14, NOMASK)      |
  145.         MCASP_FMKS(RMASK, RMASK13, NOMASK)      |
  146.         MCASP_FMKS(RMASK, RMASK12, NOMASK)      |
  147.         MCASP_FMKS(RMASK, RMASK11, NOMASK)      |
  148.         MCASP_FMKS(RMASK, RMASK10, NOMASK)      |
  149.         MCASP_FMKS(RMASK, RMASK9, NOMASK)       |
  150.         MCASP_FMKS(RMASK, RMASK8, NOMASK)       |
  151.         MCASP_FMKS(RMASK, RMASK7, NOMASK)       |
  152.         MCASP_FMKS(RMASK, RMASK6, NOMASK)       |
  153.         MCASP_FMKS(RMASK, RMASK5, NOMASK)       |
  154.         MCASP_FMKS(RMASK, RMASK4, NOMASK)       |
  155.         MCASP_FMKS(RMASK, RMASK3, NOMASK)       |
  156.         MCASP_FMKS(RMASK, RMASK2, NOMASK)       |
  157.         MCASP_FMKS(RMASK, RMASK1, NOMASK)       |
  158.         MCASP_FMKS(RMASK, RMASK0, NOMASK),
  159.       
  160.         MCASP_FMKS(RFMT, RDATDLY, 0BIT)         |
  161.         MCASP_FMKS(RFMT, RRVRS, MSBFIRST)       |
  162.         MCASP_FMKS(RFMT, RPAD, ZERO)            |
  163.         MCASP_FMKS(RFMT, RPBIT, DEFAULT)        |
  164.         MCASP_FMKS(RFMT, RSSZ, 32BITS)          |
  165.         MCASP_FMKS(RFMT, RBUSEL, DAT)           |
  166.         MCASP_FMKS(RFMT, RROT, NONE),
  167.         MCASP_FMKS(AFSRCTL, RMOD, BURST)        |
  168.         MCASP_FMKS(AFSRCTL, FRWID, BIT) |
  169.         MCASP_FMKS(AFSRCTL, FSRM, EXTERNAL)     |
  170.         MCASP_FMKS(AFSRCTL, FSRP, ACTIVEHIGH),
  171.         MCASP_FMKS(ACLKRCTL, CLKRP, RISING)     |
  172.         MCASP_FMKS(ACLKRCTL, CLKRM, EXTERNAL)   |
  173.         MCASP_FMKS(ACLKRCTL, CLKRDIV, OF(0)),
  174.         MCASP_FMKS(AHCLKRCTL, HCLKRM, EXTERNAL) |
  175.         MCASP_FMKS(AHCLKRCTL, HCLKRP, RISING)   |     
  176.         MCASP_FMKS(AHCLKRCTL, HCLKRDIV, OF(0)),
  177.         MCASP_FMKS(RTDM, RTDMS31, INACTIVE)     |
  178.         MCASP_FMKS(RTDM, RTDMS30, INACTIVE)     |
  179.         MCASP_FMKS(RTDM, RTDMS29, INACTIVE)     |
  180.         MCASP_FMKS(RTDM, RTDMS28, INACTIVE)     |
  181.         MCASP_FMKS(RTDM, RTDMS27, INACTIVE)     |
  182.         MCASP_FMKS(RTDM, RTDMS26, INACTIVE)     |
  183.         MCASP_FMKS(RTDM, RTDMS25, INACTIVE)     |
  184.         MCASP_FMKS(RTDM, RTDMS24, INACTIVE)     |
  185.         MCASP_FMKS(RTDM, RTDMS23, INACTIVE)     |
  186.         MCASP_FMKS(RTDM, RTDMS22, INACTIVE)     |
  187.         MCASP_FMKS(RTDM, RTDMS21, INACTIVE)     |
  188.         MCASP_FMKS(RTDM, RTDMS20, INACTIVE)     |
  189.         MCASP_FMKS(RTDM, RTDMS19, INACTIVE)     |
  190.         MCASP_FMKS(RTDM, RTDMS18, INACTIVE)     |      
  191.         MCASP_FMKS(RTDM, RTDMS17, INACTIVE)     |
  192.         MCASP_FMKS(RTDM, RTDMS16, INACTIVE)     |
  193.         MCASP_FMKS(RTDM, RTDMS15, INACTIVE)     |
  194.         MCASP_FMKS(RTDM, RTDMS14, INACTIVE)     |
  195.         MCASP_FMKS(RTDM, RTDMS13, INACTIVE)     |
  196.         MCASP_FMKS(RTDM, RTDMS12, INACTIVE)     |
  197.         MCASP_FMKS(RTDM, RTDMS11, INACTIVE)     |
  198.         MCASP_FMKS(RTDM, RTDMS10, INACTIVE)     |
  199.         MCASP_FMKS(RTDM, RTDMS9, INACTIVE)      |
  200.         MCASP_FMKS(RTDM, RTDMS8, INACTIVE)      |
  201.         MCASP_FMKS(RTDM, RTDMS7, INACTIVE)      |
  202.         MCASP_FMKS(RTDM, RTDMS6, INACTIVE)      |
  203.         MCASP_FMKS(RTDM, RTDMS5, INACTIVE)      |
  204.         MCASP_FMKS(RTDM, RTDMS4, INACTIVE)      |
  205.         MCASP_FMKS(RTDM, RTDMS3, INACTIVE)      |
  206.         MCASP_FMKS(RTDM, RTDMS2, INACTIVE)      |
  207.         MCASP_FMKS(RTDM, RTDMS1, INACTIVE)      |
  208.         MCASP_FMKS(RTDM, RTDMS0, ACTIVE),
  209.         MCASP_FMKS(RINTCTL, RSTAFRM, DISABLE)   |
  210.         MCASP_FMKS(RINTCTL, RDATA, DISABLE)     |
  211.         MCASP_FMKS(RINTCTL, RLAST, DISABLE)     |
  212.         MCASP_FMKS(RINTCTL, RDMAERR, DISABLE)   |
  213.         MCASP_FMKS(RINTCTL, RCKFAIL, DISABLE)   |
  214.         MCASP_FMKS(RINTCTL, RSYNCERR, DISABLE)  |
  215.         MCASP_FMKS(RINTCTL, ROVRN, DISABLE),
  216.         MCASP_FMKS(RCLKCHK, RMAX, DEFAULT)      |
  217.         MCASP_FMKS(RCLKCHK, RMIN, DEFAULT)      |
  218.         MCASP_FMKS(RCLKCHK, RPS, DEFAULT)       
  219.     }; 
  220.     MCASP_ConfigXmt configXmt = {
  221.         MCASP_FMKS(XMASK, XMASK31, NOMASK)      |
  222.         MCASP_FMKS(XMASK, XMASK30, NOMASK)      |
  223.         MCASP_FMKS(XMASK, XMASK29, NOMASK)      |
  224.         MCASP_FMKS(XMASK, XMASK28, NOMASK)      |
  225.         MCASP_FMKS(XMASK, XMASK27, NOMASK)      |
  226.         MCASP_FMKS(XMASK, XMASK26, NOMASK)      |
  227.         MCASP_FMKS(XMASK, XMASK25, NOMASK)      |
  228.         MCASP_FMKS(XMASK, XMASK24, NOMASK)      |
  229.         MCASP_FMKS(XMASK, XMASK23, NOMASK)      |
  230.         MCASP_FMKS(XMASK, XMASK22, NOMASK)      |
  231.         MCASP_FMKS(XMASK, XMASK21, NOMASK)      |
  232.         MCASP_FMKS(XMASK, XMASK20, NOMASK)      |
  233.         MCASP_FMKS(XMASK, XMASK19, NOMASK)      |
  234.         MCASP_FMKS(XMASK, XMASK18, NOMASK)      |
  235.         MCASP_FMKS(XMASK, XMASK17, NOMASK)      |
  236.         MCASP_FMKS(XMASK, XMASK16, NOMASK)      |
  237.         MCASP_FMKS(XMASK, XMASK15, NOMASK)      |
  238.         MCASP_FMKS(XMASK, XMASK14, NOMASK)      |
  239.         MCASP_FMKS(XMASK, XMASK13, NOMASK)      |
  240.         MCASP_FMKS(XMASK, XMASK12, NOMASK)      |
  241.         MCASP_FMKS(XMASK, XMASK11, NOMASK)      |
  242.         MCASP_FMKS(XMASK, XMASK10, NOMASK)      |
  243.         MCASP_FMKS(XMASK, XMASK9, NOMASK)       |
  244.         MCASP_FMKS(XMASK, XMASK8, NOMASK)       |
  245.         MCASP_FMKS(XMASK, XMASK7, NOMASK)       |
  246.         MCASP_FMKS(XMASK, XMASK6, NOMASK)       |
  247.         MCASP_FMKS(XMASK, XMASK5, NOMASK)       |
  248.         MCASP_FMKS(XMASK, XMASK4, NOMASK)       |
  249.         MCASP_FMKS(XMASK, XMASK3, NOMASK)       |
  250.         MCASP_FMKS(XMASK, XMASK2, NOMASK)       |
  251.         MCASP_FMKS(XMASK, XMASK1, NOMASK)       |
  252.         MCASP_FMKS(XMASK, XMASK0, NOMASK),
  253.         
  254.         MCASP_FMKS(XFMT, XDATDLY, 0BIT)         |
  255.         MCASP_FMKS(XFMT, XRVRS, MSBFIRST)       |
  256.         MCASP_FMKS(XFMT, XPAD, ZERO)            |
  257.         MCASP_FMKS(XFMT, XPBIT, DEFAULT)        |
  258.         MCASP_FMKS(XFMT, XSSZ, 32BITS)          |
  259.         MCASP_FMKS(XFMT, XBUSEL, DAT)           |
  260.         MCASP_FMKS(XFMT, XROT, NONE),
  261.         MCASP_FMKS(AFSXCTL, XMOD, BURST)        |
  262.         MCASP_FMKS(AFSXCTL, FXWID, BIT) |
  263.         MCASP_FMKS(AFSXCTL, FSXM, EXTERNAL)     |
  264.         MCASP_FMKS(AFSXCTL, FSXP, ACTIVEHIGH),
  265.         MCASP_FMKS(ACLKXCTL, CLKXP, FALLING)    |
  266.         MCASP_FMKS(ACLKXCTL, ASYNC, ASYNC)      |
  267.         MCASP_FMKS(ACLKXCTL, CLKXM, EXTERNAL)   |
  268.         MCASP_FMKS(ACLKXCTL, CLKXDIV, OF(0)),
  269.   
  270.         MCASP_FMKS(AHCLKXCTL, HCLKXM, EXTERNAL) |
  271.         MCASP_FMKS(AHCLKXCTL, HCLKXP, RISING)   |     
  272.         MCASP_FMKS(AHCLKXCTL, HCLKXDIV, OF(0)),
  273.         MCASP_FMKS(XTDM, XTDMS31, INACTIVE)     |
  274.         MCASP_FMKS(XTDM, XTDMS30, INACTIVE)     |
  275.         MCASP_FMKS(XTDM, XTDMS29, INACTIVE)     |
  276.         MCASP_FMKS(XTDM, XTDMS28, INACTIVE)     |       
  277.         MCASP_FMKS(XTDM, XTDMS27, INACTIVE)     |
  278.         MCASP_FMKS(XTDM, XTDMS26, INACTIVE)     |
  279.         MCASP_FMKS(XTDM, XTDMS25, INACTIVE)     |
  280.         MCASP_FMKS(XTDM, XTDMS24, INACTIVE)     |
  281.         MCASP_FMKS(XTDM, XTDMS23, INACTIVE)     |
  282.         MCASP_FMKS(XTDM, XTDMS22, INACTIVE)     |
  283.         MCASP_FMKS(XTDM, XTDMS21, INACTIVE)     |
  284.         MCASP_FMKS(XTDM, XTDMS20, INACTIVE)     |
  285.         MCASP_FMKS(XTDM, XTDMS19, INACTIVE)     |
  286.         MCASP_FMKS(XTDM, XTDMS18, INACTIVE)     |      
  287.         MCASP_FMKS(XTDM, XTDMS17, INACTIVE)     |
  288.         MCASP_FMKS(XTDM, XTDMS16, INACTIVE)     |
  289.         MCASP_FMKS(XTDM, XTDMS15, INACTIVE)     |
  290.         MCASP_FMKS(XTDM, XTDMS14, INACTIVE)     |
  291.         MCASP_FMKS(XTDM, XTDMS13, INACTIVE)     |
  292.         MCASP_FMKS(XTDM, XTDMS12, INACTIVE)     |
  293.         MCASP_FMKS(XTDM, XTDMS11, INACTIVE)     |
  294.         MCASP_FMKS(XTDM, XTDMS10, INACTIVE)     |
  295.         MCASP_FMKS(XTDM, XTDMS9, INACTIVE)      |
  296.         MCASP_FMKS(XTDM, XTDMS8, INACTIVE)      |
  297.         MCASP_FMKS(XTDM, XTDMS7, INACTIVE)      |
  298.         MCASP_FMKS(XTDM, XTDMS6, INACTIVE)      |
  299.         MCASP_FMKS(XTDM, XTDMS5, INACTIVE)      |
  300.         MCASP_FMKS(XTDM, XTDMS4, INACTIVE)      |
  301.         MCASP_FMKS(XTDM, XTDMS3, INACTIVE)      |
  302.         MCASP_FMKS(XTDM, XTDMS2, INACTIVE)      |
  303.         MCASP_FMKS(XTDM, XTDMS1, INACTIVE)      |
  304.         MCASP_FMKS(XTDM, XTDMS0, ACTIVE),
  305.         MCASP_FMKS(XINTCTL, XSTAFRM, DISABLE)   |
  306.         MCASP_FMKS(XINTCTL, XDATA, DISABLE)     |
  307.         MCASP_FMKS(XINTCTL, XLAST, DISABLE)     |
  308.         MCASP_FMKS(XINTCTL, XDMAERR, DISABLE)   |
  309.         MCASP_FMKS(XINTCTL, XCKFAIL, DISABLE)   |
  310.         MCASP_FMKS(XINTCTL, XSYNCERR, DISABLE)  |
  311.         MCASP_FMKS(XINTCTL, XUNDRN, DISABLE),
  312.         MCASP_FMKS(XCLKCHK, XMAX, DEFAULT)      |
  313.         MCASP_FMKS(XCLKCHK, XMIN, DEFAULT)      |
  314.         MCASP_FMKS(XCLKCHK, XPS, DEFAULT)       
  315.     }; 
  316.     MCASP_ConfigSrctl configSrctl = {
  317.         MCASP_FMKS(SRCTL, DISMOD, HIGH)         |
  318.         MCASP_FMKS(SRCTL, SRMOD, XMT),
  319.         MCASP_FMKS(SRCTL, DISMOD, HIGH)         |
  320.         MCASP_FMKS(SRCTL, SRMOD, RCV),
  321.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  322.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  323.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  324.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  325.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  326.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  327.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  328.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  329.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  330.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  331.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  332.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE)
  333. /*      MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  334.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  335.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  336.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  337.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  338.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  339.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  340.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  341.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  342.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  343.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  344.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  345.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  346.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE),
  347.         MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
  348.         MCASP_FMKS(SRCTL, SRMOD, INACTIVE) */
  349. };
  350.     MCASP_Config mcaspCfg;
  351.     mcaspCfg.global = &configGbl;
  352.     mcaspCfg.receive = &configRcv;
  353.     mcaspCfg.transmit = &configXmt;
  354.     mcaspCfg.srctl = &configSrctl;
  355.     
  356.     /* If no device parameters are passed, use the defaults. */
  357.     if (params == NULL) {
  358.         params = &EVMDM642_EDMA_AIC23_DEVPARAMS;
  359.     }
  360.     /* Check if the version is supported by the driver. */
  361.     if(params->versionId != EVMDM642_EDMA_AIC23_VERSION_1){
  362.         /* Unsupported version */
  363.         return(IOM_EBADARGS);
  364.     }
  365.     /* Set the McASP */ 
  366.     genericParams.mcaspCfgPtr = &mcaspCfg;
  367.     genericParams.irqId = params->irqId;
  368.     genericParams.enableClkg = params->enableClkg;
  369.     genericParams.enableHclkg = params->enableHclkg;
  370.     genericParams.enableFsyncg = params->enableFsyncg;
  371.     genericParams.cacheCalls = params->cacheCalls;
  372.     genericParams.inEvtIrqId = params->inEvtIrqId;
  373.     genericParams.outEvtIrqId = params->outEvtIrqId;
  374.     genericParams.evtCallback = params->evtCallback;
  375.     genericParams.inEvtIntrMask  = params->inEvtIntrMask;
  376.     genericParams.outEvtIntrMask  = params->outEvtIntrMask;
  377.     /* Set the interrupt mask */
  378.     genericParams.edmaIntrMask = params->edmaIntrMask;
  379.     /* Set codec parameters */
  380.     if (!AIC23_setParams(&(params->aic23Config))) {
  381.         return (IOM_EALLOC);
  382.     }
  383.     /* Call the generic mdBindDev to claim mcasp port MCASPPORT */
  384.     return (C6X1X_EDMA_MCASP_FXNS.mdBindDev)(devp, MCASPPORT, &genericParams);
  385. }
  386. /*
  387.  * ======== mdCreateChan ========
  388.  * This function creates and configures a device channel.
  389.  */
  390. static Int mdCreateChan(Ptr *chanp, Ptr devp, String name, Int mode,
  391.                         Ptr chanParams, IOM_TiomCallback cbFxn, Ptr cbArg)
  392. {
  393.     Int result;
  394.     C6X1X_EDMA_MCASP_ChanParams genericParams;
  395.     EDMA_Config edmaCfg = {
  396.         EDMA_FMKS(OPT, PRI, HIGH)             |
  397.         EDMA_FMKS(OPT, ESIZE, 32BIT)          |
  398.         EDMA_FMKS(OPT, 2DS, NO)               |
  399.         EDMA_FMKS(OPT, SUM, NONE)             |
  400.         EDMA_FMKS(OPT, 2DD, NO)               |
  401.         EDMA_FMKS(OPT, DUM, NONE)             |
  402.         EDMA_FMKS(OPT, TCINT, YES)            |
  403.         EDMA_FMK (OPT, TCC, NULL)             |
  404.         EDMA_FMKS(OPT, LINK, YES)             |
  405.         EDMA_FMKS(OPT, FS, YES),
  406.         EDMA_FMK(SRC, SRC, NULL),
  407.         EDMA_FMKS(CNT, FRMCNT, DEFAULT)       |
  408.         EDMA_FMKS(CNT, ELECNT, DEFAULT),
  409.         EDMA_FMK(DST, DST, NULL),
  410.         EDMA_FMKS(IDX, FRMIDX, DEFAULT)       |
  411.         EDMA_FMKS(IDX, ELEIDX, DEFAULT),
  412.         EDMA_FMKS(RLD, ELERLD, DEFAULT)       |
  413.         EDMA_FMK(RLD, LINK, NULL)
  414.     };      
  415.     /* Set ELECNT, ELERLD to the active serializers */
  416.     /* FRMCNT will be 1 pair of SRCTL and set in C6x1x_edma_mcasp driver */
  417.     EDMA_FSETA(&edmaCfg.cnt, CNT, ELECNT, 1);   
  418.     EDMA_FSETA(&edmaCfg.rld, RLD, ELERLD, 1); 
  419.     if (mode == IOM_INPUT) {
  420.         EDMA_FSETSA(&edmaCfg.opt, OPT, DUM, INC);
  421.         /* Select EDMA channel 13 for rcv here */
  422.         genericParams.edmaChan = 13;
  423.     } else {
  424.         EDMA_FSETSA(&edmaCfg.opt, OPT, SUM, INC);
  425.         /* Select EDMA channel 12 for xmt here */
  426.         genericParams.edmaChan = 12;
  427.     }
  428.     genericParams.edmaCfgPtr = &edmaCfg;
  429.     /* 
  430.      * for loopback, no need to sync to external frame sync, 
  431.      * set to 5 to run loop edma job long enough for sync real xmt & rcv job
  432.      */  
  433.     genericParams.tdmChans = 1;
  434.     
  435.     result = (C6X1X_EDMA_MCASP_FXNS.mdCreateChan)(chanp, devp, name, mode,
  436.                                                 &genericParams, cbFxn, cbArg);
  437.     return (result);
  438. }
  439. /*
  440.  * ======== EVMDM642_EDMA_AIC23_init ========
  441.  * This function initializes the driver's structures.
  442.  */
  443. Void EVMDM642_EDMA_AIC23_init()
  444. {
  445.     /* Pass some IOM fxns straight to the generic driver */
  446.     EVMDM642_EDMA_AIC23_FXNS.mdControlChan =
  447.         C6X1X_EDMA_MCASP_FXNS.mdControlChan;
  448.     EVMDM642_EDMA_AIC23_FXNS.mdDeleteChan =
  449.         C6X1X_EDMA_MCASP_FXNS.mdDeleteChan;
  450.     EVMDM642_EDMA_AIC23_FXNS.mdSubmitChan =
  451.         C6X1X_EDMA_MCASP_FXNS.mdSubmitChan;
  452.     EVMDM642_EDMA_AIC23_FXNS.mdUnBindDev =
  453.         C6X1X_EDMA_MCASP_FXNS.mdUnBindDev;
  454.     C6X1X_EDMA_MCASP_init();
  455. }