xref: /linux/sound/soc/codecs/max9860.h (revision 3eb66e91a25497065c5322b1268cbc3953642227)
1*a93532dbSPeter Rosin /* SPDX-License-Identifier: GPL-2.0 */
23b2af7f7SPeter Rosin /*
33b2af7f7SPeter Rosin  * Driver for the MAX9860 Mono Audio Voice Codec
43b2af7f7SPeter Rosin  *
53b2af7f7SPeter Rosin  * Author: Peter Rosin <peda@axentia.s>
63b2af7f7SPeter Rosin  *         Copyright 2016 Axentia Technologies
73b2af7f7SPeter Rosin  */
83b2af7f7SPeter Rosin 
93b2af7f7SPeter Rosin #ifndef _SND_SOC_MAX9860
103b2af7f7SPeter Rosin #define _SND_SOC_MAX9860
113b2af7f7SPeter Rosin 
123b2af7f7SPeter Rosin #define MAX9860_INTRSTATUS   0x00
133b2af7f7SPeter Rosin #define MAX9860_MICREADBACK  0x01
143b2af7f7SPeter Rosin #define MAX9860_INTEN        0x02
153b2af7f7SPeter Rosin #define MAX9860_SYSCLK       0x03
163b2af7f7SPeter Rosin #define MAX9860_AUDIOCLKHIGH 0x04
173b2af7f7SPeter Rosin #define MAX9860_AUDIOCLKLOW  0x05
183b2af7f7SPeter Rosin #define MAX9860_IFC1A        0x06
193b2af7f7SPeter Rosin #define MAX9860_IFC1B        0x07
203b2af7f7SPeter Rosin #define MAX9860_VOICEFLTR    0x08
213b2af7f7SPeter Rosin #define MAX9860_DACATTN      0x09
223b2af7f7SPeter Rosin #define MAX9860_ADCLEVEL     0x0a
233b2af7f7SPeter Rosin #define MAX9860_DACGAIN      0x0b
243b2af7f7SPeter Rosin #define MAX9860_MICGAIN      0x0c
253b2af7f7SPeter Rosin #define MAX9860_RESERVED     0x0d
263b2af7f7SPeter Rosin #define MAX9860_MICADC       0x0e
273b2af7f7SPeter Rosin #define MAX9860_NOISEGATE    0x0f
283b2af7f7SPeter Rosin #define MAX9860_PWRMAN       0x10
293b2af7f7SPeter Rosin #define MAX9860_REVISION     0xff
303b2af7f7SPeter Rosin 
313b2af7f7SPeter Rosin #define MAX9860_MAX_REGISTER 0xff
323b2af7f7SPeter Rosin 
333b2af7f7SPeter Rosin /* INTRSTATUS */
343b2af7f7SPeter Rosin #define MAX9860_CLD          0x80
353b2af7f7SPeter Rosin #define MAX9860_SLD          0x40
363b2af7f7SPeter Rosin #define MAX9860_ULK          0x20
373b2af7f7SPeter Rosin 
383b2af7f7SPeter Rosin /* MICREADBACK */
393b2af7f7SPeter Rosin #define MAX9860_NG           0xe0
403b2af7f7SPeter Rosin #define MAX9860_AGC          0x1f
413b2af7f7SPeter Rosin 
423b2af7f7SPeter Rosin /* INTEN */
433b2af7f7SPeter Rosin #define MAX9860_ICLD         0x80
443b2af7f7SPeter Rosin #define MAX9860_ISLD         0x40
453b2af7f7SPeter Rosin #define MAX9860_IULK         0x20
463b2af7f7SPeter Rosin 
473b2af7f7SPeter Rosin /* SYSCLK */
483b2af7f7SPeter Rosin #define MAX9860_PSCLK        0x30
493b2af7f7SPeter Rosin #define MAX9860_PSCLK_OFF    0x00
503b2af7f7SPeter Rosin #define MAX9860_PSCLK_SHIFT  4
513b2af7f7SPeter Rosin #define MAX9860_FREQ         0x06
523b2af7f7SPeter Rosin #define MAX9860_FREQ_NORMAL  0x00
533b2af7f7SPeter Rosin #define MAX9860_FREQ_12MHZ   0x02
543b2af7f7SPeter Rosin #define MAX9860_FREQ_13MHZ   0x04
553b2af7f7SPeter Rosin #define MAX9860_FREQ_19_2MHZ 0x06
563b2af7f7SPeter Rosin #define MAX9860_16KHZ        0x01
573b2af7f7SPeter Rosin 
583b2af7f7SPeter Rosin /* AUDIOCLKHIGH */
593b2af7f7SPeter Rosin #define MAX9860_PLL          0x80
603b2af7f7SPeter Rosin #define MAX9860_NHI          0x7f
613b2af7f7SPeter Rosin 
623b2af7f7SPeter Rosin /* AUDIOCLKLOW */
633b2af7f7SPeter Rosin #define MAX9860_NLO          0xff
643b2af7f7SPeter Rosin 
653b2af7f7SPeter Rosin /* IFC1A */
663b2af7f7SPeter Rosin #define MAX9860_MASTER       0x80
673b2af7f7SPeter Rosin #define MAX9860_WCI          0x40
683b2af7f7SPeter Rosin #define MAX9860_DBCI         0x20
693b2af7f7SPeter Rosin #define MAX9860_DDLY         0x10
703b2af7f7SPeter Rosin #define MAX9860_HIZ          0x08
713b2af7f7SPeter Rosin #define MAX9860_TDM          0x04
723b2af7f7SPeter Rosin 
733b2af7f7SPeter Rosin /* IFC1B */
743b2af7f7SPeter Rosin #define MAX9860_ABCI         0x20
753b2af7f7SPeter Rosin #define MAX9860_ADLY         0x10
763b2af7f7SPeter Rosin #define MAX9860_ST           0x08
773b2af7f7SPeter Rosin #define MAX9860_BSEL         0x07
783b2af7f7SPeter Rosin #define MAX9860_BSEL_OFF     0x00
793b2af7f7SPeter Rosin #define MAX9860_BSEL_64X     0x01
803b2af7f7SPeter Rosin #define MAX9860_BSEL_48X     0x02
813b2af7f7SPeter Rosin #define MAX9860_BSEL_PCLK_2  0x04
823b2af7f7SPeter Rosin #define MAX9860_BSEL_PCLK_4  0x05
833b2af7f7SPeter Rosin #define MAX9860_BSEL_PCLK_8  0x06
843b2af7f7SPeter Rosin #define MAX9860_BSEL_PCLK_16 0x07
853b2af7f7SPeter Rosin 
863b2af7f7SPeter Rosin /* VOICEFLTR */
873b2af7f7SPeter Rosin #define MAX9860_AVFLT        0xf0
883b2af7f7SPeter Rosin #define MAX9860_AVFLT_SHIFT  4
893b2af7f7SPeter Rosin #define MAX9860_AVFLT_COUNT  6
903b2af7f7SPeter Rosin #define MAX9860_DVFLT        0x0f
913b2af7f7SPeter Rosin #define MAX9860_DVFLT_SHIFT  0
923b2af7f7SPeter Rosin #define MAX9860_DVFLT_COUNT  6
933b2af7f7SPeter Rosin 
943b2af7f7SPeter Rosin /* DACATTN */
953b2af7f7SPeter Rosin #define MAX9860_DVA          0xfe
963b2af7f7SPeter Rosin #define MAX9860_DVA_SHIFT    1
973b2af7f7SPeter Rosin #define MAX9860_DVA_MUTE     0x5e
983b2af7f7SPeter Rosin 
993b2af7f7SPeter Rosin /* ADCLEVEL */
1003b2af7f7SPeter Rosin #define MAX9860_ADCRL        0xf0
1013b2af7f7SPeter Rosin #define MAX9860_ADCRL_SHIFT  4
1023b2af7f7SPeter Rosin #define MAX9860_ADCLL        0x0f
1033b2af7f7SPeter Rosin #define MAX9860_ADCLL_SHIFT  0
1043b2af7f7SPeter Rosin #define MAX9860_ADCxL_MIN    15
1053b2af7f7SPeter Rosin 
1063b2af7f7SPeter Rosin /* DACGAIN */
1073b2af7f7SPeter Rosin #define MAX9860_DVG          0x60
1083b2af7f7SPeter Rosin #define MAX9860_DVG_SHIFT    5
1093b2af7f7SPeter Rosin #define MAX9860_DVG_MAX      3
1103b2af7f7SPeter Rosin #define MAX9860_DVST         0x1f
1113b2af7f7SPeter Rosin #define MAX9860_DVST_SHIFT   0
1123b2af7f7SPeter Rosin #define MAX9860_DVST_MIN     31
1133b2af7f7SPeter Rosin 
1143b2af7f7SPeter Rosin /* MICGAIN */
1153b2af7f7SPeter Rosin #define MAX9860_PAM          0x60
1163b2af7f7SPeter Rosin #define MAX9860_PAM_SHIFT    5
1173b2af7f7SPeter Rosin #define MAX9860_PAM_MAX      3
1183b2af7f7SPeter Rosin #define MAX9860_PGAM         0x1f
1193b2af7f7SPeter Rosin #define MAX9860_PGAM_SHIFT   0
1203b2af7f7SPeter Rosin #define MAX9860_PGAM_MIN     20
1213b2af7f7SPeter Rosin 
1223b2af7f7SPeter Rosin /* MICADC */
1233b2af7f7SPeter Rosin #define MAX9860_AGCSRC       0x80
1243b2af7f7SPeter Rosin #define MAX9860_AGCSRC_SHIFT 7
1253b2af7f7SPeter Rosin #define MAX9860_AGCSRC_COUNT 2
1263b2af7f7SPeter Rosin #define MAX9860_AGCRLS       0x70
1273b2af7f7SPeter Rosin #define MAX9860_AGCRLS_SHIFT 4
1283b2af7f7SPeter Rosin #define MAX9860_AGCRLS_COUNT 8
1293b2af7f7SPeter Rosin #define MAX9860_AGCATK       0x0c
1303b2af7f7SPeter Rosin #define MAX9860_AGCATK_SHIFT 2
1313b2af7f7SPeter Rosin #define MAX9860_AGCATK_COUNT 4
1323b2af7f7SPeter Rosin #define MAX9860_AGCHLD       0x03
1333b2af7f7SPeter Rosin #define MAX9860_AGCHLD_OFF   0x00
1343b2af7f7SPeter Rosin #define MAX9860_AGCHLD_SHIFT 0
1353b2af7f7SPeter Rosin #define MAX9860_AGCHLD_COUNT 4
1363b2af7f7SPeter Rosin 
1373b2af7f7SPeter Rosin /* NOISEGATE */
1383b2af7f7SPeter Rosin #define MAX9860_ANTH         0xf0
1393b2af7f7SPeter Rosin #define MAX9860_ANTH_SHIFT   4
1403b2af7f7SPeter Rosin #define MAX9860_ANTH_MAX     15
1413b2af7f7SPeter Rosin #define MAX9860_AGCTH        0x0f
1423b2af7f7SPeter Rosin #define MAX9860_AGCTH_SHIFT  0
1433b2af7f7SPeter Rosin #define MAX9860_AGCTH_MIN    15
1443b2af7f7SPeter Rosin 
1453b2af7f7SPeter Rosin /* PWRMAN */
1463b2af7f7SPeter Rosin #define MAX9860_SHDN         0x80
1473b2af7f7SPeter Rosin #define MAX9860_DACEN        0x08
1483b2af7f7SPeter Rosin #define MAX9860_DACEN_SHIFT  3
1493b2af7f7SPeter Rosin #define MAX9860_ADCLEN       0x02
1503b2af7f7SPeter Rosin #define MAX9860_ADCLEN_SHIFT 1
1513b2af7f7SPeter Rosin #define MAX9860_ADCREN       0x01
1523b2af7f7SPeter Rosin #define MAX9860_ADCREN_SHIFT 0
1533b2af7f7SPeter Rosin 
1543b2af7f7SPeter Rosin #endif /* _SND_SOC_MAX9860 */
155