1 /*
2  * Copyright (c) 2015-2019, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /*
33  *  ======== I2S.c ========
34  */
35 
36 #include <ti/drivers/I2S.h>
37 
38 extern const I2S_Config I2S_config[];
39 extern const uint_least8_t I2S_count;
40 
41 /* Default I2S parameters structure */
42 const I2S_Params I2S_defaultParams = {
43   .samplingFrequency     = 8000,                              /* Sampling Freq */
44   .memorySlotLength      = I2S_MEMORY_LENGTH_16BITS,          /* Memory slot length */
45   .moduleRole            = I2S_MASTER,                        /* Master / Slave selection */
46   .trueI2sFormat         = (bool)true,                        /* Activate true I2S format */
47   .invertWS              = (bool)true,                        /* WS inversion */
48   .isMSBFirst            = (bool)true,                        /* Endianness selection */
49   .isDMAUnused           = (bool)false,                       /* Selection between DMA and CPU transmissions */
50   .samplingEdge          = I2S_SAMPLING_EDGE_RISING,          /* Sampling edge */
51   .beforeWordPadding     = 0,                                 /* Before sample padding */
52   .bitsPerWord           = 16,                                /* Bits/Sample */
53   .afterWordPadding      = 0,                                 /* After sample padding */
54   .fixedBufferLength     = 1,                                 /* Fixed Buffer Length */
55   .SD0Use                = I2S_SD0_OUTPUT,                    /* SD0Use */
56   .SD1Use                = I2S_SD1_INPUT,                     /* SD1Use */
57   .SD0Channels           = I2S_CHANNELS_STEREO,               /* Channels activated on SD0 */
58   .SD1Channels           = I2S_CHANNELS_STEREO,               /* Channels activated on SD1 */
59   .phaseType             = I2S_PHASE_TYPE_DUAL,               /* Phase type */
60   .startUpDelay          = 0,                                 /* Start up delay */
61   .MCLKDivider           = 40,                                /* MCLK divider */
62   .readCallback          = NULL,                              /* Read callback */
63   .writeCallback         = NULL,                              /* Write callback */
64   .errorCallback         = NULL,                              /* Error callback */
65   .custom                = NULL,                              /* customParams */
66 };
67 
68 /*
69  *  ======== I2S_Params_init ========
70  */
I2S_Params_init(I2S_Params * params)71 void I2S_Params_init(I2S_Params *params)
72 {
73     *params = I2S_defaultParams;
74 }
75 
76 /*
77  *  ======== I2S_Transaction_init ========
78  */
I2S_Transaction_init(I2S_Transaction * transaction)79 void I2S_Transaction_init(I2S_Transaction *transaction)
80 {
81     transaction->bufPtr               = NULL;
82     transaction->bufSize              = 0;
83     transaction->bytesTransferred     = 0;
84     transaction->untransferredBytes   = 0;
85     transaction->numberOfCompletions  = 0;
86     transaction->arg                  = (uintptr_t)NULL;
87 }
88