/* * max98090.h -- MAX98090 ALSA SoC Audio driver * * Copyright 2011-2012 Maxim Integrated Products * * 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 _MAX98090_H #define _MAX98090_H #include /* One can override the Linux version here with an explicit version number */ #define M98090_LINUX_VERSION LINUX_VERSION_CODE /* * Driver revision */ #define MAX98090_REVISION "0.01.00" /* * MAX98090 Register Definitions */ #define M98090_REG_00_SW_RESET 0x00 #define M98090_REG_01_IRQ_STATUS 0x01 #define M98090_REG_02_JACK_STATUS 0x02 #define M98090_REG_03_IRQ_ENABLE 0x03 #define M98090_REG_04_QCFG_SYS_CLK 0x04 #define M98090_REG_05_QCFG_RATE 0x05 #define M98090_REG_06_QCFG_DAI 0x06 #define M98090_REG_07_QCFG_DAC 0x07 #define M98090_REG_08_QCFG_MIC_PATH 0x08 #define M98090_REG_09_QCFG_LINE_PATH 0x09 #define M98090_REG_0A_QCFG_MIC_LOOP 0x0A #define M98090_REG_0B_QCFG_LINE_LOOP 0x0B #define M98090_REG_0C_RESERVED 0x0C #define M98090_REG_0D_CFG_INPUT 0x0D #define M98090_REG_0E_LVL_LINE 0x0E #define M98090_REG_0F_CFG_LINE 0x0F #define M98090_REG_10_LVL_MIC1 0x10 #define M98090_REG_11_LVL_MIC2 0x11 #define M98090_REG_12_MIC_BIAS 0x12 #define M98090_REG_13_MIC_CFG1 0x13 #define M98090_REG_14_MIC_CFG2 0x14 #define M98090_REG_15_MIX_ADC_L 0x15 #define M98090_REG_16_MIX_ADC_R 0x16 #define M98090_REG_17_LVL_ADC_L 0x17 #define M98090_REG_18_LVL_ADC_R 0x18 #define M98090_REG_19_LVL_BIQUAD 0x19 #define M98090_REG_1A_LVL_SIDETONE 0x1A #define M98090_REG_1B_SYS_CLOCK 0x1B #define M98090_REG_1C_CLOCK_MODE 0x1C #define M98090_REG_1D_CLOCK_DAI1_NI_HI 0x1D #define M98090_REG_1E_CLOCK_DAI2_NI_LO 0x1E #define M98090_REG_1F_CLOCK_DAI3_MI_HI 0x1F #define M98090_REG_20_CLOCK_DAI4_MI_LO 0x20 #define M98090_REG_21_CLOCK_MAS_MODE 0x21 #define M98090_REG_22_DAI_INTERFACE_FORMAT 0x22 #define M98090_REG_23_DAI_TDM_CONTROL 0x23 #define M98090_REG_24_DAI_TDM_FORMAT 0x24 #define M98090_REG_25_DAI_IOCFG 0x25 #define M98090_REG_26_DAI_FILTERS 0x26 #define M98090_REG_27_DAI_LVL 0x27 #define M98090_REG_28_DAI_LVL_EQ 0x28 #define M98090_REG_29_MIX_HP_LEFT 0x29 #define M98090_REG_2A_MIX_HP_RIGHT 0x2A #define M98090_REG_2B_MIX_HP_CNTL 0x2B #define M98090_REG_2C_LVL_HP_LEFT 0x2C #define M98090_REG_2D_LVL_HP_RIGHT 0x2D #define M98090_REG_2E_MIX_SPK_LEFT 0x2E #define M98090_REG_2F_MIX_SPK_RIGHT 0x2F #define M98090_REG_30_MIX_SPK_CNTL 0x30 #define M98090_REG_31_LVL_SPK_LEFT 0x31 #define M98090_REG_32_LVL_SPK_RIGHT 0x32 #define M98090_REG_33_ALC_TIMING 0x33 #define M98090_REG_34_ALC_CMPR 0x34 #define M98090_REG_35_ALC_EXP 0x35 #define M98090_REG_36_LVL_ALC 0x36 #define M98090_REG_37_MIX_RCV_LEFT 0x37 #define M98090_REG_38_MIX_RCV_CTRL_LEFT 0x38 #define M98090_REG_39_LVL_RCV_LEFT 0x39 #define M98090_REG_3A_MIX_RCV_RIGHT 0x3A #define M98090_REG_3B_MIX_RCV_CNTL_RIGHT 0x3B #define M98090_REG_3C_LVL_RCV_RIGHT 0x3C #define M98090_REG_3D_CFG_JACK 0x3D #define M98090_REG_3E_PWR_EN_IN 0x3E #define M98090_REG_3F_PWR_EN_OUT 0x3F #define M98090_REG_40_CFG_LVL 0x40 #define M98090_REG_41_DSP_EQ_EN 0x41 #define M98090_REG_42_BIAS_CNTL 0x42 #define M98090_REG_43_DAC_CFG 0x43 #define M98090_REG_44_ADC_CFG 0x44 #define M98090_REG_45_PWR_SYS 0x45 #define M98090_REG_46_EQ_BASE 0x46 #define M98090_REG_AF_BIQUAD_BASE 0xAF #define M98090_REG_BE_DMIC3_VOLUME 0xBE #define M98090_REG_BF_DMIC4_VOLUME 0xBF #define M98090_REG_C0_DMIC34_BQ_PREATTEN 0xC0 #define M98090_REG_C1_RECORD_TDM_SLOT 0xC1 #define M98090_REG_C2_SAMPLE_RATE 0xC2 #define M98090_REG_C3_DMIC34_BIQUAD_BASE 0xC3 #define M98090_REG_FF_REV_ID 0xFF #define M98090_REG_CNT (0xFF+1) /* MAX98090 Register Bit Fields */ /* * M98090_REG_00_SW_RESET */ #define M98090_SWRESET_MASK (1<<7) #define M98090_SWRESET_SHIFT 7 #define M98090_SWRESET_WIDTH 1 /* * M98090_REG_01_IRQ_STATUS */ #define M98090_IRQ_CLD_MASK (1<<7) #define M98090_IRQ_CLD_SHIFT 7 #define M98090_IRQ_CLD_WIDTH 1 #define M98090_IRQ_SLD_MASK (1<<6) #define M98090_IRQ_SLD_SHIFT 6 #define M98090_IRQ_SLD_WIDTH 1 #define M98090_IRQ_ULK_MASK (1<<5) #define M98090_IRQ_ULK_SHIFT 5 #define M98090_IRQ_ULK_WIDTH 1 #define M98090_IRQ_JDET_MASK (1<<2) #define M98090_IRQ_JDET_SHIFT 2 #define M98090_IRQ_JDET_WIDTH 1 #define M98090_IRQ_ALCACT_MASK (1<<1) #define M98090_IRQ_ALCACT_SHIFT 1 #define M98090_IRQ_ALCACT_WIDTH 1 #define M98090_IRQ_ALCCLP_MASK (1<<0) #define M98090_IRQ_ALCCLP_SHIFT 0 #define M98090_IRQ_ALCCLP_WIDTH 1 /* * M98090_REG_02_JACK_STATUS */ #define M98090_LSNS_MASK (1<<2) #define M98090_LSNS_SHIFT 2 #define M98090_LSNS_WIDTH 1 #define M98090_JKSNS_MASK (1<<1) #define M98090_JKSNS_SHIFT 1 #define M98090_JKSNS_WIDTH 1 /* * M98090_REG_03_IRQ_ENABLE */ #define M98090_IRQ_ICLD_MASK (1<<7) #define M98090_IRQ_ICLD_SHIFT 7 #define M98090_IRQ_ICLD_WIDTH 1 #define M98090_IRQ_ISLD_MASK (1<<6) #define M98090_IRQ_ISLD_SHIFT 6 #define M98090_IRQ_ISLD_WIDTH 1 #define M98090_IRQ_IULK_MASK (1<<5) #define M98090_IRQ_IULK_SHIFT 5 #define M98090_IRQ_IULK_WIDTH 1 #define M98090_IRQ_IJDET_MASK (1<<2) #define M98090_IRQ_IJDET_SHIFT 2 #define M98090_IRQ_IJDET_WIDTH 1 #define M98090_IRQ_IALCACT_MASK (1<<1) #define M98090_IRQ_IALCACT_SHIFT 1 #define M98090_IRQ_IALCACT_WIDTH 1 #define M98090_IRQ_IALCCLP_MASK (1<<0) #define M98090_IRQ_IALCCLP_SHIFT 0 #define M98090_IRQ_IALCCLP_WIDTH 1 /* * M98090_REG_04_QCFG_SYS_CLK */ #define M98090_CLK_26M_MASK (1<<7) #define M98090_CLK_26M_SHIFT 7 #define M98090_CLK_26M_WIDTH 1 #define M98090_CLK_19P2M_MASK (1<<6) #define M98090_CLK_19P2M_SHIFT 6 #define M98090_CLK_19P2M_WIDTH 1 #define M98090_CLK_13M_MASK (1<<5) #define M98090_CLK_13M_SHIFT 5 #define M98090_CLK_13M_WIDTH 1 #define M98090_CLK_12P288M_MASK (1<<4) #define M98090_CLK_12P288M_SHIFT 4 #define M98090_CLK_12P288M_WIDTH 1 #define M98090_CLK_12M_MASK (1<<3) #define M98090_CLK_12M_SHIFT 3 #define M98090_CLK_12M_WIDTH 1 #define M98090_CLK_11P2896M_MASK (1<<2) #define M98090_CLK_11P2896M_SHIFT 2 #define M98090_CLK_11P2896M_WIDTH 1 #define M98090_CLK_256FS_MASK (1<<0) #define M98090_CLK_256FS_SHIFT 0 #define M98090_CLK_256FS_WIDTH 1 #define M98090_CLK_ALL_SHIFT 0 #define M98090_CLK_ALL_WIDTH 8 #define M98090_CLK_ALL_NUM (1<> 8) & 0xff) #define M98090_BYTE0(w) (w & 0xff) /* Silicon revision number */ #define M98090_REVA 0x40 #define M98091_REVA 0x50 enum max98090_type { MAX98090, MAX98091, }; struct max98090_cdata { unsigned int rate; unsigned int fmt; int eq_sel; int eq_num_bands; int bq_sel; int dmic34bq_sel; }; struct max98090_priv { struct snd_soc_codec *codec; enum max98090_type devtype; void *control_data; struct max98090_pdata *pdata; unsigned int sysclk; unsigned int bclk; unsigned int lrclk; struct max98090_cdata dai[1]; int jack_state; struct delayed_work jack_work; struct snd_soc_jack *jack; unsigned int dai_fmt; int tdm_slots; int tdm_width; const char **eq_texts; const char **bq_texts; const char **dmic34bq_texts; struct soc_enum eq_enum; struct soc_enum bq_enum; struct soc_enum dmic34bq_enum; int eq_textcnt; int bq_textcnt; int dmic34bq_textcnt; u8 lin_state; unsigned int mic1pre; unsigned int mic2pre; unsigned int extmic_mux; unsigned int sidetone; int irq; }; #endif