Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.10.11.
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Copyright (C) The Asahi Linux Contributors
  4 *
  5 * Based on sound/soc/codecs/cs42l42.h
  6 *
  7 * Copyright 2016 Cirrus Logic, Inc.
  8 */
  9
 10
 11#ifndef __CS42L84_H__
 12#define __CS42L84_H__
 13
 14#include <linux/bits.h>
 15
 16#define CS42L84_CHIP_ID				0x42a84
 17
 18#define CS42L84_DEVID				0x0000
 19#define CS42L84_REVID				0x73fe
 20#define CS42L84_FRZ_CTL				0x0006
 21#define CS42L84_FRZ_CTL_ENGAGE			BIT(0)
 22
 23#define CS42L84_TSRS_PLUG_INT_STATUS		0x0400
 24#define CS42L84_TSRS_PLUG_INT_MASK		0x0418
 25#define CS42L84_RS_PLUG_SHIFT			0
 26#define CS42L84_RS_PLUG				BIT(0)
 27#define CS42L84_RS_UNPLUG			BIT(1)
 28#define CS42L84_TS_PLUG_SHIFT			2
 29#define CS42L84_TS_PLUG				BIT(2)
 30#define CS42L84_TS_UNPLUG			BIT(3)
 31#define CS42L84_TSRS_PLUG_VAL_MASK		GENMASK(3, 0)
 32#define CS42L84_PLL_LOCK_STATUS			0x040e // probably bit 0x10
 33#define CS42L84_PLL_LOCK_STATUS_LOCKED		BIT(4)
 34#define CS42L84_PLL_LOCK_STATUS_ERROR		BIT(5)
 35
 36#define CS42L84_PLUG				3
 37#define CS42L84_UNPLUG				0
 38#define CS42L84_TRANS				1
 39
 40#define CS42L84_CCM_CTL1			0x0600
 41#define CS42L84_CCM_CTL1_MCLK_SRC		GENMASK(1, 0)
 42#define CS42L84_CCM_CTL1_MCLK_SRC_RCO		0
 43#define CS42L84_CCM_CTL1_MCLK_SRC_MCLK		1
 44#define CS42L84_CCM_CTL1_MCLK_SRC_BCLK		2
 45#define CS42L84_CCM_CTL1_MCLK_SRC_PLL		3
 46#define CS42L84_CCM_CTL1_MCLK_FREQ		GENMASK(3, 2)
 47#define CS42L84_CCM_CTL1_MCLK_F_12MHZ		0b00
 48#define CS42L84_CCM_CTL1_MCLK_F_24MHZ		0b01
 49#define CS42L84_CCM_CTL1_MCLK_F_12_288KHZ	0b10
 50#define CS42L84_CCM_CTL1_MCLK_F_24_576KHZ	0b11
 51#define CS42L84_CCM_CTL1_RCO \
 52	(FIELD_PREP(CS42L84_CCM_CTL1_MCLK_SRC, CS42L84_CCM_CTL1_MCLK_SRC_RCO) \
 53	| FIELD_PREP(CS42L84_CCM_CTL1_MCLK_FREQ, CS42L84_CCM_CTL1_MCLK_F_12MHZ))
 54
 55#define CS42L84_CCM_SAMP_RATE			0x0601
 56#define CS42L84_CCM_SAMP_RATE_RATE_48KHZ	4
 57#define CS42L84_CCM_SAMP_RATE_RATE_96KHZ	5
 58#define CS42L84_CCM_SAMP_RATE_RATE_192KHZ	6
 59#define CS42L84_CCM_SAMP_RATE_RATE_44K1HZ	12
 60#define CS42L84_CCM_SAMP_RATE_RATE_88K2HZ	13
 61#define CS42L84_CCM_SAMP_RATE_RATE_176K4HZ	14
 62#define CS42L84_CCM_CTL3			0x0602
 63#define CS42L84_CCM_CTL3_REFCLK_DIV		GENMASK(2, 1)
 64#define CS42L84_CCM_CTL4			0x0603
 65#define CS42L84_CCM_CTL4_REFCLK_EN		BIT(0)
 66
 67#define CS42L84_CCM_ASP_CLK_CTRL		0x0608
 68
 69#define CS42L84_PLL_CTL1			0x0800
 70#define CS42L84_PLL_CTL1_EN			BIT(0)
 71#define CS42L84_PLL_CTL1_MODE			GENMASK(2, 1)
 72#define CS42L84_PLL_DIV_FRAC0			0x0804
 73#define CS42L84_PLL_DIV_FRAC1			0x0805
 74#define CS42L84_PLL_DIV_FRAC2			0x0806
 75#define CS42L84_PLL_DIV_INT			0x0807
 76#define CS42L84_PLL_DIVOUT			0x0808
 77
 78#define CS42L84_RING_SENSE_CTL			0x1282
 79#define CS42L84_RING_SENSE_CTL_INV		BIT(7)
 80#define CS42L84_RING_SENSE_CTL_UNK1		BIT(6)
 81#define CS42L84_RING_SENSE_CTL_FALLTIME		GENMASK(5, 3)
 82#define CS42L84_RING_SENSE_CTL_RISETIME		GENMASK(2, 0)
 83#define CS42L84_TIP_SENSE_CTL			0x1283
 84#define CS42L84_TIP_SENSE_CTL_INV		BIT(7)
 85#define CS42L84_TIP_SENSE_CTL_FALLTIME		GENMASK(5, 3)
 86#define CS42L84_TIP_SENSE_CTL_RISETIME		GENMASK(2, 0)
 87
 88#define CS42L84_TSRS_PLUG_STATUS		0x1288
 89
 90#define CS42L84_TIP_SENSE_CTL2			0x1473
 91#define CS42L84_TIP_SENSE_CTL2_MODE		GENMASK(7, 6)
 92#define CS42L84_TIP_SENSE_CTL2_MODE_DISABLED	0b00
 93#define CS42L84_TIP_SENSE_CTL2_MODE_DIG_INPUT	0b01
 94#define CS42L84_TIP_SENSE_CTL2_MODE_SHORT_DET	0b11
 95#define CS42L84_TIP_SENSE_CTL2_INV		BIT(5)
 96
 97#define CS42L84_MISC_DET_CTL			0x1474
 98#define CS42L84_MISC_DET_CTL_DETECT_MODE	GENMASK(4, 3)
 99#define CS42L84_MISC_DET_CTL_HSBIAS_CTL		GENMASK(2, 1)
