162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * ALSA SoC Audio driver for CS4234 codec 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2020 Cirrus Logic, Inc. and 662306a36Sopenharmony_ci * Cirrus Logic International Semiconductor Ltd. 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef CS4234_H 1062306a36Sopenharmony_ci#define CS4234_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#define CS4234_DEVID_AB 0x01 1362306a36Sopenharmony_ci#define CS4234_DEVID_CD 0x02 1462306a36Sopenharmony_ci#define CS4234_DEVID_EF 0x03 1562306a36Sopenharmony_ci#define CS4234_REVID 0x05 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define CS4234_CLOCK_SP 0x06 1862306a36Sopenharmony_ci#define CS4234_BASE_RATE_MASK 0xC0 1962306a36Sopenharmony_ci#define CS4234_BASE_RATE_SHIFT 6 2062306a36Sopenharmony_ci#define CS4234_SPEED_MODE_MASK 0x30 2162306a36Sopenharmony_ci#define CS4234_SPEED_MODE_SHIFT 4 2262306a36Sopenharmony_ci#define CS4234_MCLK_RATE_MASK 0x0E 2362306a36Sopenharmony_ci#define CS4234_MCLK_RATE_SHIFT 1 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#define CS4234_SAMPLE_WIDTH 0x07 2662306a36Sopenharmony_ci#define CS4234_SDOUTX_SW_MASK 0xC0 2762306a36Sopenharmony_ci#define CS4234_SDOUTX_SW_SHIFT 6 2862306a36Sopenharmony_ci#define CS4234_INPUT_SW_MASK 0x30 2962306a36Sopenharmony_ci#define CS4234_INPUT_SW_SHIFT 4 3062306a36Sopenharmony_ci#define CS4234_LOW_LAT_SW_MASK 0x0C 3162306a36Sopenharmony_ci#define CS4234_LOW_LAT_SW_SHIFT 2 3262306a36Sopenharmony_ci#define CS4234_DAC5_SW_MASK 0x03 3362306a36Sopenharmony_ci#define CS4234_DAC5_SW_SHIFT 0 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define CS4234_SP_CTRL 0x08 3662306a36Sopenharmony_ci#define CS4234_INVT_SCLK_MASK 0x80 3762306a36Sopenharmony_ci#define CS4234_INVT_SCLK_SHIFT 7 3862306a36Sopenharmony_ci#define CS4234_DAC5_SRC_MASK 0x70 3962306a36Sopenharmony_ci#define CS4234_DAC5_SRC_SHIFT 4 4062306a36Sopenharmony_ci#define CS4234_SP_FORMAT_MASK 0x0C 4162306a36Sopenharmony_ci#define CS4234_SP_FORMAT_SHIFT 2 4262306a36Sopenharmony_ci#define CS4234_SDO_CHAIN_MASK 0x02 4362306a36Sopenharmony_ci#define CS4234_SDO_CHAIN_SHIFT 1 4462306a36Sopenharmony_ci#define CS4234_MST_SLV_MASK 0x01 4562306a36Sopenharmony_ci#define CS4234_MST_SLV_SHIFT 0 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define CS4234_SP_DATA_SEL 0x09 4862306a36Sopenharmony_ci#define CS4234_DAC14_SRC_MASK 0x38 4962306a36Sopenharmony_ci#define CS4234_DAC14_SRC_SHIFT 3 5062306a36Sopenharmony_ci#define CS4234_LL_SRC_MASK 0x07 5162306a36Sopenharmony_ci#define CS4234_LL_SRC_SHIFT 0 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#define CS4234_SDIN1_MASK1 0x0A 5462306a36Sopenharmony_ci#define CS4234_SDIN1_MASK2 0x0B 5562306a36Sopenharmony_ci#define CS4234_SDIN2_MASK1 0x0C 5662306a36Sopenharmony_ci#define CS4234_SDIN2_MASK2 0x0D 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#define CS4234_TPS_CTRL 0x0E 5962306a36Sopenharmony_ci#define CS4234_TPS_MODE_MASK 0x80 6062306a36Sopenharmony_ci#define CS4234_TPS_MODE_SHIFT 7 6162306a36Sopenharmony_ci#define CS4234_TPS_OFST_MASK 0x70 6262306a36Sopenharmony_ci#define CS4234_TPS_OFST_SHIFT 4 6362306a36Sopenharmony_ci#define CS4234_GRP_DELAY_MASK 0x0F 6462306a36Sopenharmony_ci#define CS4234_GRP_DELAY_SHIFT 0 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci#define CS4234_ADC_CTRL1 0x0F 6762306a36Sopenharmony_ci#define CS4234_VA_SEL_MASK 0x20 6862306a36Sopenharmony_ci#define CS4234_VA_SEL_SHIFT 5 6962306a36Sopenharmony_ci#define CS4234_ENA_HPF_MASK 0x10 7062306a36Sopenharmony_ci#define CS4234_ENA_HPF_SHIFT 4 7162306a36Sopenharmony_ci#define CS4234_INV_ADC_MASK 0x0F 7262306a36Sopenharmony_ci#define CS4234_INV_ADC4_MASK 0x08 7362306a36Sopenharmony_ci#define CS4234_INV_ADC4_SHIFT 3 7462306a36Sopenharmony_ci#define CS4234_INV_ADC3_MASK 0x04 7562306a36Sopenharmony_ci#define CS4234_INV_ADC3_SHIFT 2 7662306a36Sopenharmony_ci#define CS4234_INV_ADC2_MASK 0x02 7762306a36Sopenharmony_ci#define CS4234_INV_ADC2_SHIFT 1 7862306a36Sopenharmony_ci#define CS4234_INV_ADC1_MASK 0x01 7962306a36Sopenharmony_ci#define CS4234_INV_ADC1_SHIFT 0 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci#define CS4234_ADC_CTRL2 0x10 8262306a36Sopenharmony_ci#define CS4234_MUTE_ADC4_MASK 0x80 8362306a36Sopenharmony_ci#define CS4234_MUTE_ADC4_SHIFT 7 8462306a36Sopenharmony_ci#define CS4234_MUTE_ADC3_MASK 0x40 8562306a36Sopenharmony_ci#define CS4234_MUTE_ADC3_SHIFT 6 8662306a36Sopenharmony_ci#define CS4234_MUTE_ADC2_MASK 0x20 8762306a36Sopenharmony_ci#define CS4234_MUTE_ADC2_SHIFT 5 8862306a36Sopenharmony_ci#define CS4234_MUTE_ADC1_MASK 0x10 8962306a36Sopenharmony_ci#define CS4234_MUTE_ADC1_SHIFT 4 9062306a36Sopenharmony_ci#define CS4234_PDN_ADC4_MASK 0x08 9162306a36Sopenharmony_ci#define CS4234_PDN_ADC4_SHIFT 3 9262306a36Sopenharmony_ci#define CS4234_PDN_ADC3_MASK 0x04 9362306a36Sopenharmony_ci#define CS4234_PDN_ADC3_SHIFT 2 9462306a36Sopenharmony_ci#define CS4234_PDN_ADC2_MASK 0x02 9562306a36Sopenharmony_ci#define CS4234_PDN_ADC2_SHIFT 1 9662306a36Sopenharmony_ci#define CS4234_PDN_ADC1_MASK 0x01 9762306a36Sopenharmony_ci#define CS4234_PDN_ADC1_SHIFT 0 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci#define CS4234_LOW_LAT_CTRL1 0x11 10062306a36Sopenharmony_ci#define CS4234_LL_NG_MASK 0xE0 10162306a36Sopenharmony_ci#define CS4234_LL_NG_SHIFT 5 10262306a36Sopenharmony_ci#define CS4234_INV_LL_MASK 0x0F 10362306a36Sopenharmony_ci#define CS4234_INV_LL4_MASK 0x08 10462306a36Sopenharmony_ci#define CS4234_INV_LL4_SHIFT 3 10562306a36Sopenharmony_ci#define CS4234_INV_LL3_MASK 0x04 10662306a36Sopenharmony_ci#define CS4234_INV_LL3_SHIFT 2 10762306a36Sopenharmony_ci#define CS4234_INV_LL2_MASK 0x02 10862306a36Sopenharmony_ci#define CS4234_INV_LL2_SHIFT 1 10962306a36Sopenharmony_ci#define CS4234_INV_LL1_MASK 0x01 11062306a36Sopenharmony_ci#define CS4234_INV_LL1_SHIFT 0 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci#define CS4234_DAC_CTRL1 0x12 11362306a36Sopenharmony_ci#define CS4234_DAC14_NG_MASK 0xE0 11462306a36Sopenharmony_ci#define CS4234_DAC14_NG_SHIFT 5 11562306a36Sopenharmony_ci#define CS4234_DAC14_DE_MASK 0x10 11662306a36Sopenharmony_ci#define CS4234_DAC14_DE_SHIFT 4 11762306a36Sopenharmony_ci#define CS4234_DAC5_DE_MASK 0x08 11862306a36Sopenharmony_ci#define CS4234_DAC5_DE_SHIFT 3 11962306a36Sopenharmony_ci#define CS4234_DAC5_MVC_MASK 0x04 12062306a36Sopenharmony_ci#define CS4234_DAC5_MVC_SHIFT 2 12162306a36Sopenharmony_ci#define CS4234_DAC5_CFG_FLTR_MASK 0x03 12262306a36Sopenharmony_ci#define CS4234_DAC5_CFG_FLTR_SHIFT 0 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci#define CS4234_DAC_CTRL2 0x13 12562306a36Sopenharmony_ci#define CS4234_DAC5_NG_MASK 0xE0 12662306a36Sopenharmony_ci#define CS4234_DAC5_NG_SHIFT 5 12762306a36Sopenharmony_ci#define CS4234_INV_DAC_MASK 0x1F 12862306a36Sopenharmony_ci#define CS4234_INV_DAC5_MASK 0x10 12962306a36Sopenharmony_ci#define CS4234_INV_DAC5_SHIFT 4 13062306a36Sopenharmony_ci#define CS4234_INV_DAC4_MASK 0x08 13162306a36Sopenharmony_ci#define CS4234_INV_DAC4_SHIFT 3 13262306a36Sopenharmony_ci#define CS4234_INV_DAC3_MASK 0x04 13362306a36Sopenharmony_ci#define CS4234_INV_DAC3_SHIFT 2 13462306a36Sopenharmony_ci#define CS4234_INV_DAC2_MASK 0x02 13562306a36Sopenharmony_ci#define CS4234_INV_DAC2_SHIFT 1 13662306a36Sopenharmony_ci#define CS4234_INV_DAC1_MASK 0x01 13762306a36Sopenharmony_ci#define CS4234_INV_DAC1_SHIFT 0 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci#define CS4234_DAC_CTRL3 0x14 14062306a36Sopenharmony_ci#define CS4234_DAC5_ATT_MASK 0x80 14162306a36Sopenharmony_ci#define CS4234_DAC5_ATT_SHIFT 7 14262306a36Sopenharmony_ci#define CS4234_DAC14_ATT_MASK 0x40 14362306a36Sopenharmony_ci#define CS4234_DAC14_ATT_SHIFT 6 14462306a36Sopenharmony_ci#define CS4234_MUTE_LL_MASK 0x20 14562306a36Sopenharmony_ci#define CS4234_MUTE_LL_SHIFT 5 14662306a36Sopenharmony_ci#define CS4234_MUTE_DAC5_MASK 0x10 14762306a36Sopenharmony_ci#define CS4234_MUTE_DAC5_SHIFT 4 14862306a36Sopenharmony_ci#define CS4234_MUTE_DAC4_MASK 0x08 14962306a36Sopenharmony_ci#define CS4234_MUTE_DAC4_SHIFT 3 15062306a36Sopenharmony_ci#define CS4234_MUTE_DAC3_MASK 0x04 15162306a36Sopenharmony_ci#define CS4234_MUTE_DAC3_SHIFT 2 15262306a36Sopenharmony_ci#define CS4234_MUTE_DAC2_MASK 0x02 15362306a36Sopenharmony_ci#define CS4234_MUTE_DAC2_SHIFT 1 15462306a36Sopenharmony_ci#define CS4234_MUTE_DAC1_MASK 0x01 15562306a36Sopenharmony_ci#define CS4234_MUTE_DAC1_SHIFT 0 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci#define CS4234_DAC_CTRL4 0x15 15862306a36Sopenharmony_ci#define CS4234_VQ_RAMP_MASK 0x80 15962306a36Sopenharmony_ci#define CS4234_VQ_RAMP_SHIFT 7 16062306a36Sopenharmony_ci#define CS4234_TPS_GAIN_MASK 0x40 16162306a36Sopenharmony_ci#define CS4234_TPS_GAIN_SHIFT 6 16262306a36Sopenharmony_ci#define CS4234_PDN_DAC5_MASK 0x10 16362306a36Sopenharmony_ci#define CS4234_PDN_DAC5_SHIFT 4 16462306a36Sopenharmony_ci#define CS4234_PDN_DAC4_MASK 0x08 16562306a36Sopenharmony_ci#define CS4234_PDN_DAC4_SHIFT 3 16662306a36Sopenharmony_ci#define CS4234_PDN_DAC3_MASK 0x04 16762306a36Sopenharmony_ci#define CS4234_PDN_DAC3_SHIFT 2 16862306a36Sopenharmony_ci#define CS4234_PDN_DAC2_MASK 0x02 16962306a36Sopenharmony_ci#define CS4234_PDN_DAC2_SHIFT 1 17062306a36Sopenharmony_ci#define CS4234_PDN_DAC1_MASK 0x01 17162306a36Sopenharmony_ci#define CS4234_PDN_DAC1_SHIFT 0 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci#define CS4234_VOLUME_MODE 0x16 17462306a36Sopenharmony_ci#define CS4234_MUTE_DELAY_MASK 0xC0 17562306a36Sopenharmony_ci#define CS4234_MUTE_DELAY_SHIFT 6 17662306a36Sopenharmony_ci#define CS4234_MIN_DELAY_MASK 0x38 17762306a36Sopenharmony_ci#define CS4234_MIN_DELAY_SHIFT 3 17862306a36Sopenharmony_ci#define CS4234_MAX_DELAY_MASK 0x07 17962306a36Sopenharmony_ci#define CS4234_MAX_DELAY_SHIFT 0 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci#define CS4234_MASTER_VOL 0x17 18262306a36Sopenharmony_ci#define CS4234_DAC1_VOL 0x18 18362306a36Sopenharmony_ci#define CS4234_DAC2_VOL 0x19 18462306a36Sopenharmony_ci#define CS4234_DAC3_VOL 0x1A 18562306a36Sopenharmony_ci#define CS4234_DAC4_VOL 0x1B 18662306a36Sopenharmony_ci#define CS4234_DAC5_VOL 0x1C 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci#define CS4234_INT_CTRL 0x1E 18962306a36Sopenharmony_ci#define CS4234_INT_MODE_MASK 0x80 19062306a36Sopenharmony_ci#define CS4234_INT_MODE_SHIFT 7 19162306a36Sopenharmony_ci#define CS4234_INT_PIN_MASK 0x60 19262306a36Sopenharmony_ci#define CS4234_INT_PIN_SHIFT 5 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci#define CS4234_INT_MASK1 0x1F 19562306a36Sopenharmony_ci#define CS4234_MSK_TST_MODE_MASK 0x80 19662306a36Sopenharmony_ci#define CS4234_MSK_TST_MODE_ERR_SHIFT 7 19762306a36Sopenharmony_ci#define CS4234_MSK_SP_ERR_MASK 0x40 19862306a36Sopenharmony_ci#define CS4234_MSK_SP_ERR_SHIFT 6 19962306a36Sopenharmony_ci#define CS4234_MSK_CLK_ERR_MASK 0x08 20062306a36Sopenharmony_ci#define CS4234_MSK_CLK_ERR_SHIFT 5 20162306a36Sopenharmony_ci#define CS4234_MSK_ADC4_OVFL_MASK 0x08 20262306a36Sopenharmony_ci#define CS4234_MSK_ADC4_OVFL_SHIFT 3 20362306a36Sopenharmony_ci#define CS4234_MSK_ADC3_OVFL_MASK 0x04 20462306a36Sopenharmony_ci#define CS4234_MSK_ADC3_OVFL_SHIFT 2 20562306a36Sopenharmony_ci#define CS4234_MSK_ADC2_OVFL_MASK 0x02 20662306a36Sopenharmony_ci#define CS4234_MSK_ADC2_OVFL_SHIFT 1 20762306a36Sopenharmony_ci#define CS4234_MSK_ADC1_OVFL_MASK 0x01 20862306a36Sopenharmony_ci#define CS4234_MSK_ADC1_OVFL_SHIFT 0 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci#define CS4234_INT_MASK2 0x20 21162306a36Sopenharmony_ci#define CS4234_MSK_DAC5_CLIP_MASK 0x10 21262306a36Sopenharmony_ci#define CS4234_MSK_DAC5_CLIP_SHIFT 4 21362306a36Sopenharmony_ci#define CS4234_MSK_DAC4_CLIP_MASK 0x08 21462306a36Sopenharmony_ci#define CS4234_MSK_DAC4_CLIP_SHIFT 3 21562306a36Sopenharmony_ci#define CS4234_MSK_DAC3_CLIP_MASK 0x04 21662306a36Sopenharmony_ci#define CS4234_MSK_DAC3_CLIP_SHIFT 2 21762306a36Sopenharmony_ci#define CS4234_MSK_DAC2_CLIP_MASK 0x02 21862306a36Sopenharmony_ci#define CS4234_MSK_DAC2_CLIP_SHIFT 1 21962306a36Sopenharmony_ci#define CS4234_MSK_DAC1_CLIP_MASK 0x01 22062306a36Sopenharmony_ci#define CS4234_MSK_DAC1_CLIP_SHIFT 0 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci#define CS4234_INT_NOTIFY1 0x21 22362306a36Sopenharmony_ci#define CS4234_TST_MODE_MASK 0x80 22462306a36Sopenharmony_ci#define CS4234_TST_MODE_SHIFT 7 22562306a36Sopenharmony_ci#define CS4234_SP_ERR_MASK 0x40 22662306a36Sopenharmony_ci#define CS4234_SP_ERR_SHIFT 6 22762306a36Sopenharmony_ci#define CS4234_CLK_MOD_ERR_MASK 0x08 22862306a36Sopenharmony_ci#define CS4234_CLK_MOD_ERR_SHIFT 5 22962306a36Sopenharmony_ci#define CS4234_ADC4_OVFL_MASK 0x08 23062306a36Sopenharmony_ci#define CS4234_ADC4_OVFL_SHIFT 3 23162306a36Sopenharmony_ci#define CS4234_ADC3_OVFL_MASK 0x04 23262306a36Sopenharmony_ci#define CS4234_ADC3_OVFL_SHIFT 2 23362306a36Sopenharmony_ci#define CS4234_ADC2_OVFL_MASK 0x02 23462306a36Sopenharmony_ci#define CS4234_ADC2_OVFL_SHIFT 1 23562306a36Sopenharmony_ci#define CS4234_ADC1_OVFL_MASK 0x01 23662306a36Sopenharmony_ci#define CS4234_ADC1_OVFL_SHIFT 0 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci#define CS4234_INT_NOTIFY2 0x22 23962306a36Sopenharmony_ci#define CS4234_DAC5_CLIP_MASK 0x10 24062306a36Sopenharmony_ci#define CS4234_DAC5_CLIP_SHIFT 4 24162306a36Sopenharmony_ci#define CS4234_DAC4_CLIP_MASK 0x08 24262306a36Sopenharmony_ci#define CS4234_DAC4_CLIP_SHIFT 3 24362306a36Sopenharmony_ci#define CS4234_DAC3_CLIP_MASK 0x04 24462306a36Sopenharmony_ci#define CS4234_DAC3_CLIP_SHIFT 2 24562306a36Sopenharmony_ci#define CS4234_DAC2_CLIP_MASK 0x02 24662306a36Sopenharmony_ci#define CS4234_DAC2_CLIP_SHIFT 1 24762306a36Sopenharmony_ci#define CS4234_DAC1_CLIP_MASK 0x01 24862306a36Sopenharmony_ci#define CS4234_DAC1_CLIP_SHIFT 0 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci#define CS4234_MAX_REGISTER CS4234_INT_NOTIFY2 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ci#define CS4234_SUPPORTED_ID 0x423400 25362306a36Sopenharmony_ci#define CS4234_BOOT_TIME_US 3000 25462306a36Sopenharmony_ci#define CS4234_HOLD_RESET_TIME_US 1000 25562306a36Sopenharmony_ci#define CS4234_VQ_CHARGE_MS 1000 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci#define CS4234_PCM_RATES (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \ 25862306a36Sopenharmony_ci SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_64000 | \ 25962306a36Sopenharmony_ci SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000) 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci#define CS4234_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE | \ 26262306a36Sopenharmony_ci SNDRV_PCM_FMTBIT_S20_LE | SNDRV_PCM_FMTBIT_S24_LE | \ 26362306a36Sopenharmony_ci SNDRV_PCM_FMTBIT_S24_3LE) 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_cienum cs4234_supplies { 26662306a36Sopenharmony_ci CS4234_SUPPLY_VA = 0, 26762306a36Sopenharmony_ci CS4234_SUPPLY_VL, 26862306a36Sopenharmony_ci}; 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_cienum cs4234_va_sel { 27162306a36Sopenharmony_ci CS4234_3V3 = 0, 27262306a36Sopenharmony_ci CS4234_5V, 27362306a36Sopenharmony_ci}; 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_cienum cs4234_sp_format { 27662306a36Sopenharmony_ci CS4234_LEFT_J = 0, 27762306a36Sopenharmony_ci CS4234_I2S, 27862306a36Sopenharmony_ci CS4234_TDM, 27962306a36Sopenharmony_ci}; 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_cienum cs4234_base_rate_advisory { 28262306a36Sopenharmony_ci CS4234_48K = 0, 28362306a36Sopenharmony_ci CS4234_44K1, 28462306a36Sopenharmony_ci CS4234_32K, 28562306a36Sopenharmony_ci}; 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci#endif 288