/* ----------------------------------------------------------------------------
 *         SAM Software Package License 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2014, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

/**
 * \file
  *
  * Implementation WM8904 driver.
  *
  */

/*----------------------------------------------------------------------------
 *        Headers
 *----------------------------------------------------------------------------*/

#include "board.h"

/*----------------------------------------------------------------------------
 *        Type
 *----------------------------------------------------------------------------*/
typedef struct {
    uint16_t value;
    uint8_t address;
}WM8904_PARA;

/*----------------------------------------------------------------------------
 *        Exported functions
 *----------------------------------------------------------------------------*/
/**
 * \brief Read data from WM8904 Register.
 *
 * \param pTwid   Pointer to twi driver structure
 * \param device  Twi slave address.
 * \param regAddr Register address to read.
 * \return value in the given register.
 */
uint16_t WM8904_Read(Twid *pTwid,
                     uint32_t device,
                     uint32_t regAddr)
{
    uint16_t bitsDataRegister;
    uint8_t Tdata[2]={0,0};

    TWID_Read(pTwid, device, regAddr, 1, Tdata, 2, 0);
    bitsDataRegister = (Tdata[0] << 8) | Tdata[1];
    return bitsDataRegister;
}

/**
 * \brief  Write data to WM8904 Register.
 *
 * \param pTwid   Pointer to twi driver structure
 * \param device  Twi slave address.
 * \param regAddr Register address to read.
 * \param data    Data to write
 */
void WM8904_Write(Twid *pTwid,
                  uint32_t device,
                  uint32_t regAddr,
                  uint16_t data)
{
    uint8_t tmpData[2];
    
    tmpData[0] = (data & 0xff00) >> 8;
    tmpData[1] = data & 0xff;
    TWID_Write(pTwid, device, regAddr, 1, tmpData, 2, 0);
}

static WM8904_PARA wm8904_access_slow[]=
{ 
    { 0x0000, 0},         /** R0   - SW Reset and ID */ 
    { 0x001A, 4},       /** R4   - Bias Control 0 */ 
    { 0x0047, 5},       /** R5   - VMID Control 0 */     /*insert_delay_ms 5*/
    
    { 0x0043, 5},       /** R5   - VMID Control 0 */ 
    { 0x000B, 4},       /** R4   - Bias Control 0 */ 

    { 0x0003, 0x0C},      /** R12  - Power Management 0 CC */ 
    
    { 0x0003, 0x0E},      /** R14  - Power Management 2 */ 
    { 0x000C, 0x12},      /** R18  - Power Management 6 */
    { 0x0000, 0x21},      /** R33  - DAC Digital 1 */ 
    { 0x0000, 0x3D},      /** R61  - Analogue OUT12 ZC */ 
    { 0x0001, 0x62},      /** R98  - Charge Pump 0 */ 
    { 0x0005, 0x68},     /** R104 - Class W 0 */ 

    //FLL setting,32.768KHZ MCLK input,12.288M output.
    { 0x0000, 0x74},     /** R116 - FLL Control 1 */ 
    { 0x0704, 0x75},     /** R117 - FLL Control 2 */ 
    { 0x8000, 0x76},     /** R118 - FLL Control 3 */ 
    { 0x1760, 0x77},     /** R119 - FLL Control 4 */ 
    { 0x0005, 0x74},     /** R116 - FLL Control 1 */     /*insert_delay_ms 5*/
    
    { 0x0C05, 0x15},      /** R21  - Clock Rates 1 */ 
    { 0x845E, 0x14},      /** R20  - Clock Rates 0 */     
    { 0x4006, 0x16},      /** R22  - Clock Rates 2 */

    ////////////////WM8904 IIS master
    //BCLK=12.288MHz/8=1.536MHz
    //LRCK=1.536MHz/32=48KHz
    //{ 0x0042, 0x18},      /** R24  - Audio Interface 0 */ 
    { 0x0042, 0x19},      /** R25  - Audio Interface 1 */ 
    { 0x00E8, 0x1A},      /** R26  - Audio Interface 2 */ 
    { 0x0820, 0x1B},      /** R27  - Audio Interface 3 */ 
    ////////////////ADC

    { 0x0003, 0x0C},      /** R12  - Power Management 0 */ 
    { 0x000F, 0x12},      /** R18  - Power Management 6 */     /*insert_delay_ms 5*/

    { 0x0010, 0x2C},      /** R44  - Analogue Left Input 0 */ 
    { 0x0010, 0x2D},      /** R45  - Analogue Right Input 0 */ 
    { 0x0004, 0x2E},      /** R46  - Analogue Left Input 1 */ 
    { 0x0004, 0x2F},      /** R47  - Analogue Right Input 1 */

    { 0x0011, 0x5A},      /** R90  - Analogue HP 0 */ 
    { 0x0033, 0x5A},      /** R90  - Analogue HP 0 */ 
    
    { 0x000F, 0x43},      /** R67  - DC Servo 0 */ 
    { 0x00F0, 0x44},      /** R68  - DC Servo 1 */     /*insert_delay_ms 100*/

    //{ 0x0000, 0xFF},      /** end */ 
    { 0x0077, 0x5A},      /** R90  - Analogue HP 0 */ 
    { 0x00FF, 0x5A},      /** R90  - Analogue HP 0 */ 
    { 0x00B9, 0x39},      /** R57  - Analogue OUT1 Left */ 
    { 0x00B9, 0x3A},      /** R58  - Analogue OUT1 Right */  

    //{ 0x0150, 0x18}  ;Loopback
};

