18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * cs42l52.h -- CS42L56 ALSA SoC audio driver
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright 2014 CirrusLogic, Inc.
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Author: Brian Austin <brian.austin@cirrus.com>
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#ifndef __CS42L56_H__
118c2ecf20Sopenharmony_ci#define __CS42L56_H__
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#define CS42L56_CHIP_ID_1		0x01
148c2ecf20Sopenharmony_ci#define CS42L56_CHIP_ID_2		0x02
158c2ecf20Sopenharmony_ci#define CS42L56_PWRCTL_1		0x03
168c2ecf20Sopenharmony_ci#define CS42L56_PWRCTL_2		0x04
178c2ecf20Sopenharmony_ci#define CS42L56_CLKCTL_1		0x05
188c2ecf20Sopenharmony_ci#define CS42L56_CLKCTL_2		0x06
198c2ecf20Sopenharmony_ci#define CS42L56_SERIAL_FMT		0x07
208c2ecf20Sopenharmony_ci#define CS42L56_CLASSH_CTL		0x08
218c2ecf20Sopenharmony_ci#define CS42L56_MISC_CTL		0x09
228c2ecf20Sopenharmony_ci#define CS42L56_INT_STATUS		0x0a
238c2ecf20Sopenharmony_ci#define CS42L56_PLAYBACK_CTL		0x0b
248c2ecf20Sopenharmony_ci#define CS42L56_DSP_MUTE_CTL		0x0c
258c2ecf20Sopenharmony_ci#define CS42L56_ADCA_MIX_VOLUME		0x0d
268c2ecf20Sopenharmony_ci#define CS42L56_ADCB_MIX_VOLUME		0x0e
278c2ecf20Sopenharmony_ci#define CS42L56_PCMA_MIX_VOLUME		0x0f
288c2ecf20Sopenharmony_ci#define CS42L56_PCMB_MIX_VOLUME		0x10
298c2ecf20Sopenharmony_ci#define CS42L56_ANAINPUT_ADV_VOLUME	0x11
308c2ecf20Sopenharmony_ci#define CS42L56_DIGINPUT_ADV_VOLUME	0x12
318c2ecf20Sopenharmony_ci#define CS42L56_MASTER_A_VOLUME		0x13
328c2ecf20Sopenharmony_ci#define CS42L56_MASTER_B_VOLUME		0x14
338c2ecf20Sopenharmony_ci#define CS42L56_BEEP_FREQ_ONTIME	0x15
348c2ecf20Sopenharmony_ci#define CS42L56_BEEP_FREQ_OFFTIME	0x16
358c2ecf20Sopenharmony_ci#define CS42L56_BEEP_TONE_CFG		0x17
368c2ecf20Sopenharmony_ci#define CS42L56_TONE_CTL		0x18
378c2ecf20Sopenharmony_ci#define CS42L56_CHAN_MIX_SWAP		0x19
388c2ecf20Sopenharmony_ci#define CS42L56_AIN_REFCFG_ADC_MUX	0x1a
398c2ecf20Sopenharmony_ci#define CS42L56_HPF_CTL			0x1b
408c2ecf20Sopenharmony_ci#define CS42L56_MISC_ADC_CTL		0x1c
418c2ecf20Sopenharmony_ci#define CS42L56_GAIN_BIAS_CTL		0x1d
428c2ecf20Sopenharmony_ci#define CS42L56_PGAA_MUX_VOLUME		0x1e
438c2ecf20Sopenharmony_ci#define CS42L56_PGAB_MUX_VOLUME		0x1f
448c2ecf20Sopenharmony_ci#define CS42L56_ADCA_ATTENUATOR		0x20
458c2ecf20Sopenharmony_ci#define CS42L56_ADCB_ATTENUATOR		0x21
468c2ecf20Sopenharmony_ci#define CS42L56_ALC_EN_ATTACK_RATE	0x22
478c2ecf20Sopenharmony_ci#define CS42L56_ALC_RELEASE_RATE	0x23
488c2ecf20Sopenharmony_ci#define CS42L56_ALC_THRESHOLD		0x24
498c2ecf20Sopenharmony_ci#define CS42L56_NOISE_GATE_CTL		0x25
508c2ecf20Sopenharmony_ci#define CS42L56_ALC_LIM_SFT_ZC		0x26
518c2ecf20Sopenharmony_ci#define CS42L56_AMUTE_HPLO_MUX		0x27
528c2ecf20Sopenharmony_ci#define CS42L56_HPA_VOLUME		0x28
538c2ecf20Sopenharmony_ci#define CS42L56_HPB_VOLUME		0x29
548c2ecf20Sopenharmony_ci#define CS42L56_LOA_VOLUME		0x2a
558c2ecf20Sopenharmony_ci#define CS42L56_LOB_VOLUME		0x2b
568c2ecf20Sopenharmony_ci#define CS42L56_LIM_THRESHOLD_CTL	0x2c
578c2ecf20Sopenharmony_ci#define CS42L56_LIM_CTL_RELEASE_RATE	0x2d
588c2ecf20Sopenharmony_ci#define CS42L56_LIM_ATTACK_RATE		0x2e
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci/* Device ID and Rev ID Masks */
618c2ecf20Sopenharmony_ci#define CS42L56_DEVID			0x56
628c2ecf20Sopenharmony_ci#define CS42L56_CHIP_ID_MASK		0xff
638c2ecf20Sopenharmony_ci#define CS42L56_AREV_MASK		0x1c
648c2ecf20Sopenharmony_ci#define CS42L56_MTLREV_MASK		0x03
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci/* Power bit masks */
678c2ecf20Sopenharmony_ci#define CS42L56_PDN_ALL_MASK		0x01
688c2ecf20Sopenharmony_ci#define CS42L56_PDN_ADCA_MASK		0x02
698c2ecf20Sopenharmony_ci#define CS42L56_PDN_ADCB_MASK		0x04
708c2ecf20Sopenharmony_ci#define CS42L56_PDN_CHRG_MASK		0x08
718c2ecf20Sopenharmony_ci#define CS42L56_PDN_BIAS_MASK		0x10
728c2ecf20Sopenharmony_ci#define CS42L56_PDN_VBUF_MASK		0x20
738c2ecf20Sopenharmony_ci#define CS42L56_PDN_LOA_MASK		0x03
748c2ecf20Sopenharmony_ci#define CS42L56_PDN_LOB_MASK		0x0c
758c2ecf20Sopenharmony_ci#define CS42L56_PDN_HPA_MASK		0x30
768c2ecf20Sopenharmony_ci#define CS42L56_PDN_HPB_MASK		0xc0
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ci/* serial port and clk masks */
798c2ecf20Sopenharmony_ci#define CS42L56_MASTER_MODE		0x40
808c2ecf20Sopenharmony_ci#define CS42L56_SLAVE_MODE		0
818c2ecf20Sopenharmony_ci#define CS42L56_MS_MODE_MASK		0x40
828c2ecf20Sopenharmony_ci#define CS42L56_SCLK_INV		0x20
838c2ecf20Sopenharmony_ci#define CS42L56_SCLK_INV_MASK		0x20
848c2ecf20Sopenharmony_ci#define CS42L56_SCLK_MCLK_MASK		0x18
858c2ecf20Sopenharmony_ci#define CS42L56_MCLK_PREDIV		0x04
868c2ecf20Sopenharmony_ci#define CS42L56_MCLK_PREDIV_MASK	0x04
878c2ecf20Sopenharmony_ci#define CS42L56_MCLK_DIV2		0x02
888c2ecf20Sopenharmony_ci#define CS42L56_MCLK_DIV2_MASK		0x02
898c2ecf20Sopenharmony_ci#define CS42L56_MCLK_DIS_MASK		0x01
908c2ecf20Sopenharmony_ci#define CS42L56_CLK_AUTO_MASK		0x20
918c2ecf20Sopenharmony_ci#define CS42L56_CLK_RATIO_MASK		0x1f
928c2ecf20Sopenharmony_ci#define CS42L56_DIG_FMT_I2S		0
938c2ecf20Sopenharmony_ci#define CS42L56_DIG_FMT_LEFT_J		0x08
948c2ecf20Sopenharmony_ci#define CS42L56_DIG_FMT_MASK		0x08
958c2ecf20Sopenharmony_ci
968c2ecf20Sopenharmony_ci/* Class H and misc ctl masks */
978c2ecf20Sopenharmony_ci#define CS42L56_ADAPT_PWR_MASK		0xc0
988c2ecf20Sopenharmony_ci#define CS42L56_CHRG_FREQ_MASK		0x0f
998c2ecf20Sopenharmony_ci#define CS42L56_DIG_MUX_MASK		0x80
1008c2ecf20Sopenharmony_ci#define CS42L56_ANLGSFT_MASK		0x10
1018c2ecf20Sopenharmony_ci#define CS42L56_ANLGZC_MASK		0x08
1028c2ecf20Sopenharmony_ci#define CS42L56_DIGSFT_MASK		0x04
1038c2ecf20Sopenharmony_ci#define CS42L56_FREEZE_MASK		0x01
1048c2ecf20Sopenharmony_ci#define CS42L56_MIC_BIAS_MASK		0x03
1058c2ecf20Sopenharmony_ci#define CS42L56_HPFA_FREQ_MASK		0x03
1068c2ecf20Sopenharmony_ci#define CS42L56_HPFB_FREQ_MASK		0xc0
1078c2ecf20Sopenharmony_ci#define CS42L56_AIN1A_REF_MASK		0x10
1088c2ecf20Sopenharmony_ci#define CS42L56_AIN2A_REF_MASK		0x40
1098c2ecf20Sopenharmony_ci#define CS42L56_AIN1B_REF_MASK		0x20
1108c2ecf20Sopenharmony_ci#define CS42L56_AIN2B_REF_MASK		0x80
1118c2ecf20Sopenharmony_ci
1128c2ecf20Sopenharmony_ci/* Playback Capture ctl masks */
1138c2ecf20Sopenharmony_ci#define CS42L56_PDN_DSP_MASK		0x80
1148c2ecf20Sopenharmony_ci#define CS42L56_DEEMPH_MASK		0x40
1158c2ecf20Sopenharmony_ci#define CS42L56_PLYBCK_GANG_MASK	0x10
1168c2ecf20Sopenharmony_ci#define CS42L56_PCM_INV_MASK		0x0c
1178c2ecf20Sopenharmony_ci#define CS42L56_MUTE_ALL		0xff
1188c2ecf20Sopenharmony_ci#define CS42L56_UNMUTE			0
1198c2ecf20Sopenharmony_ci#define CS42L56_ADCAMIX_MUTE_MASK	0x40
1208c2ecf20Sopenharmony_ci#define CS42L56_ADCBMIX_MUTE_MASK	0x80
1218c2ecf20Sopenharmony_ci#define CS42L56_PCMAMIX_MUTE_MASK	0x10
1228c2ecf20Sopenharmony_ci#define CS42L56_PCMBMIX_MUTE_MASK	0x20
1238c2ecf20Sopenharmony_ci#define CS42L56_MSTB_MUTE_MASK		0x02
1248c2ecf20Sopenharmony_ci#define CS42L56_MSTA_MUTE_MASK		0x01
1258c2ecf20Sopenharmony_ci#define CS42L56_ADCA_MUTE_MASK		0x01
1268c2ecf20Sopenharmony_ci#define CS42L56_ADCB_MUTE_MASK		0x02
1278c2ecf20Sopenharmony_ci#define CS42L56_HP_MUTE_MASK		0x80
1288c2ecf20Sopenharmony_ci#define CS42L56_LO_MUTE_MASK		0x80
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ci/* Beep masks */
1318c2ecf20Sopenharmony_ci#define CS42L56_BEEP_FREQ_MASK		0xf0
1328c2ecf20Sopenharmony_ci#define CS42L56_BEEP_ONTIME_MASK	0x0f
1338c2ecf20Sopenharmony_ci#define CS42L56_BEEP_OFFTIME_MASK	0xe0
1348c2ecf20Sopenharmony_ci#define CS42L56_BEEP_CFG_MASK		0xc0
1358c2ecf20Sopenharmony_ci#define CS42L56_BEEP_TREBCF_MASK	0x18
1368c2ecf20Sopenharmony_ci#define CS42L56_BEEP_BASSCF_MASK	0x06
1378c2ecf20Sopenharmony_ci#define CS42L56_BEEP_TCEN_MASK		0x01
1388c2ecf20Sopenharmony_ci#define CS42L56_BEEP_RATE_SHIFT		4
1398c2ecf20Sopenharmony_ci#define CS42L56_BEEP_EN_MASK		0x3f
1408c2ecf20Sopenharmony_ci
1418c2ecf20Sopenharmony_ci
1428c2ecf20Sopenharmony_ci/* Supported MCLKS */
1438c2ecf20Sopenharmony_ci#define CS42L56_MCLK_5P6448MHZ		5644800
1448c2ecf20Sopenharmony_ci#define CS42L56_MCLK_6MHZ		6000000
1458c2ecf20Sopenharmony_ci#define CS42L56_MCLK_6P144MHZ		6144000
1468c2ecf20Sopenharmony_ci#define CS42L56_MCLK_11P2896MHZ		11289600
1478c2ecf20Sopenharmony_ci#define CS42L56_MCLK_12MHZ		12000000
1488c2ecf20Sopenharmony_ci#define CS42L56_MCLK_12P288MHZ		12288000
1498c2ecf20Sopenharmony_ci#define CS42L56_MCLK_22P5792MHZ		22579200
1508c2ecf20Sopenharmony_ci#define CS42L56_MCLK_24MHZ		24000000
1518c2ecf20Sopenharmony_ci#define CS42L56_MCLK_24P576MHZ		24576000
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ci/* Clock ratios */
1548c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_128		0x08
1558c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_125		0x09
1568c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_136		0x0b
1578c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_192		0x0c
1588c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_187P5	0x0d
1598c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_256		0x10
1608c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_250		0x11
1618c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_272		0x13
1628c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_384		0x14
1638c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_375		0x15
1648c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_512		0x18
1658c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_500		0x19
1668c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_544		0x1b
1678c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_750		0x1c
1688c2ecf20Sopenharmony_ci#define CS42L56_MCLK_LRCLK_768		0x1d
1698c2ecf20Sopenharmony_ci
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_ci#define CS42L56_MAX_REGISTER		0x34
1728c2ecf20Sopenharmony_ci
1738c2ecf20Sopenharmony_ci#endif
174