| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | /** ES8311.h  --  ES8311 ALSA SoC Audio Codec** Authors:** Based on ES8374.h by David Yang** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License version 2 as* published by the Free Software Foundation.*/#ifndef _ES8311_H#define _ES8311_H#include "driver/i2c.h"#include "esxxx_common.h"/**   ES8311_REGISTER NAME_REG_REGISTER ADDRESS*/#define ES8311_RESET_REG00 0x00 /*reset digital,csm,clock manager etc.*//** Clock Scheme Register definition*/#define ES8311_CLK_MANAGER_REG01 \  0x01 /* select clk src for mclk, enable clock for codec */#define ES8311_CLK_MANAGER_REG02 0x02 /* clk divider and clk multiplier */#define ES8311_CLK_MANAGER_REG03 0x03 /* adc fsmode and osr  */#define ES8311_CLK_MANAGER_REG04 0x04 /* dac osr */#define ES8311_CLK_MANAGER_REG05 0x05 /* clk divier for adc and dac */#define ES8311_CLK_MANAGER_REG06 0x06 /* bclk inverter and divider */#define ES8311_CLK_MANAGER_REG07 0x07 /* tri-state, lrck divider */#define ES8311_CLK_MANAGER_REG08 0x08 /* lrck divider */#define ES8311_SDPIN_REG09 0x09       /* dac serial digital port */#define ES8311_SDPOUT_REG0A 0x0A      /* adc serial digital port */#define ES8311_SYSTEM_REG0B 0x0B      /* system */#define ES8311_SYSTEM_REG0C 0x0C      /* system */#define ES8311_SYSTEM_REG0D 0x0D      /* system, power up/down */#define ES8311_SYSTEM_REG0E 0x0E      /* system, power up/down */#define ES8311_SYSTEM_REG0F 0x0F      /* system, low power */#define ES8311_SYSTEM_REG10 0x10      /* system */#define ES8311_SYSTEM_REG11 0x11      /* system */#define ES8311_SYSTEM_REG12 0x12      /* system, Enable DAC */#define ES8311_SYSTEM_REG13 0x13      /* system */#define ES8311_SYSTEM_REG14 \  0x14                         /* system, select DMIC, select analog pga gain */#define ES8311_ADC_REG15 0x15  /* ADC, adc ramp rate, dmic sense */#define ES8311_ADC_REG16 0x16  /* ADC */#define ES8311_ADC_REG17 0x17  /* ADC, volume */#define ES8311_ADC_REG18 0x18  /* ADC, alc enable and winsize */#define ES8311_ADC_REG19 0x19  /* ADC, alc maxlevel */#define ES8311_ADC_REG1A 0x1A  /* ADC, alc automute */#define ES8311_ADC_REG1B 0x1B  /* ADC, alc automute, adc hpf s1 */#define ES8311_ADC_REG1C 0x1C  /* ADC, equalizer, hpf s2 */#define ES8311_DAC_REG31 0x31  /* DAC, mute */#define ES8311_DAC_REG32 0x32  /* DAC, volume */#define ES8311_DAC_REG33 0x33  /* DAC, offset */#define ES8311_DAC_REG34 0x34  /* DAC, drc enable, drc winsize */#define ES8311_DAC_REG35 0x35  /* DAC, drc maxlevel, minilevel */#define ES8311_DAC_REG37 0x37  /* DAC, ramprate */#define ES8311_GPIO_REG44 0x44 /* GPIO, dac2adc for test */#define ES8311_GP_REG45 0x45   /* GP CONTROL */#define ES8311_CHD1_REGFD 0xFD /* CHIP ID1 */#define ES8311_CHD2_REGFE 0xFE /* CHIP ID2 */#define ES8311_CHVER_REGFF 0xFF /* VERSION */#define ES8311_CHD1_REGFD 0xFD  /* CHIP ID1 */#define ES8311_MAX_REGISTER 0xFFtypedef struct {  ESCodecMode esMode;  i2c_port_t i2c_port_num;  i2c_config_t i2c_cfg;  DacOutput dacOutput;  AdcInput adcInput;} Es8311Config;#define AUDIO_CODEC_ES8311_DEFAULT()                                        \  {                                                                         \      .esMode = ES_MODE_SLAVE,                                              \      .i2c_port_num = I2C_NUM_0,                                            \      .i2c_cfg = {.mode = I2C_MODE_MASTER,                                  \                  .sda_io_num = IIC_DATA,                                   \                  .scl_io_num = IIC_CLK,                                    \                  .sda_pullup_en = GPIO_PULLUP_ENABLE,                      \                  .scl_pullup_en = GPIO_PULLUP_ENABLE,                      \                  .master.clk_speed = 100000},                              \      .adcInput = ADC_INPUT_LINPUT1_RINPUT1,                                \      .dacOutput = DAC_OUTPUT_LOUT1 | DAC_OUTPUT_LOUT2 | DAC_OUTPUT_ROUT1 | \                   DAC_OUTPUT_ROUT2,                                        \  };int Es8311Init(Es8311Config* cfg);void Es8311Uninit();esp_err_t Es8311GetRef(bool flag);esp_err_t Es7243Init(void);int Es7243ReadReg(uint8_t regAdd);int Es8311ConfigFmt(ESCodecModule mode, ESCodecI2SFmt fmt);int Es8311I2sConfigClock(ESCodecI2sClock cfg);int Es8311SetBitsPerSample(ESCodecModule mode, BitsLength bitPerSample);void es8311_Codec_Startup(uint32_t mclk_freq, uint32_t lrck_freq);int Es8311Start(ESCodecModule mode);int Es8311Stop(ESCodecModule mode);int Es8311SetVoiceVolume(int volume);int Es8311GetVoiceVolume(int* volume);int Es8311SetVoiceMute(int enable);int Es8311GetVoiceMute(int* mute);int Es8311SetMicGain(MicGain gain);int Es8311ConfigAdcInput(AdcInput input);int Es8311ConfigDacOutput(DacOutput output);int ES8311WriteReg(uint8_t regAdd, uint8_t data);void Es8311ReadAll();int Es8311ReadReg(uint8_t regAdd);#endif
 |