A fairly well tested TLV320 library for I2C configuration and control of the TI TLV320 part

Dependents:   TLV320_Write_test

Committer:
p07gbar
Date:
Tue Sep 25 15:22:02 2012 +0000
Revision:
1:3ee50344f8f4
Parent:
0:a68f7c573e8c
Added header to cpp file

Who changed what in which revision?

UserRevisionLine numberNew contents of line
p07gbar 1:3ee50344f8f4 1 /**
p07gbar 1:3ee50344f8f4 2 * @author Giles Barton-Owen
p07gbar 1:3ee50344f8f4 3 *
p07gbar 1:3ee50344f8f4 4 * @section LICENSE
p07gbar 1:3ee50344f8f4 5 *
p07gbar 1:3ee50344f8f4 6 * Copyright (c) 2012 mbed
p07gbar 1:3ee50344f8f4 7 *
p07gbar 1:3ee50344f8f4 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
p07gbar 1:3ee50344f8f4 9 * of this software and associated documentation files (the "Software"), to deal
p07gbar 1:3ee50344f8f4 10 * in the Software without restriction, including without limitation the rights
p07gbar 1:3ee50344f8f4 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
p07gbar 1:3ee50344f8f4 12 * copies of the Software, and to permit persons to whom the Software is
p07gbar 1:3ee50344f8f4 13 * furnished to do so, subject to the following conditions:
p07gbar 1:3ee50344f8f4 14 *
p07gbar 1:3ee50344f8f4 15 * The above copyright notice and this permission notice shall be included in
p07gbar 1:3ee50344f8f4 16 * all copies or substantial portions of the Software.
p07gbar 1:3ee50344f8f4 17 *
p07gbar 1:3ee50344f8f4 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
p07gbar 1:3ee50344f8f4 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
p07gbar 1:3ee50344f8f4 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
p07gbar 1:3ee50344f8f4 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
p07gbar 1:3ee50344f8f4 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
p07gbar 1:3ee50344f8f4 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
p07gbar 1:3ee50344f8f4 24 * THE SOFTWARE.
p07gbar 1:3ee50344f8f4 25 *
p07gbar 1:3ee50344f8f4 26 * @section DESCRIPTION
p07gbar 1:3ee50344f8f4 27 * A Driver set for the I2C half of the TLV320
p07gbar 1:3ee50344f8f4 28 *
p07gbar 1:3ee50344f8f4 29 */
p07gbar 1:3ee50344f8f4 30
p07gbar 0:a68f7c573e8c 31 #include "TLV320.h"
p07gbar 0:a68f7c573e8c 32
p07gbar 0:a68f7c573e8c 33 #define TLV320_HP_VOL_DF_MASK 0x80
p07gbar 0:a68f7c573e8c 34
p07gbar 0:a68f7c573e8c 35
p07gbar 0:a68f7c573e8c 36 #define TLV320_DF_hp_vol_left 0.5
p07gbar 0:a68f7c573e8c 37 #define TLV320_DF_hp_vol_right 0.5
p07gbar 0:a68f7c573e8c 38 #define TLV320_DF_li_vol_left 0.5
p07gbar 0:a68f7c573e8c 39 #define TLV320_DF_li_vol_right 0.5
p07gbar 0:a68f7c573e8c 40 #define TLV320_DF_sdt_vol 0
p07gbar 0:a68f7c573e8c 41
p07gbar 0:a68f7c573e8c 42 const uint8_t base_address = 0x1A;
p07gbar 0:a68f7c573e8c 43
p07gbar 0:a68f7c573e8c 44
p07gbar 0:a68f7c573e8c 45 TLV320::TLV320(PinName i2c_sda, PinName i2c_scl): i2c(i2c_sda,i2c_scl) {
p07gbar 0:a68f7c573e8c 46 address = base_address;
p07gbar 0:a68f7c573e8c 47 defaulter();
p07gbar 0:a68f7c573e8c 48 form_cmd(all);
p07gbar 0:a68f7c573e8c 49 }
p07gbar 0:a68f7c573e8c 50
p07gbar 0:a68f7c573e8c 51 TLV320::TLV320(PinName i2c_sda, PinName i2c_scl, bool cs_level): i2c(i2c_sda,i2c_scl) {
p07gbar 0:a68f7c573e8c 52 address = base_address + (1*cs_level);
p07gbar 0:a68f7c573e8c 53 defaulter();
p07gbar 0:a68f7c573e8c 54 form_cmd(all);
p07gbar 0:a68f7c573e8c 55 }
p07gbar 0:a68f7c573e8c 56
p07gbar 0:a68f7c573e8c 57 void TLV320::power(bool on_off) {
p07gbar 0:a68f7c573e8c 58 device_all_pwr = on_off;
p07gbar 0:a68f7c573e8c 59 form_cmd(power_control);
p07gbar 0:a68f7c573e8c 60 }
p07gbar 0:a68f7c573e8c 61
p07gbar 0:a68f7c573e8c 62 void TLV320::input_select(int input) {
p07gbar 0:a68f7c573e8c 63
p07gbar 0:a68f7c573e8c 64 switch(input)
p07gbar 0:a68f7c573e8c 65 {
p07gbar 0:a68f7c573e8c 66 case TLV320_NO_IN:
p07gbar 0:a68f7c573e8c 67 device_adc_pwr = false;
p07gbar 0:a68f7c573e8c 68 device_mic_pwr = false;
p07gbar 0:a68f7c573e8c 69 device_lni_pwr = false;
p07gbar 0:a68f7c573e8c 70 form_cmd(power_control);
p07gbar 0:a68f7c573e8c 71 break;
p07gbar 0:a68f7c573e8c 72 case TLV320_LINE:
p07gbar 0:a68f7c573e8c 73 device_adc_pwr = true;
p07gbar 0:a68f7c573e8c 74 device_lni_pwr = true;
p07gbar 0:a68f7c573e8c 75 device_mic_pwr = false;
p07gbar 0:a68f7c573e8c 76 ADC_source = TLV320_LINE;
p07gbar 0:a68f7c573e8c 77 form_cmd(power_control);
p07gbar 0:a68f7c573e8c 78 form_cmd(path_analog);
p07gbar 0:a68f7c573e8c 79 break;
p07gbar 0:a68f7c573e8c 80 case TLV320_MIC:
p07gbar 0:a68f7c573e8c 81 device_adc_pwr = true;
p07gbar 0:a68f7c573e8c 82 device_lni_pwr = false;
p07gbar 0:a68f7c573e8c 83 device_mic_pwr = true;
p07gbar 0:a68f7c573e8c 84 ADC_source = TLV320_MIC;
p07gbar 0:a68f7c573e8c 85 form_cmd(power_control);
p07gbar 0:a68f7c573e8c 86 form_cmd(path_analog);
p07gbar 0:a68f7c573e8c 87 break;
p07gbar 0:a68f7c573e8c 88 default:
p07gbar 0:a68f7c573e8c 89 device_adc_pwr = df_device_adc_pwr;
p07gbar 0:a68f7c573e8c 90 device_mic_pwr = df_device_mic_pwr;
p07gbar 0:a68f7c573e8c 91 device_lni_pwr = df_device_lni_pwr;
p07gbar 0:a68f7c573e8c 92 ADC_source = df_ADC_source;
p07gbar 0:a68f7c573e8c 93 form_cmd(power_control);
p07gbar 0:a68f7c573e8c 94 form_cmd(path_analog);
p07gbar 0:a68f7c573e8c 95 break;
p07gbar 0:a68f7c573e8c 96 }
p07gbar 0:a68f7c573e8c 97 ADC_source_old = ADC_source;
p07gbar 0:a68f7c573e8c 98 }
p07gbar 0:a68f7c573e8c 99
p07gbar 0:a68f7c573e8c 100 void TLV320::headphone_volume(float h_volume) {
p07gbar 0:a68f7c573e8c 101 hp_vol_left = h_volume;
p07gbar 0:a68f7c573e8c 102 hp_vol_right = h_volume;
p07gbar 0:a68f7c573e8c 103 form_cmd(headphone_vol_left);
p07gbar 0:a68f7c573e8c 104 form_cmd(headphone_vol_right);
p07gbar 0:a68f7c573e8c 105 }
p07gbar 0:a68f7c573e8c 106
p07gbar 0:a68f7c573e8c 107 void TLV320::linein_volume(float li_volume) {
p07gbar 0:a68f7c573e8c 108 li_vol_left = li_volume;
p07gbar 0:a68f7c573e8c 109 li_vol_right = li_volume;
p07gbar 0:a68f7c573e8c 110 form_cmd(line_in_vol_left);
p07gbar 0:a68f7c573e8c 111 form_cmd(line_in_vol_right);
p07gbar 0:a68f7c573e8c 112 }
p07gbar 0:a68f7c573e8c 113
p07gbar 0:a68f7c573e8c 114 void TLV320::microphone_boost(bool mic_boost) {
p07gbar 0:a68f7c573e8c 115 mic_boost_ = mic_boost;
p07gbar 0:a68f7c573e8c 116 }
p07gbar 0:a68f7c573e8c 117
p07gbar 0:a68f7c573e8c 118 void TLV320::input_mute(bool mute) {
p07gbar 0:a68f7c573e8c 119 if(ADC_source == TLV320_MIC)
p07gbar 0:a68f7c573e8c 120 {
p07gbar 0:a68f7c573e8c 121 mic_mute = mute;
p07gbar 0:a68f7c573e8c 122 form_cmd(path_analog);
p07gbar 0:a68f7c573e8c 123 }
p07gbar 0:a68f7c573e8c 124 else
p07gbar 0:a68f7c573e8c 125 {
p07gbar 0:a68f7c573e8c 126 li_mute_left = mute;
p07gbar 0:a68f7c573e8c 127 li_mute_right = mute;
p07gbar 0:a68f7c573e8c 128 form_cmd(line_in_vol_left);
p07gbar 0:a68f7c573e8c 129 form_cmd(line_in_vol_right);
p07gbar 0:a68f7c573e8c 130 }
p07gbar 0:a68f7c573e8c 131 }
p07gbar 0:a68f7c573e8c 132
p07gbar 0:a68f7c573e8c 133 void TLV320::output_mute(bool mute) {
p07gbar 0:a68f7c573e8c 134 out_mute = mute;
p07gbar 0:a68f7c573e8c 135 form_cmd(path_digital);
p07gbar 0:a68f7c573e8c 136 }
p07gbar 0:a68f7c573e8c 137
p07gbar 0:a68f7c573e8c 138 void TLV320::input_power(bool on_off) {
p07gbar 0:a68f7c573e8c 139
p07gbar 0:a68f7c573e8c 140 device_adc_pwr = on_off;
p07gbar 0:a68f7c573e8c 141
p07gbar 0:a68f7c573e8c 142 if(ADC_source == TLV320_MIC)
p07gbar 0:a68f7c573e8c 143 {
p07gbar 0:a68f7c573e8c 144 device_mic_pwr = on_off;
p07gbar 0:a68f7c573e8c 145 device_lni_pwr = false;
p07gbar 0:a68f7c573e8c 146 }
p07gbar 0:a68f7c573e8c 147 else
p07gbar 0:a68f7c573e8c 148 {
p07gbar 0:a68f7c573e8c 149 device_mic_pwr = false;
p07gbar 0:a68f7c573e8c 150 device_lni_pwr = on_off;
p07gbar 0:a68f7c573e8c 151 }
p07gbar 0:a68f7c573e8c 152
p07gbar 0:a68f7c573e8c 153 form_cmd(power_control);
p07gbar 0:a68f7c573e8c 154 }
p07gbar 0:a68f7c573e8c 155
p07gbar 0:a68f7c573e8c 156 void TLV320::output_power(bool on_off) {
p07gbar 0:a68f7c573e8c 157 device_dac_pwr = on_off;
p07gbar 0:a68f7c573e8c 158 device_out_pwr = on_off;
p07gbar 0:a68f7c573e8c 159
p07gbar 0:a68f7c573e8c 160 form_cmd(power_control);
p07gbar 0:a68f7c573e8c 161 }
p07gbar 0:a68f7c573e8c 162
p07gbar 0:a68f7c573e8c 163 void TLV320::wordsize(int words) {
p07gbar 0:a68f7c573e8c 164 device_bitlength = words;
p07gbar 0:a68f7c573e8c 165 form_cmd(interface_format);
p07gbar 0:a68f7c573e8c 166 }
p07gbar 0:a68f7c573e8c 167
p07gbar 0:a68f7c573e8c 168 void TLV320::master(bool master) {
p07gbar 0:a68f7c573e8c 169 device_master = master;
p07gbar 0:a68f7c573e8c 170 form_cmd(interface_format);
p07gbar 0:a68f7c573e8c 171 }
p07gbar 0:a68f7c573e8c 172
p07gbar 0:a68f7c573e8c 173 void TLV320::frequency(int freq) {
p07gbar 0:a68f7c573e8c 174 ADC_rate = freq;
p07gbar 0:a68f7c573e8c 175 DAC_rate = freq;
p07gbar 0:a68f7c573e8c 176 form_cmd(sample_rate);
p07gbar 0:a68f7c573e8c 177 }
p07gbar 0:a68f7c573e8c 178
p07gbar 0:a68f7c573e8c 179 void TLV320::input_highpass(bool enabled) {
p07gbar 0:a68f7c573e8c 180 ADC_highpass_enable = enabled;
p07gbar 0:a68f7c573e8c 181 form_cmd(path_digital);
p07gbar 0:a68f7c573e8c 182 }
p07gbar 0:a68f7c573e8c 183
p07gbar 0:a68f7c573e8c 184 void TLV320::output_softmute(bool enabled) {
p07gbar 0:a68f7c573e8c 185 out_mute = enabled;
p07gbar 0:a68f7c573e8c 186 form_cmd(path_digital);
p07gbar 0:a68f7c573e8c 187 }
p07gbar 0:a68f7c573e8c 188
p07gbar 0:a68f7c573e8c 189 void TLV320::interface_switch(bool on_off) {
p07gbar 0:a68f7c573e8c 190 device_interface_active = on_off;
p07gbar 0:a68f7c573e8c 191 form_cmd(interface_activation);
p07gbar 0:a68f7c573e8c 192 }
p07gbar 0:a68f7c573e8c 193
p07gbar 0:a68f7c573e8c 194 void TLV320::sidetone(float sidetone_vol) {
p07gbar 0:a68f7c573e8c 195 sdt_vol = sidetone_vol;
p07gbar 0:a68f7c573e8c 196 form_cmd(path_analog);
p07gbar 0:a68f7c573e8c 197 }
p07gbar 0:a68f7c573e8c 198
p07gbar 0:a68f7c573e8c 199 void TLV320::deemphasis(char code) {
p07gbar 0:a68f7c573e8c 200 de_emph_code = code & 0x03;
p07gbar 0:a68f7c573e8c 201 form_cmd(path_digital);
p07gbar 0:a68f7c573e8c 202 }
p07gbar 0:a68f7c573e8c 203
p07gbar 0:a68f7c573e8c 204 void TLV320::reset() {
p07gbar 0:a68f7c573e8c 205 form_cmd(reset_reg);
p07gbar 0:a68f7c573e8c 206 }
p07gbar 0:a68f7c573e8c 207
p07gbar 0:a68f7c573e8c 208 void TLV320::start() {
p07gbar 0:a68f7c573e8c 209 interface_switch(true);
p07gbar 0:a68f7c573e8c 210 }
p07gbar 0:a68f7c573e8c 211
p07gbar 0:a68f7c573e8c 212 void TLV320::bypass(bool enable) {
p07gbar 0:a68f7c573e8c 213 bypass_ = enable;
p07gbar 0:a68f7c573e8c 214 form_cmd(path_analog);
p07gbar 0:a68f7c573e8c 215 }
p07gbar 0:a68f7c573e8c 216
p07gbar 0:a68f7c573e8c 217 void TLV320::stop() {
p07gbar 0:a68f7c573e8c 218 interface_switch(false);
p07gbar 0:a68f7c573e8c 219 }
p07gbar 0:a68f7c573e8c 220
p07gbar 0:a68f7c573e8c 221 void TLV320::command(reg_address add, uint16_t cmd) {
p07gbar 0:a68f7c573e8c 222 char temp[2];
p07gbar 0:a68f7c573e8c 223 temp[0] = (char(add)<<1) | ((cmd >> 6) & 0x01);
p07gbar 0:a68f7c573e8c 224 temp[1] = (cmd & 0xFF);
p07gbar 0:a68f7c573e8c 225 i2c.write((address<<1), temp, 2);
p07gbar 0:a68f7c573e8c 226 }
p07gbar 0:a68f7c573e8c 227
p07gbar 0:a68f7c573e8c 228 void TLV320::form_cmd(reg_address add) {
p07gbar 0:a68f7c573e8c 229 uint16_t cmd = 0;
p07gbar 0:a68f7c573e8c 230 int temp = 0;
p07gbar 0:a68f7c573e8c 231 bool mute;
p07gbar 0:a68f7c573e8c 232 switch(add)
p07gbar 0:a68f7c573e8c 233 {
p07gbar 0:a68f7c573e8c 234 case line_in_vol_left:
p07gbar 0:a68f7c573e8c 235 temp = int(li_vol_left * 32) - 1;
p07gbar 0:a68f7c573e8c 236 mute = li_mute_left;
p07gbar 0:a68f7c573e8c 237
p07gbar 0:a68f7c573e8c 238 if(temp < 0)
p07gbar 0:a68f7c573e8c 239 {
p07gbar 0:a68f7c573e8c 240 temp = 0;
p07gbar 0:a68f7c573e8c 241 mute = true;
p07gbar 0:a68f7c573e8c 242 }
p07gbar 0:a68f7c573e8c 243 cmd = temp & 0x1F;
p07gbar 0:a68f7c573e8c 244 cmd |= mute << 7;
p07gbar 0:a68f7c573e8c 245 break;
p07gbar 0:a68f7c573e8c 246 case line_in_vol_right:
p07gbar 0:a68f7c573e8c 247 temp = int(li_vol_right * 32) - 1;
p07gbar 0:a68f7c573e8c 248 mute = li_mute_right;
p07gbar 0:a68f7c573e8c 249 if(temp < 0)
p07gbar 0:a68f7c573e8c 250 {
p07gbar 0:a68f7c573e8c 251 temp = 0;
p07gbar 0:a68f7c573e8c 252 mute = true;
p07gbar 0:a68f7c573e8c 253 }
p07gbar 0:a68f7c573e8c 254 cmd = temp & 0x1F;
p07gbar 0:a68f7c573e8c 255 cmd |= mute << 7;
p07gbar 0:a68f7c573e8c 256 break;
p07gbar 0:a68f7c573e8c 257
p07gbar 0:a68f7c573e8c 258 case headphone_vol_left:
p07gbar 0:a68f7c573e8c 259 temp = int(hp_vol_left * 80) + 47;
p07gbar 0:a68f7c573e8c 260 cmd = TLV320_HP_VOL_DF_MASK;
p07gbar 0:a68f7c573e8c 261 cmd |= temp & 0x7F;
p07gbar 0:a68f7c573e8c 262 break;
p07gbar 0:a68f7c573e8c 263 case headphone_vol_right:
p07gbar 0:a68f7c573e8c 264 temp = int(hp_vol_right * 80) + 47;
p07gbar 0:a68f7c573e8c 265 cmd = TLV320_HP_VOL_DF_MASK;
p07gbar 0:a68f7c573e8c 266 cmd |= temp & 0x7F;
p07gbar 0:a68f7c573e8c 267 break;
p07gbar 0:a68f7c573e8c 268
p07gbar 0:a68f7c573e8c 269 case path_analog:
p07gbar 0:a68f7c573e8c 270 temp = int(sdt_vol * 5);
p07gbar 0:a68f7c573e8c 271 char vol_code = 0;
p07gbar 0:a68f7c573e8c 272 switch(temp)
p07gbar 0:a68f7c573e8c 273 {
p07gbar 0:a68f7c573e8c 274 case 5:
p07gbar 0:a68f7c573e8c 275 vol_code = 0x0C;
p07gbar 0:a68f7c573e8c 276 break;
p07gbar 0:a68f7c573e8c 277 case 0:
p07gbar 0:a68f7c573e8c 278 vol_code = 0x00;
p07gbar 0:a68f7c573e8c 279 break;
p07gbar 0:a68f7c573e8c 280 default:
p07gbar 0:a68f7c573e8c 281 vol_code = ((0x04 - temp)&0x07) | 0x08;
p07gbar 0:a68f7c573e8c 282 break;
p07gbar 0:a68f7c573e8c 283 }
p07gbar 0:a68f7c573e8c 284 cmd = vol_code << 5;
p07gbar 0:a68f7c573e8c 285 cmd |= 1 << 4;
p07gbar 0:a68f7c573e8c 286 cmd |= bypass_ << 3;
p07gbar 0:a68f7c573e8c 287 cmd |= ADC_source << 2;
p07gbar 0:a68f7c573e8c 288 cmd |= mic_mute << 1;
p07gbar 0:a68f7c573e8c 289 cmd |= mic_boost_;
p07gbar 0:a68f7c573e8c 290 break;
p07gbar 0:a68f7c573e8c 291
p07gbar 0:a68f7c573e8c 292 case path_digital:
p07gbar 0:a68f7c573e8c 293 cmd |= out_mute << 3;
p07gbar 0:a68f7c573e8c 294 cmd |= ((de_emph_code & 0x3) << 1);
p07gbar 0:a68f7c573e8c 295 cmd |= ADC_highpass_enable;
p07gbar 0:a68f7c573e8c 296 break;
p07gbar 0:a68f7c573e8c 297
p07gbar 0:a68f7c573e8c 298 case power_control:
p07gbar 0:a68f7c573e8c 299 cmd |= !device_all_pwr << 7;
p07gbar 0:a68f7c573e8c 300 cmd |= !device_clk_pwr << 6;
p07gbar 0:a68f7c573e8c 301 cmd |= !device_osc_pwr << 5;
p07gbar 0:a68f7c573e8c 302 cmd |= !device_out_pwr << 4;
p07gbar 0:a68f7c573e8c 303 cmd |= !device_dac_pwr << 3;
p07gbar 0:a68f7c573e8c 304 cmd |= !device_adc_pwr << 2;
p07gbar 0:a68f7c573e8c 305 cmd |= !device_mic_pwr << 1;
p07gbar 0:a68f7c573e8c 306 cmd |= !device_lni_pwr << 0;
p07gbar 0:a68f7c573e8c 307 break;
p07gbar 0:a68f7c573e8c 308
p07gbar 0:a68f7c573e8c 309 case interface_format:
p07gbar 0:a68f7c573e8c 310 cmd |= device_master << 6;
p07gbar 0:a68f7c573e8c 311 cmd |= device_lrswap << 5;
p07gbar 0:a68f7c573e8c 312 cmd |= device_lrws << 4;
p07gbar 0:a68f7c573e8c 313 temp = 0;
p07gbar 0:a68f7c573e8c 314 switch(device_bitlength)
p07gbar 0:a68f7c573e8c 315 {
p07gbar 0:a68f7c573e8c 316 case 16:
p07gbar 0:a68f7c573e8c 317 temp = 0;
p07gbar 0:a68f7c573e8c 318 break;
p07gbar 0:a68f7c573e8c 319 case 20:
p07gbar 0:a68f7c573e8c 320 temp = 1;
p07gbar 0:a68f7c573e8c 321 break;
p07gbar 0:a68f7c573e8c 322 case 24:
p07gbar 0:a68f7c573e8c 323 temp = 2;
p07gbar 0:a68f7c573e8c 324 break;
p07gbar 0:a68f7c573e8c 325 case 32:
p07gbar 0:a68f7c573e8c 326 temp = 3;
p07gbar 0:a68f7c573e8c 327 break;
p07gbar 0:a68f7c573e8c 328 }
p07gbar 0:a68f7c573e8c 329 cmd |= (temp & 0x03) << 2;
p07gbar 0:a68f7c573e8c 330 cmd |= (device_data_form & 0x03);
p07gbar 0:a68f7c573e8c 331 break;
p07gbar 0:a68f7c573e8c 332
p07gbar 0:a68f7c573e8c 333 case sample_rate:
p07gbar 0:a68f7c573e8c 334 temp = gen_samplerate();
p07gbar 0:a68f7c573e8c 335 cmd = device_usb_mode;
p07gbar 0:a68f7c573e8c 336 cmd |= (temp & 0x03) << 1;
p07gbar 0:a68f7c573e8c 337 cmd |= device_clk_in_div << 6;
p07gbar 0:a68f7c573e8c 338 cmd |= device_clk_out_div << 7;
p07gbar 0:a68f7c573e8c 339 break;
p07gbar 0:a68f7c573e8c 340
p07gbar 0:a68f7c573e8c 341 case interface_activation:
p07gbar 0:a68f7c573e8c 342 cmd = device_interface_active;
p07gbar 0:a68f7c573e8c 343 break;
p07gbar 0:a68f7c573e8c 344
p07gbar 0:a68f7c573e8c 345 case reset_reg:
p07gbar 0:a68f7c573e8c 346 cmd = 0;
p07gbar 0:a68f7c573e8c 347 break;
p07gbar 0:a68f7c573e8c 348
p07gbar 0:a68f7c573e8c 349 case all:
p07gbar 0:a68f7c573e8c 350 for( int i = line_in_vol_left; i <= reset_reg; i++)
p07gbar 0:a68f7c573e8c 351 {
p07gbar 0:a68f7c573e8c 352 form_cmd((reg_address)i);
p07gbar 0:a68f7c573e8c 353 }
p07gbar 0:a68f7c573e8c 354 break;
p07gbar 0:a68f7c573e8c 355 }
p07gbar 0:a68f7c573e8c 356 if(add != all) command(add , cmd);
p07gbar 0:a68f7c573e8c 357 }
p07gbar 0:a68f7c573e8c 358
p07gbar 0:a68f7c573e8c 359 void TLV320::defaulter() {
p07gbar 0:a68f7c573e8c 360 hp_vol_left = TLV320_DF_hp_vol_left;
p07gbar 0:a68f7c573e8c 361 hp_vol_right = TLV320_DF_hp_vol_right;
p07gbar 0:a68f7c573e8c 362 li_vol_left = TLV320_DF_li_vol_left;
p07gbar 0:a68f7c573e8c 363 li_vol_right = TLV320_DF_li_vol_right;
p07gbar 0:a68f7c573e8c 364 sdt_vol = TLV320_DF_sdt_vol;
p07gbar 0:a68f7c573e8c 365 bypass_ = df_bypass_;
p07gbar 0:a68f7c573e8c 366
p07gbar 0:a68f7c573e8c 367 ADC_source = df_ADC_source;
p07gbar 0:a68f7c573e8c 368 ADC_source_old = df_ADC_source;
p07gbar 0:a68f7c573e8c 369
p07gbar 0:a68f7c573e8c 370 mic_mute = df_mic_mute;
p07gbar 0:a68f7c573e8c 371 li_mute_left = df_li_mute_left;
p07gbar 0:a68f7c573e8c 372 li_mute_right = df_li_mute_right;
p07gbar 0:a68f7c573e8c 373
p07gbar 0:a68f7c573e8c 374
p07gbar 0:a68f7c573e8c 375 mic_boost_ = df_mic_boost_;
p07gbar 0:a68f7c573e8c 376 out_mute = df_out_mute;
p07gbar 0:a68f7c573e8c 377 de_emph_code = df_de_emph_code;
p07gbar 0:a68f7c573e8c 378 ADC_highpass_enable = df_ADC_highpass_enable;
p07gbar 0:a68f7c573e8c 379
p07gbar 0:a68f7c573e8c 380 device_all_pwr = df_device_all_pwr;
p07gbar 0:a68f7c573e8c 381 device_clk_pwr = df_device_clk_pwr;
p07gbar 0:a68f7c573e8c 382 device_osc_pwr = df_device_osc_pwr;
p07gbar 0:a68f7c573e8c 383 device_out_pwr = df_device_out_pwr;
p07gbar 0:a68f7c573e8c 384 device_dac_pwr = df_device_dac_pwr;
p07gbar 0:a68f7c573e8c 385 device_adc_pwr = df_device_dac_pwr;
p07gbar 0:a68f7c573e8c 386 device_mic_pwr = df_device_mic_pwr;
p07gbar 0:a68f7c573e8c 387 device_lni_pwr = df_device_lni_pwr;
p07gbar 0:a68f7c573e8c 388
p07gbar 0:a68f7c573e8c 389 device_master = df_device_master;
p07gbar 0:a68f7c573e8c 390 device_lrswap = df_device_lrswap;
p07gbar 0:a68f7c573e8c 391 device_lrws = df_device_lrws;
p07gbar 0:a68f7c573e8c 392 device_bitlength = df_device_bitlength;
p07gbar 0:a68f7c573e8c 393
p07gbar 0:a68f7c573e8c 394
p07gbar 0:a68f7c573e8c 395 ADC_rate = df_ADC_rate;
p07gbar 0:a68f7c573e8c 396 DAC_rate = df_DAC_rate;
p07gbar 0:a68f7c573e8c 397
p07gbar 0:a68f7c573e8c 398 device_interface_active = df_device_interface_active;
p07gbar 0:a68f7c573e8c 399 }
p07gbar 0:a68f7c573e8c 400
p07gbar 0:a68f7c573e8c 401 char TLV320::gen_samplerate() {
p07gbar 0:a68f7c573e8c 402 char temp = 0;
p07gbar 0:a68f7c573e8c 403 switch(ADC_rate)
p07gbar 0:a68f7c573e8c 404 {
p07gbar 0:a68f7c573e8c 405 case 96000:
p07gbar 0:a68f7c573e8c 406 temp = 0x0E;
p07gbar 0:a68f7c573e8c 407 break;
p07gbar 0:a68f7c573e8c 408 case 48000:
p07gbar 0:a68f7c573e8c 409 temp = 0x00;
p07gbar 0:a68f7c573e8c 410 if(DAC_rate == 8000) temp = 0x02;
p07gbar 0:a68f7c573e8c 411 break;
p07gbar 0:a68f7c573e8c 412 case 32000:
p07gbar 0:a68f7c573e8c 413 temp = 0x0C;
p07gbar 0:a68f7c573e8c 414 break;
p07gbar 0:a68f7c573e8c 415 case 8000:
p07gbar 0:a68f7c573e8c 416 temp = 0x03;
p07gbar 0:a68f7c573e8c 417 if(DAC_rate == 48000) temp = 0x04;
p07gbar 0:a68f7c573e8c 418 break;
p07gbar 0:a68f7c573e8c 419 default:
p07gbar 0:a68f7c573e8c 420 temp = 0x00;
p07gbar 0:a68f7c573e8c 421 break;
p07gbar 0:a68f7c573e8c 422 }
p07gbar 0:a68f7c573e8c 423 return temp;
p07gbar 0:a68f7c573e8c 424 }
p07gbar 0:a68f7c573e8c 425
p07gbar 0:a68f7c573e8c 426