static WM8904_PARA wm8904_access_main[] = 
{ 
    //{ 0x8904, 0}, /** R0   - SW Reset and ID */ 
    //{ 0x0000, 1}, /** R1   - Revision */ 
    //{ 0x0000, 2}, /** R2 */ 
    //{ 0x0000, 3}, /** R3 */ 
    { 0x0019, 4},   /** R4   - Bias Control 0 */ 
    { 0x0043, 5},   /** R5   - VMID Control 0 */ 
    //{ 0x0003, 6},   /** R6   - Mic Bias Control 0 */ 
    //{ 0xC000, 7},   /** R7   - Mic Bias Control 1 */ 
    //{ 0x001E, 8},   /** R8   - Analogue DAC 0 */ 
    //{ 0xFFFF, 9},   /** R9   - mic Filter Control */ 
    //{ 0x0001, 10},  /** R10  - Analogue ADC 0 */ 
    //{ 0x0000, 11},  /** R11 */ 
    { 0x0003, 12},  /** R12  - Power Management 0 */ 
    //{ 0x0000, 13},  /** R13 */ 
    { 0x0003, 14},  /** R14  - Power Management 2 */ 
    //{ 0x0003, 15},  /** R15  - Power Management 3 */ 
    //{ 0x0000, 16},  /** R16 */ 
    //{ 0x0000, 17},  /** R17 */ 
    { 0x000F, 18},  /** R18  - Power Management 6 */ 
    //{ 0x0000, 19},  /** R19 */ 
    { 0x845E, 20},  /** R20  - Clock Rates 0 */ 
    //{ 0x3C07, 21},  /** R21  - Clock Rates 1 */ 
    { 0x0006, 22},  /** R22  - Clock Rates 2 */ 
    //{ 0x0000, 23},  /** R23 */ 
    //{ 0x1FFF, 24},  /** R24  - Audio Interface 0 */ 
    { 0x404A, 25},  /** R25  - Audio Interface 1 */ 
    //{ 0x0004, 26},  /** R26  - Audio Interface 2 */ 
    { 0x0840, 27},  /** R27  - Audio Interface 3 */ 
    //{ 0x0000, 28},  /** R28 */ 
    //{ 0x0000, 29},  /** R29 */ 
    //{ 0x00FF, 30},  /** R30  - DAC Digital Volume Left */ 
    //{ 0x00FF, 31},  /** R31  - DAC Digital Volume Right */ 
    //{ 0x0FFF, 32},  /** R32  - DAC Digital 0 */ 
    { 0x0000, 33},  /** R33  - DAC Digital 1 */ 
    //{ 0x0000, 34},  /** R34 */ 
    //{ 0x0000, 35},  /** R35 */ 
    //{ 0x00FF, 36},  /** R36  - ADC Digital Volume Left */ 
    //{ 0x00FF, 37},  /** R37  - ADC Digital Volume Right */ 
    //{ 0x0073, 38},  /** R38  - ADC Digital 0 */ 
    //{ 0x1800, 39},  /** R39  - Digital Microphone 0 */ 
    //{ 0xDFEF, 40},  /** R40  - DRC 0 */ 
    //{ 0xFFFF, 41},  /** R41  - DRC 1 */ 
    //{ 0x003F, 42},  /** R42  - DRC 2 */ 
    //{ 0x07FF, 43},  /** R43  - DRC 3 */ 
    { 0x0005, 44},  /** R44  - Analogue Left Input 0 */ 
    { 0x0005, 45},  /** R45  - Analogue Right Input 0 */ 
    { 0x0000, 46},  /** R46  - Analogue Left Input 1 */ 
    { 0x0000, 47},  /** R47  - Analogue Right Input 1 */ 
    //{ 0x0000, 48},  /** R48 */ 
    //{ 0x0000, 49},  /** R49 */ 
    //{ 0x0000, 50},  /** R50 */ 
    //{ 0x0000, 51},  /** R51 */ 
    //{ 0x0000, 52},  /** R52 */ 
    //{ 0x0000, 53},  /** R53 */ 
    //{ 0x0000, 54},  /** R54 */ 
    //{ 0x0000, 55},  /** R55 */ 
    //{ 0x0000, 56},  /** R56 */ 
    //{ 0x017F, 57},  /** R57  - Analogue OUT1 Left */ 
    { 0x00AD, 58},  /** R58  - Analogue OUT1 Right */ 
    //{ 0x017F, 59},  /** R59  - Analogue OUT2 Left */ 
    //{ 0x017F, 60},  /** R60  - Analogue OUT2 Right */ 
    //{ 0x000F, 61},  /** R61  - Analogue OUT12 ZC */ 
    //{ 0x0000, 62},  /** R62 */ 
    //{ 0x0000, 63},  /** R63 */ 
    //{ 0x0000, 64},  /** R64 */ 
    //{ 0x0000, 65},  /** R65 */ 
    //{ 0x0000, 66},  /** R66 */ 
    { 0x0003, 67},  /** R67  - DC Servo 0 */ 
    //{ 0xFFFF, 68},  /** R68  - DC Servo 1 */ 
    //{ 0x0F0F, 69},  /** R69  - DC Servo 2 */ 
    //{ 0x0000, 70},  /** R70 */ 
    //{ 0x007F, 71},  /** R71  - DC Servo 4 */ 
    //{ 0x007F, 72},  /** R72  - DC Servo 5 */ 
    //{ 0x00FF, 73},  /** R73  - DC Servo 6 */ 
    //{ 0x00FF, 74},  /** R74  - DC Servo 7 */ 
    //{ 0x00FF, 75},  /** R75  - DC Servo 8 */ 
    //{ 0x00FF, 76},  /** R76  - DC Servo 9 */ 
    //{ 0x0FFF, 77},  /** R77  - DC Servo Readback 0 */ 
    //{ 0x0000, 78},  /** R78 */ 
    //{ 0x0000, 79},  /** R79 */ 
    //{ 0x0000, 80},  /** R80 */ 
    //{ 0x0000, 81},  /** R81 */ 
    //{ 0x0000, 82},  /** R82 */ 
    //{ 0x0000, 83},  /** R83 */ 
    //{ 0x0000, 84},  /** R84 */ 
    //{ 0x0000, 85},  /** R85 */ 
    //{ 0x0000, 86},  /** R86 */ 
    //{ 0x0000, 87},  /** R87 */ 
    //{ 0x0000, 88},  /** R88 */ 
    //{ 0x0000, 89},  /** R89 */ 
    { 0x00FF, 90},  /** R90  - Analogue HP 0 */ 
    //{ 0x0000, 91},  /** R91 */ 
    //{ 0x0000, 92},  /** R92 */ 
    //{ 0x0000, 93},  /** R93 */ 
    //{ 0x00FF, 94},  /** R94  - Analogue Lineout 0 */ 
    //{ 0x0000, 95},  /** R95 */ 
    //{ 0x0000, 96},  /** R96 */ 
    //{ 0x0000, 97},  /** R97 */ 
    { 0x0001, 98},  /** R98  - Charge Pump 0 */ 
    //{ 0x0000, 99},  /** R99 */ 
    //{ 0x0000, 100}, /** R100 */
    //{ 0x0000, 101}, /** R101 */ 
    //{ 0x0000, 102}, /** R102 */ 
    //{ 0x0000, 103}, /** R103 */ 
    { 0x0005, 104}, /** R104 - Class W 0 */ 
    //{ 0x0000, 105}, /** R105 */ 
    //{ 0x0000, 106}, /** R106 */ 
    //{ 0x0000, 107}, /** R107 */ 
    //{ 0x011F, 108}, /** R108 - Write Sequencer 0 */ 
    //{ 0x7FFF, 109}, /** R109 - Write Sequencer 1 */ 
    //{ 0x4FFF, 110}, /** R110 - Write Sequencer 2 */ 
    //{ 0x003F, 111}, /** R111 - Write Sequencer 3 */ 
    //{ 0x03F1, 112}, /** R112 - Write Sequencer 4 */ 
    //{ 0x0000, 113}, /** R113 */ 
    //{ 0x0000, 114}, /** R114 */ 
    //{ 0x0000, 115}, /** R115 */ 
    { 0x0004, 116}, /** R116 - FLL Control 1 */ 
    { 0x0704, 117}, /** R117 - FLL Control 2 */ 
    { 0x8000, 118}, /** R118 - FLL Control 3 */ 
    { 0x1760, 119}, /** R119 - FLL Control 4 */ 
    //{ 0x001B, 120}, /** R120 - FLL Control 5 */ 
    //{ 0x0014, 121}, /** R121 - GPIO Control 1 */ 
    //{ 0x0010, 122}, /** R122 - GPIO Control 2 */ 
    //{ 0x0010, 123}, /** R123 - GPIO Control 3 */ 
    //{ 0x0000, 124}, /** R124 - GPIO Control 4 */ 
    //{ 0x0000, 125}, /** R125 */ 
    //{ 0x000A, 126}, /** R126 - Digital Pulls */ 
    //{ 0x07FF, 127}, /** R127 - Interrupt Status */ 
    //{ 0x03FF, 128}, /** R128 - Interrupt Status Mask */ 
    //{ 0x03FF, 129}, /** R129 - Interrupt Polarity */ 
    //{ 0x03FF, 130}, /** R130 - Interrupt Debounce */
    //{ 0x0000, 131}, /** R131 */ 
    //{ 0x0000, 132}, /** R132 */ 
    //{ 0x0000, 133}, /** R133 */ 
    //{ 0x0001, 134}, /** R134 - EQ1 */ 
    //{ 0x001F, 135}, /** R135 - EQ2 */ 
    //{ 0x001F, 136}, /** R136 - EQ3 */ 
    //{ 0x001F, 137}, /** R137 - EQ4 */ 
    //{ 0x001F, 138}, /** R138 - EQ5 */ 
    //{ 0x001F, 139}, /** R139 - EQ6 */ 
    //{ 0xFFFF, 140}, /** R140 - EQ7 */ 
    //{ 0xFFFF, 141}, /** R141 - EQ8 */ 
    //{ 0xFFFF, 142}, /** R142 - EQ9 */ 
    //{ 0xFFFF, 143}, /** R143 - EQ10 */ 
    //{ 0xFFFF, 144}, /** R144 - EQ11 */ 
    //{ 0xFFFF, 145}, /** R145 - EQ12 */ 
    //{ 0xFFFF, 146}, /** R146 - EQ13 */ 
    //{ 0xFFFF, 147}, /** R147 - EQ14 */ 
    //{ 0xFFFF, 148}, /** R148 - EQ15 */ 
    //{ 0xFFFF, 149}, /** R149 - EQ16 */ 
    //{ 0xFFFF, 150}, /** R150 - EQ17 */ 
    //{ 0xFFFF, 151}, /** R151wm8523_dai - EQ18 */ 
    //{ 0xFFFF, 152}, /** R152 - EQ19 */ 
    //{ 0xFFFF, 153}, /** R153 - EQ20 */ 
    //{ 0xFFFF, 154}, /** R154 - EQ21 */ 
    //{ 0xFFFF, 155}, /** R155 - EQ22 */ 
    //{ 0xFFFF, 156}, /** R156 - EQ23 */ 
    //{ 0xFFFF, 157}, /** R157 - EQ24 */ 
    //{ 0x0000, 158}, /** R158 */ 
    //{ 0x0000, 159}, /** R159 */ 
    //{ 0x0000, 160}, /** R160 */ 
    //{ 0x0002, 161}, /** R161 - Control Interface Test 1 */ 
    //{ 0x0000, 162}, /** R162 */ 
    //{ 0x0000, 163}, /** R163 */ 
    //{ 0x0000, 164}, /** R164 */ 
    //{ 0x0000, 165}, /** R165 */ 
    //{ 0x0000, 166}, /** R166 */ 
    //{ 0x0000, 167}, /** R167 */ 
    //{ 0x0000, 168}, /** R168 */ 
    //{ 0x0000, 169}, /** R169 */ 
    //{ 0x0000, 170}, /** R170 */ 
    //{ 0x0000, 171}, /** R171 */ 
    //{ 0x0000, 172}, /** R172 */ 
    //{ 0x0000, 173}, /** R173 */ 
    //{ 0x0000, 174}, /** R174 */ 
    //{ 0x0000, 175}, /** R175 */ 
    //{ 0x0000, 176}, /** R176 */ 
    //{ 0x0000, 177}, /** R177 */ 
    //{ 0x0000, 178}, /** R178 */ 
    //{ 0x0000, 179}, /** R179 */ 
    //{ 0x0000, 180}, /** R180 */ 
    //{ 0x0000, 181}, /** R181 */ 
    //{ 0x0000, 182}, /** R182 */ 
    //{ 0x0000, 183}, /** R183 */ 
    //{ 0x0000, 184}, /** R184 */ 
    //{ 0x0000, 185}, /** R185 */ 
    //{ 0x0000, 186}, /** R186 */ 
    //{ 0x0000, 187}, /** R187 */ 
    //{ 0x0000, 188}, /** R188 */ 
    //{ 0x0000, 189}, /** R189 */ 
    //{ 0x0000, 190}, /** R190 */ 
    //{ 0x0000, 191}, /** R191 */ 
    //{ 0x0000, 192}, /** R192 */ 
    //{ 0x0000, 193}, /** R193 */ 
    //{ 0x0000, 194}, /** R194 */ 
    //{ 0x0000, 195}, /** R195 */ 
    //{ 0x0000, 196}, /** R196 */ 
    //{ 0x0000, 197}, /** R197 */ 
    //{ 0x0000, 198}, /** R198 */ 
    //{ 0x0000, 199}, /** R199 */ 
    //{ 0x0000, 200}, /** R200 */ 
    //{ 0x0000, 201}, /** R201 */ 
    //{ 0x0000, 202}, /** R202 */ 
    //{ 0x0000, 203}, /** R203 */ 
    //{ 0x0070, 204}, /** R204 - Analogue Output Bias 0 */ 
    //{ 0x0000, 205}, /** R205 */ 
    //{ 0x0000, 206}, /** R206 */ 
    //{ 0x0000, 207}, /** R207 */ 
    //{ 0x0000, 208}, /** R208 */ 
    //{ 0x0000, 209}, /** R209 */ 
    //{ 0x0000, 210}, /** R210 */ 
    //{ 0x0000, 211}, /** R211 */ 
    //{ 0x0000, 212}, /** R212 */ 
    //{ 0x0000, 213}, /** R213 */ 
    //{ 0x0000, 214}, /** R214 */ 
    //{ 0x0000, 215}, /** R215 */ 
    //{ 0x0000, 216}, /** R216 */ 
    //{ 0x0000, 217}, /** R217 */ 
    //{ 0x0000, 218}, /** R218 */ 
    //{ 0x0000, 219}, /** R219 */ 
    //{ 0x0000, 220}, /** R220 */ 
    //{ 0x0000, 221}, /** R221 */ 
    //{ 0x0000, 222}, /** R222 */ 
    //{ 0x0000, 223}, /** R223 */ 
    //{ 0x0000, 224}, /** R224 */ 
    //{ 0x0000, 225}, /** R225 */ 
    //{ 0x0000, 226}, /** R226 */ 
    //{ 0x0000, 227}, /** R227 */ 
    //{ 0x0000, 228}, /** R228 */ 
    //{ 0x0000, 229}, /** R229 */ 
    //{ 0x0000, 230}, /** R230 */ 
    //{ 0x0000, 231}, /** R231 */ 
    //{ 0x0000, 232}, /** R232 */ 
    //{ 0x0000, 233}, /** R233 */ 
    //{ 0x0000, 234}, /** R234 */ 
    //{ 0x0000, 235}, /** R235 */ 
    //{ 0x0000, 236}, /** R236 */ 
    //{ 0x0000, 237}, /** R237 */ 
    //{ 0x0000, 238}, /** R238 */ 
    //{ 0x0000, 239}, /** R239 */ 
    //{ 0x0000, 240}, /** R240 */ 
    //{ 0x0000, 241}, /** R241 */ 
    //{ 0x0000, 242}, /** R242 */ 
    //{ 0x0000, 243}, /** R243 */ 
    //{ 0x0000, 244}, /** R244 */ 
    //{ 0x0000, 245}, /** R245 */ 
    //{ 0x0000, 246}, /** R246 */ 
    //{ 0x0000, 247}, /** R247 - FLL NCO Test 0 */ 
    //{ 0x0019, 248}, /** R248 - FLL NCO Test 1 */ 
    { 0x55AA, 255}  /** end */ 
};