100#define CS42L84_MISC_DET_CTL_PDN_MIC_LVL_DET	BIT(0)
101
102#define CS42L84_MIC_DET_CTL1			0x1475
103#define CS42L84_MIC_DET_CTL1_HS_DET_LEVEL	GENMASK(5, 0)
104
105#define CS42L84_MIC_DET_CTL4			0x1477
106#define CS42L84_MIC_DET_CTL4_LATCH_TO_VP	BIT(1)
107
108#define CS42L84_HS_DET_STATUS2			0x147d
109
110#define CS42L84_MSM_BLOCK_EN1			0x1800
111#define CS42L84_MSM_BLOCK_EN2			0x1801
112#define CS42L84_MSM_BLOCK_EN2_ASP_SHIFT		6
113#define CS42L84_MSM_BLOCK_EN2_BUS_SHIFT		5
114#define CS42L84_MSM_BLOCK_EN2_DAC_SHIFT		4
115#define CS42L84_MSM_BLOCK_EN2_ADC_SHIFT		3
116#define CS42L84_MSM_BLOCK_EN3			0x1802
117#define CS42L84_MSM_BLOCK_EN3_TR_SENSE		BIT(3)
118
119#define CS42L84_HS_DET_CTL2			0x1811
120#define CS42L84_HS_DET_CTL2_CTL			GENMASK(7, 6)
121#define CS42L84_HS_DET_CTL2_SET			GENMASK(5, 4)
122#define CS42L84_HS_DET_CTL2_REF			BIT(3)
123#define CS42L84_HS_DET_CTL2_AUTO_TIME		GENMASK(1, 0)
124
125#define CS42L84_HS_SWITCH_CTL			0x1812
126#define CS42L84_HS_SWITCH_CTL_REF_HS3		BIT(7)
127#define CS42L84_HS_SWITCH_CTL_REF_HS4		BIT(6)
128#define CS42L84_HS_SWITCH_CTL_HSB_FILT_HS3	BIT(5)
129#define CS42L84_HS_SWITCH_CTL_HSB_FILT_HS4	BIT(4)
130#define CS42L84_HS_SWITCH_CTL_HSB_HS3		BIT(3)
131#define CS42L84_HS_SWITCH_CTL_HSB_HS4		BIT(2)
132#define CS42L84_HS_SWITCH_CTL_GNDHS_HS3		BIT(1)
133#define CS42L84_HS_SWITCH_CTL_GNDHS_HS4		BIT(0)
134
135#define CS42L84_HS_CLAMP_DISABLE		0x1813
136
137#define CS42L84_ADC_CTL1			0x2000
138#define CS42L84_ADC_CTL1_PREAMP_GAIN_SHIFT	6
139#define CS42L84_ADC_CTL1_PGA_GAIN_SHIFT		0
140#define CS42L84_ADC_CTL4			0x2003
141#define CS42L84_ADC_CTL4_WNF_CF_SHIFT		4
142#define CS42L84_ADC_CTL4_WNF_EN_SHIFT		3
143#define CS42L84_ADC_CTL4_HPF_CF_SHIFT		1
144#define CS42L84_ADC_CTL4_HPF_EN_SHIFT		0
145
146#define CS42L84_DAC_CTL1			0x3000
147#define CS42L84_DAC_CTL1_UNMUTE			BIT(0)
148//#define CS42L84_DAC_CTL1_DACB_INV_SHIFT 1
149//#define CS42L84_DAC_CTL1_DACA_INV_SHIFT 0
150#define CS42L84_DAC_CTL2			0x3001
151
152#define CS42L84_DAC_CHA_VOL_LSB			0x3004
153#define CS42L84_DAC_CHA_VOL_MSB			0x3005
154#define CS42L84_DAC_CHB_VOL_LSB			0x3006
155#define CS42L84_DAC_CHB_VOL_MSB			0x3007
156#define CS42L84_HP_VOL_CTL			0x3020
157#define CS42L84_HP_VOL_CTL_ZERO_CROSS		BIT(1)
158#define CS42L84_HP_VOL_CTL_SOFT			BIT(0)
159
160#define CS42L84_SRC_ASP_RX_CH1			0b1101
161#define CS42L84_SRC_ASP_RX_CH2			0b1110
162
163#define CS42L84_BUS_ASP_TX_SRC                  0x4000
164#define CS42L84_BUS_ASP_TX_SRC_CH1_SHIFT        0
165#define CS42L84_BUS_DAC_SRC			0x4001
166#define CS42L84_BUS_DAC_SRC_DACA_SHIFT		0
167#define CS42L84_BUS_DAC_SRC_DACB_SHIFT		4
168
169#define CS42L84_ASP_CTL				0x5000
170#define CS42L84_ASP_CTL_BCLK_EN_SHIFT		1
171#define CS42L84_ASP_CTL_TDM_MODE		BIT(2)
172#define CS42L84_ASP_FSYNC_CTL2			0x5010
173#define CS42L84_ASP_FSYNC_CTL2_BCLK_PERIOD_LO	GENMASK(7, 1)
174#define CS42L84_ASP_FSYNC_CTL3			0x5011
175#define CS42L84_ASP_FSYNC_CTL3_BCLK_PERIOD_HI	GENMASK(4, 0)
176#define CS42L84_ASP_DATA_CTL			0x5018
177
178#define CS42L84_ASP_RX_EN			0x5020
179#define CS42L84_ASP_RX_EN_CH1_SHIFT		0
180#define CS42L84_ASP_RX_EN_CH2_SHIFT		1
181#define CS42L84_ASP_TX_EN			0x5024
182#define CS42L84_ASP_TX_EN_CH1_SHIFT             0
183
184#define CS42L84_ASP_RX_CH1_CTL1			0x5028
185#define CS42L84_ASP_RX_CH1_CTL2			0x5029
186#define CS42L84_ASP_RX_CH1_WIDTH		0x502a
187#define CS42L84_ASP_RX_CH2_CTL1			0x502c
188#define CS42L84_ASP_RX_CH2_CTL2			0x502d
189#define CS42L84_ASP_RX_CH2_WIDTH		0x502e
190
191#define CS42L84_ASP_RX_CHx_CTL1_EDGE		BIT(0)
192#define CS42L84_ASP_RX_CHx_CTL1_SLOT_START_LSB	GENMASK(7, 1)
193#define CS42L84_ASP_RX_CHx_CTL2_SLOT_START_MSB	GENMASK(2, 0)
194
195#define CS42L84_ASP_TX_CH1_CTL1			0x5068
196#define CS42L84_ASP_TX_CH1_CTL2			0x5069
197#define CS42L84_ASP_TX_CH1_WIDTH		0x506a
198#define CS42L84_ASP_TX_CH2_CTL1			0x506c
199#define CS42L84_ASP_TX_CH2_CTL2			0x506d
200#define CS42L84_ASP_TX_CH2_WIDTH		0x506e
201
202#define CS42L84_DEBOUNCE_TIME_125MS		0b001
203#define CS42L84_DEBOUNCE_TIME_500MS		0b011
204
205#define CS42L84_BOOT_TIME_US			3000
206#define CS42L84_CLOCK_SWITCH_DELAY_US		150
207#define CS42L84_PLL_LOCK_POLL_US		250
208#define CS42L84_PLL_LOCK_TIMEOUT_US		1250
209
210#endif /* __CS42L84_H__ */