Adding route() made me review dap_enable() more closely and it wasn't doing what I intended to do before, it was ignoring I2S coming back from Teensy, DAP was sourced from ADC as was I2S_DOUT and DAC was sourced from DAP; Teensy received valid data from ADC but data from Teensy was just discarded if user selected it.dds
| @@ -568,6 +568,16 @@ unsigned int AudioControlSGTL5000::modify(unsigned int reg, unsigned int val, un | |||
| return val1; | |||
| } | |||
| unsigned short AudioControlSGTL5000::route(uint8_t i2s_out, uint8_t dac, uint8_t dap, uint8_t dap_mix) | |||
| { | |||
| i2s_out&=3; | |||
| dac&=3; | |||
| dap&=3; | |||
| dap_mix&=3; | |||
| if((i2s_out==SGTL_AUDIO_PROCESSOR)||(dac==SGTL_AUDIO_PROCESSOR)) modify(DAP_CONTROL,1,1); // enable DAP | |||
| return modify(CHIP_SSS_CTRL,(dap_mix<<8)|(dap<<6)|(dac<<4)|i2s_out,(3<<8)|(3<<6)|(3<<4)|3); | |||
| } | |||
| bool AudioControlSGTL5000::volumeInteger(unsigned int n) | |||
| { | |||
| if (n == 0) { | |||
| @@ -641,9 +651,9 @@ unsigned short AudioControlSGTL5000::dap_mix_enable(uint8_t n) | |||
| unsigned short AudioControlSGTL5000::dap_enable(uint8_t n) | |||
| { | |||
| if(n) n=1; | |||
| unsigned char DAC=1+(2*n); // I2S_IN if n==0 else DAP | |||
| unsigned char i2s_sel=3*n; // ADC if n==0 else DAP | |||
| modify(DAP_CONTROL,n,1); | |||
| return modify(CHIP_SSS_CTRL,(0<<6)|(DAC<<4),(3<<6)|(3<<4)); | |||
| return route(i2s_sel,SGTL_I2S_TEENSY,SGTL_ADC); | |||
| } | |||
| unsigned short AudioControlSGTL5000::dap_enable(void) | |||
| @@ -29,6 +29,10 @@ | |||
| #include "AudioControl.h" | |||
| #define SGTL_ADC 0 | |||
| #define SGTL_I2S_TEENSY 1 | |||
| #define SGTL_AUDIO_PROCESSOR 3 | |||
| class AudioControlSGTL5000 : public AudioControl | |||
| { | |||
| public: | |||
| @@ -53,6 +57,8 @@ public: | |||
| //bool inputLinein(void) { return write(0x0024, ana_ctrl | (1<<2)); } | |||
| //bool inputMic(void) { return write(0x002A, 0x0172) && write(0x0024, ana_ctrl & ~(1<<2)); } | |||
| unsigned short route(uint8_t i2s_out, uint8_t dac, uint8_t dap, uint8_t dap_mix); | |||
| unsigned short route(uint8_t i2s_out, uint8_t dac, uint8_t dap) { route(i2s_out,dac,dap,0); } | |||
| bool volume(float left, float right); | |||
| unsigned short micGain(unsigned int n) { return modify(0x002A, n&3, 3); } | |||
| unsigned short lo_lvl(uint8_t n); | |||