static void DelayMS(signed int delay)
{
    uint32_t count;
    for(;delay>0;delay--)
        for(count=0;count<(BOARD_MCK/1000000);count++); 
}

uint8_t WM8904_Init(Twid *pTwid, uint32_t device,  uint32_t PCK)
{
    uint8_t count, size;
    uint16_t data = 0;

    // Reset (write Reg@0x0 to reset)
    WM8904_Write(pTwid, device, 0, 0xFFFF);

    for(data=0;data<1000;data++);
    //wait ready    
    while(data!=0x8904)
        data=WM8904_Read(pTwid, device, 0);

    if (PMC_MCKR_CSS_SLOW_CLK == PCK)
    {
        {
            size = sizeof(wm8904_access_slow)/4+1;
            for(count=0; count<size; count++)
            {
                WM8904_Write(pTwid, device, wm8904_access_slow[count].address, wm8904_access_slow[count].value);
                if(((wm8904_access_slow[count].address==0x05)&&(wm8904_access_slow[count].value==0x0047))
                    ||((wm8904_access_slow[count].address==0x74)&&(wm8904_access_slow[count].value==0x0005))
                    ||((wm8904_access_slow[count].address==0x12)&&(wm8904_access_slow[count].value==0x000F)))
                {
                    DelayMS(5);
                }
                if (((wm8904_access_slow[count].address==0x44)&&(wm8904_access_slow[count].value==0x00F0))
                    ||((wm8904_access_slow[count].address==0x3A)&&(wm8904_access_slow[count].value==0x00B9)))
                {          
                    DelayMS(100);
                }
            }    
        }            
    }
    else if (PMC_MCKR_CSS_MAIN_CLK == PCK)
    {
        for(count=0;count<255;count++)
        {
            if(wm8904_access_main[count].address<255)
            {
                WM8904_Write(pTwid, device, wm8904_access_main[count].address, wm8904_access_main[count].value);
            }
            else
            {
                break;
            }
        }            
    }
    else
    {
        printf("W: PCK not supported! \n\r");
        while(1);
    }

    
    return 0;
}

void WM8904_IN2R_IN1L(Twid *pTwid, uint32_t device)
{
    //{ 0x0005, 44},  /** R44  - Analogue Left Input 0 */ 
    //{ 0x0005, 45},  /** R45  - Analogue Right Input 0 */ 
    //{ 0x0000, 46},  /** R46  - Analogue Left Input 1 */ 
    //{ 0x0010, 47},  /** R47  - Analogue Right Input 1 */
    WM8904_Write(pTwid, device, 0x2C, 0x0008);
    WM8904_Write(pTwid, device, 0x2D, 0x0005);
    WM8904_Write(pTwid, device, 0x2E, 0x0000);
    WM8904_Write(pTwid, device, 0x2F, 0x0010);
}
