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