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
51 /** Reset register*/
\r
52 #define WM8904_REG_RESET 0x00
\r
54 /** Bias control 0 register*/
\r
55 #define WM8904_REG_BIAS_CTRL0 0x04
\r
57 /** VMID control 0 register*/
\r
58 #define WM8904_REG_VMID_CTRL0 0x05
\r
60 /** MIC Bias control 0 register*/
\r
61 #define WM8904_REG_MICBIAS_CTRL0 0x06
\r
63 /** Bias control 1 register*/
\r
64 #define WM8904_REG_BIAS_CTRL1 0x07
\r
66 /** Power management control 0 register*/
\r
67 #define WM8904_REG_POWER_MANG0 0x0C
\r
68 /** Power management control 2 register*/
\r
69 #define WM8904_REG_POWER_MANG2 0x0E
\r
70 /** Power management control 3 register*/
\r
71 #define WM8904_REG_POWER_MANG3 0x0F
\r
72 /** Power management control 6 register*/
\r
73 #define WM8904_REG_POWER_MANG6 0x12
\r
75 /** Clock rate0 register*/
\r
76 #define WM8904_REG_CLOCK_RATE0 0x14
\r
77 /** Clock rate1 register*/
\r
78 #define WM8904_REG_CLOCK_RATE1 0x15
\r
80 /** Clock rate2 register*/
\r
81 #define WM8904_REG_CLOCK_RATE2 0x16
\r
83 /** Audio interface0 register*/
\r
84 #define WM8904_REG_AUD_INF0 0x18
\r
86 /** Audio interface1 register*/
\r
87 #define WM8904_REG_AUD_INF1 0x19
\r
88 /** Audio interface2 register*/
\r
89 #define WM8904_REG_AUD_INF2 0x1A
\r
90 /** Audio interface3 register*/
\r
91 #define WM8904_REG_AUD_INF3 0x1B
\r
93 /** ADC digital 0 register*/
\r
94 #define WM8904_REG_ADC_DIG0 0x20
\r
95 /** ADC digital 1 register*/
\r
96 #define WM8904_REG_ADC_DIG1 0x21
\r
98 /** Analogue left input 0 register*/
\r
99 #define WM8904_REG_ANALOGUE_LIN0 0x2C
\r
100 /** Analogue right input 0 register*/
\r
101 #define WM8904_REG_ANALOGUE_RIN0 0x2D
\r
103 /** Analogue left input 1 register*/
\r
104 #define WM8904_REG_ANALOGUE_LIN1 0x2E
\r
105 /** Analogue right input 1 register*/
\r
106 #define WM8904_REG_ANALOGUE_RIN1 0x2F
\r
108 /** Analogue left output 1 register*/
\r
109 #define WM8904_REG_ANALOGUE_LOUT1 0x39
\r
110 /** Analogue right output 1 register*/
\r
111 #define WM8904_REG_ANALOGUE_ROUT1 0x3A
\r
113 /** Analogue left output 2 register*/
\r
114 #define WM8904_REG_ANALOGUE_LOUT2 0x3B
\r
115 /** Analogue right output 2 register*/
\r
116 #define WM8904_REG_ANALOGUE_ROUT2 0x3C
\r
118 /** Analogue output 12 ZC register*/
\r
119 #define WM8904_REG_ANALOGUE_OUT12ZC 0x3D
\r
121 /** DC servo 0 register*/
\r
122 #define WM8904_REG_DC_SERVO0 0x43
\r
124 /** Analogue HP 0 register*/
\r
125 #define WM8904_REG_ANALOGUE_HP0 0x5A
\r
127 /** Charge pump 0 register*/
\r
128 #define WM8904_REG_CHARGE_PUMP0 0x62
\r
130 /** Class W 0 register*/
\r
131 #define WM8904_REG_CLASS0 0x68
\r
133 /** FLL control 1 register*/
\r
134 #define WM8904_REG_FLL_CRTL1 0x74
\r
135 /** FLL control 2 register*/
\r
136 #define WM8904_REG_FLL_CRTL2 0x75
\r
137 /** FLL control 3 register*/
\r
138 #define WM8904_REG_FLL_CRTL3 0x76
\r
139 /** FLL control 4 register*/
\r
140 #define WM8904_REG_FLL_CRTL4 0x77
\r
141 /** FLL control 5 register*/
\r
142 #define WM8904_REG_FLL_CRTL5 0x78
\r
144 /** DUMMY register*/
\r
145 #define WM8904_REG_END 0xFF
\r
147 /*----------------------------------------------------------------------------
\r
148 * Exported functions
\r
149 *----------------------------------------------------------------------------*/
\r
151 extern uint16_t WM8904_Read(Twid *pTwid, uint32_t device, uint32_t regAddr);
\r
152 extern void WM8904_Write(Twid *pTwid, uint32_t device, uint32_t regAddr, uint16_t data);
\r
153 extern uint8_t WM8904_Init(Twid *pTwid, uint32_t device, uint32_t PCK);
\r
154 extern uint8_t WM8904_VolumeSet(Twid *pTwid, uint32_t device, uint16_t value);
\r
155 extern void WM8904_IN2R_IN1L(Twid *pTwid, uint32_t device);
\r