162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * NXP AUDMIX ALSA SoC Digital Audio Interface (DAI) driver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright 2017 NXP
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __FSL_AUDMIX_H
962306a36Sopenharmony_ci#define __FSL_AUDMIX_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#define FSL_AUDMIX_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
1262306a36Sopenharmony_ci			SNDRV_PCM_FMTBIT_S24_LE |\
1362306a36Sopenharmony_ci			SNDRV_PCM_FMTBIT_S32_LE)
1462306a36Sopenharmony_ci/* AUDMIX Registers */
1562306a36Sopenharmony_ci#define FSL_AUDMIX_CTR		0x200 /* Control */
1662306a36Sopenharmony_ci#define FSL_AUDMIX_STR		0x204 /* Status */
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define FSL_AUDMIX_ATCR0	0x208 /* Attenuation Control */
1962306a36Sopenharmony_ci#define FSL_AUDMIX_ATIVAL0	0x20c /* Attenuation Initial Value */
2062306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTPUP0	0x210 /* Attenuation step up factor */
2162306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTPDN0	0x214 /* Attenuation step down factor */
2262306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTPTGT0	0x218 /* Attenuation step target */
2362306a36Sopenharmony_ci#define FSL_AUDMIX_ATTNVAL0	0x21c /* Attenuation Value */
2462306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTP0	0x220 /* Attenuation step number */
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#define FSL_AUDMIX_ATCR1	0x228 /* Attenuation Control */
2762306a36Sopenharmony_ci#define FSL_AUDMIX_ATIVAL1	0x22c /* Attenuation Initial Value */
2862306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTPUP1	0x230 /* Attenuation step up factor */
2962306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTPDN1	0x234 /* Attenuation step down factor */
3062306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTPTGT1	0x238 /* Attenuation step target */
3162306a36Sopenharmony_ci#define FSL_AUDMIX_ATTNVAL1	0x23c /* Attenuation Value */
3262306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTP1	0x240 /* Attenuation step number */
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci/* AUDMIX Control Register */
3562306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_MIXCLK_SHIFT	0
3662306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_MIXCLK_MASK	BIT(FSL_AUDMIX_CTR_MIXCLK_SHIFT)
3762306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_MIXCLK(i)	((i) << FSL_AUDMIX_CTR_MIXCLK_SHIFT)
3862306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_OUTSRC_SHIFT	1
3962306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_OUTSRC_MASK	(0x3 << FSL_AUDMIX_CTR_OUTSRC_SHIFT)
4062306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_OUTSRC(i)	(((i) << FSL_AUDMIX_CTR_OUTSRC_SHIFT)\
4162306a36Sopenharmony_ci					      & FSL_AUDMIX_CTR_OUTSRC_MASK)
4262306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_OUTWIDTH_SHIFT	3
4362306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_OUTWIDTH_MASK	(0x7 << FSL_AUDMIX_CTR_OUTWIDTH_SHIFT)
4462306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_OUTWIDTH(i)	(((i) << FSL_AUDMIX_CTR_OUTWIDTH_SHIFT)\
4562306a36Sopenharmony_ci					      & FSL_AUDMIX_CTR_OUTWIDTH_MASK)
4662306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_OUTCKPOL_SHIFT	6
4762306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_OUTCKPOL_MASK	BIT(FSL_AUDMIX_CTR_OUTCKPOL_SHIFT)
4862306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_OUTCKPOL(i)	((i) << FSL_AUDMIX_CTR_OUTCKPOL_SHIFT)
4962306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_MASKRTDF_SHIFT	7
5062306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_MASKRTDF_MASK	BIT(FSL_AUDMIX_CTR_MASKRTDF_SHIFT)
5162306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_MASKRTDF(i)	((i) << FSL_AUDMIX_CTR_MASKRTDF_SHIFT)
5262306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_MASKCKDF_SHIFT	8
5362306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_MASKCKDF_MASK	BIT(FSL_AUDMIX_CTR_MASKCKDF_SHIFT)
5462306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_MASKCKDF(i)	((i) << FSL_AUDMIX_CTR_MASKCKDF_SHIFT)
5562306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_SYNCMODE_SHIFT	9
5662306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_SYNCMODE_MASK	BIT(FSL_AUDMIX_CTR_SYNCMODE_SHIFT)
5762306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_SYNCMODE(i)	((i) << FSL_AUDMIX_CTR_SYNCMODE_SHIFT)
5862306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_SYNCSRC_SHIFT	10
5962306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_SYNCSRC_MASK	BIT(FSL_AUDMIX_CTR_SYNCSRC_SHIFT)
6062306a36Sopenharmony_ci#define FSL_AUDMIX_CTR_SYNCSRC(i)	((i) << FSL_AUDMIX_CTR_SYNCSRC_SHIFT)
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci/* AUDMIX Status Register */
6362306a36Sopenharmony_ci#define FSL_AUDMIX_STR_RATEDIFF		BIT(0)
6462306a36Sopenharmony_ci#define FSL_AUDMIX_STR_CLKDIFF		BIT(1)
6562306a36Sopenharmony_ci#define FSL_AUDMIX_STR_MIXSTAT_SHIFT	2
6662306a36Sopenharmony_ci#define FSL_AUDMIX_STR_MIXSTAT_MASK	(0x3 << FSL_AUDMIX_STR_MIXSTAT_SHIFT)
6762306a36Sopenharmony_ci#define FSL_AUDMIX_STR_MIXSTAT(i)	(((i) & FSL_AUDMIX_STR_MIXSTAT_MASK) \
6862306a36Sopenharmony_ci					   >> FSL_AUDMIX_STR_MIXSTAT_SHIFT)
6962306a36Sopenharmony_ci/* AUDMIX Attenuation Control Register */
7062306a36Sopenharmony_ci#define FSL_AUDMIX_ATCR_AT_EN		BIT(0)
7162306a36Sopenharmony_ci#define FSL_AUDMIX_ATCR_AT_UPDN		BIT(1)
7262306a36Sopenharmony_ci#define FSL_AUDMIX_ATCR_ATSTPDIF_SHIFT	2
7362306a36Sopenharmony_ci#define FSL_AUDMIX_ATCR_ATSTPDFI_MASK	\
7462306a36Sopenharmony_ci				(0xfff << FSL_AUDMIX_ATCR_ATSTPDIF_SHIFT)
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci/* AUDMIX Attenuation Initial Value Register */
7762306a36Sopenharmony_ci#define FSL_AUDMIX_ATIVAL_ATINVAL_MASK	0x3FFFF
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci/* AUDMIX Attenuation Step Up Factor Register */
8062306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTPUP_ATSTEPUP_MASK	0x3FFFF
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci/* AUDMIX Attenuation Step Down Factor Register */
8362306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTPDN_ATSTEPDN_MASK	0x3FFFF
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci/* AUDMIX Attenuation Step Target Register */
8662306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTPTGT_ATSTPTG_MASK	0x3FFFF
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci/* AUDMIX Attenuation Value Register */
8962306a36Sopenharmony_ci#define FSL_AUDMIX_ATTNVAL_ATCURVAL_MASK	0x3FFFF
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci/* AUDMIX Attenuation Step Number Register */
9262306a36Sopenharmony_ci#define FSL_AUDMIX_ATSTP_STPCTR_MASK	0x3FFFF
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci#define FSL_AUDMIX_MAX_DAIS		2
9562306a36Sopenharmony_cistruct fsl_audmix {
9662306a36Sopenharmony_ci	struct platform_device *pdev;
9762306a36Sopenharmony_ci	struct regmap *regmap;
9862306a36Sopenharmony_ci	struct clk *ipg_clk;
9962306a36Sopenharmony_ci	spinlock_t lock; /* Protect tdms */
10062306a36Sopenharmony_ci	u8 tdms;
10162306a36Sopenharmony_ci};
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci#endif /* __FSL_AUDMIX_H */
104