1 /* ----------------------------------------------------------------------------
\r
2 * SAM Software Package License
\r
3 * ----------------------------------------------------------------------------
\r
4 * Copyright (c) 2012, Atmel Corporation
\r
6 * All rights reserved.
\r
8 * Redistribution and use in source and binary forms, with or without
\r
9 * modification, are permitted provided that the following conditions are met:
\r
11 * - Redistributions of source code must retain the above copyright notice,
\r
12 * this list of conditions and the disclaimer below.
\r
14 * Atmel's name may not be used to endorse or promote products derived from
\r
15 * this software without specific prior written permission.
\r
17 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
\r
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
\r
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
\r
20 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
\r
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
\r
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
\r
23 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
\r
24 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
\r
25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
\r
26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
27 * ----------------------------------------------------------------------------
\r
33 * Implementation WM8904 driver.
\r
42 /*----------------------------------------------------------------------------
\r
44 *----------------------------------------------------------------------------*/
\r
45 #define WM8904_CSB_STATE (0x0 << 0)
\r
47 /** Slave address */
\r
48 #define WM8904_SLAVE_ADDRESS 0x1a | WM8904_CSB_STATE
\r
49 #define CS2100_SLAVE_ADDRESS 0x4E
\r
52 /** Reset register*/
\r
53 #define WM8904_REG_RESET 0x00
\r
55 /** Bias control 0 register*/
\r
56 #define WM8904_REG_BIAS_CTRL0 0x04
\r
58 /** VMID control 0 register*/
\r
59 #define WM8904_REG_VMID_CTRL0 0x05
\r
61 /** MIC Bias control 0 register*/
\r
62 #define WM8904_REG_MICBIAS_CTRL0 0x06
\r
64 /** Bias control 1 register*/
\r
65 #define WM8904_REG_BIAS_CTRL1 0x07
\r
67 /** Power management control 0 register*/
\r
68 #define WM8904_REG_POWER_MANG0 0x0C
\r
69 /** Power management control 2 register*/
\r
70 #define WM8904_REG_POWER_MANG2 0x0E
\r
71 /** Power management control 3 register*/
\r
72 #define WM8904_REG_POWER_MANG3 0x0F
\r
73 /** Power management control 6 register*/
\r
74 #define WM8904_REG_POWER_MANG6 0x12
\r
76 /** Clock rate0 register*/
\r
77 #define WM8904_REG_CLOCK_RATE0 0x14
\r
78 /** Clock rate1 register*/
\r
79 #define WM8904_REG_CLOCK_RATE1 0x15
\r
81 /** Clock rate2 register*/
\r
82 #define WM8904_REG_CLOCK_RATE2 0x16
\r
84 /** Audio interface0 register*/
\r
85 #define WM8904_REG_AUD_INF0 0x18
\r
87 /** Audio interface1 register*/
\r
88 #define WM8904_REG_AUD_INF1 0x19
\r
89 /** Audio interface2 register*/
\r
90 #define WM8904_REG_AUD_INF2 0x1A
\r
91 /** Audio interface3 register*/
\r
92 #define WM8904_REG_AUD_INF3 0x1B
\r
94 /** ADC digital 0 register*/
\r
95 #define WM8904_REG_ADC_DIG0 0x20
\r
96 /** ADC digital 1 register*/
\r
97 #define WM8904_REG_ADC_DIG1 0x21
\r
99 /** Analogue left input 0 register*/
\r
100 #define WM8904_REG_ANALOGUE_LIN0 0x2C
\r
101 /** Analogue right input 0 register*/
\r
102 #define WM8904_REG_ANALOGUE_RIN0 0x2D
\r
104 /** Analogue left input 1 register*/
\r
105 #define WM8904_REG_ANALOGUE_LIN1 0x2E
\r
106 /** Analogue right input 1 register*/
\r
107 #define WM8904_REG_ANALOGUE_RIN1 0x2F
\r
109 /** Analogue left output 1 register*/
\r
110 #define WM8904_REG_ANALOGUE_LOUT1 0x39
\r
111 /** Analogue right output 1 register*/
\r
112 #define WM8904_REG_ANALOGUE_ROUT1 0x3A
\r
114 /** Analogue left output 2 register*/
\r
115 #define WM8904_REG_ANALOGUE_LOUT2 0x3B
\r
116 /** Analogue right output 2 register*/
\r
117 #define WM8904_REG_ANALOGUE_ROUT2 0x3C
\r
119 /** Analogue output 12 ZC register*/
\r
120 #define WM8904_REG_ANALOGUE_OUT12ZC 0x3D
\r
122 /** DC servo 0 register*/
\r
123 #define WM8904_REG_DC_SERVO0 0x43
\r
125 /** Analogue HP 0 register*/
\r
126 #define WM8904_REG_ANALOGUE_HP0 0x5A
\r
128 /** Charge pump 0 register*/
\r
129 #define WM8904_REG_CHARGE_PUMP0 0x62
\r
131 /** Class W 0 register*/
\r
132 #define WM8904_REG_CLASS0 0x68
\r
134 /** FLL control 1 register*/
\r
135 #define WM8904_REG_FLL_CRTL1 0x74
\r
136 /** FLL control 2 register*/
\r
137 #define WM8904_REG_FLL_CRTL2 0x75
\r
138 /** FLL control 3 register*/
\r
139 #define WM8904_REG_FLL_CRTL3 0x76
\r
140 /** FLL control 4 register*/
\r
141 #define WM8904_REG_FLL_CRTL4 0x77
\r
142 /** FLL control 5 register*/
\r
143 #define WM8904_REG_FLL_CRTL5 0x78
\r
145 /** DUMMY register*/
\r
146 #define WM8904_REG_END 0xFF
\r
148 /*----------------------------------------------------------------------------
\r
149 * Exported functions
\r
150 *----------------------------------------------------------------------------*/
\r
152 extern uint16_t WM8904_Read(Twid *pTwid, uint32_t device, uint32_t regAddr);
\r
153 extern void WM8904_Write(Twid *pTwid, uint32_t device, uint32_t regAddr, uint16_t data);
\r
154 extern uint8_t WM8904_Init(Twid *pTwid, uint32_t device, uint32_t PCK);
\r
155 extern uint8_t WM8904_VolumeSet(Twid *pTwid, uint32_t device, uint16_t value);
\r
156 extern void WM8904_IN2R_IN1L(Twid *pTwid, uint32_t device);
\r