xref: /linux/sound/soc/codecs/ak4458.h (revision 08660086eff9e9e69246a65ee48aba5c3901bf5e)
1*08660086SCosmin-Gabriel Samoila // SPDX-License-Identifier: GPL-2.0
2*08660086SCosmin-Gabriel Samoila /*
3*08660086SCosmin-Gabriel Samoila  * Audio driver for AK4458
4*08660086SCosmin-Gabriel Samoila  *
5*08660086SCosmin-Gabriel Samoila  * Copyright (C) 2016 Asahi Kasei Microdevices Corporation
6*08660086SCosmin-Gabriel Samoila  * Copyright 2018 NXP
7*08660086SCosmin-Gabriel Samoila  */
8*08660086SCosmin-Gabriel Samoila 
9*08660086SCosmin-Gabriel Samoila #ifndef _AK4458_H
10*08660086SCosmin-Gabriel Samoila #define _AK4458_H
11*08660086SCosmin-Gabriel Samoila 
12*08660086SCosmin-Gabriel Samoila #include <linux/regmap.h>
13*08660086SCosmin-Gabriel Samoila 
14*08660086SCosmin-Gabriel Samoila /* Settings */
15*08660086SCosmin-Gabriel Samoila 
16*08660086SCosmin-Gabriel Samoila #define AK4458_00_CONTROL1			0x00
17*08660086SCosmin-Gabriel Samoila #define AK4458_01_CONTROL2			0x01
18*08660086SCosmin-Gabriel Samoila #define AK4458_02_CONTROL3			0x02
19*08660086SCosmin-Gabriel Samoila #define AK4458_03_LCHATT			0x03
20*08660086SCosmin-Gabriel Samoila #define AK4458_04_RCHATT			0x04
21*08660086SCosmin-Gabriel Samoila #define AK4458_05_CONTROL4			0x05
22*08660086SCosmin-Gabriel Samoila #define AK4458_06_DSD1				0x06
23*08660086SCosmin-Gabriel Samoila #define AK4458_07_CONTROL5			0x07
24*08660086SCosmin-Gabriel Samoila #define AK4458_08_SOUND_CONTROL			0x08
25*08660086SCosmin-Gabriel Samoila #define AK4458_09_DSD2				0x09
26*08660086SCosmin-Gabriel Samoila #define AK4458_0A_CONTROL6			0x0A
27*08660086SCosmin-Gabriel Samoila #define AK4458_0B_CONTROL7			0x0B
28*08660086SCosmin-Gabriel Samoila #define AK4458_0C_CONTROL8			0x0C
29*08660086SCosmin-Gabriel Samoila #define AK4458_0D_CONTROL9			0x0D
30*08660086SCosmin-Gabriel Samoila #define AK4458_0E_CONTROL10			0x0E
31*08660086SCosmin-Gabriel Samoila #define AK4458_0F_L2CHATT			0x0F
32*08660086SCosmin-Gabriel Samoila #define AK4458_10_R2CHATT			0x10
33*08660086SCosmin-Gabriel Samoila #define AK4458_11_L3CHATT			0x11
34*08660086SCosmin-Gabriel Samoila #define AK4458_12_R3CHATT			0x12
35*08660086SCosmin-Gabriel Samoila #define AK4458_13_L4CHATT			0x13
36*08660086SCosmin-Gabriel Samoila #define AK4458_14_R4CHATT			0x14
37*08660086SCosmin-Gabriel Samoila 
38*08660086SCosmin-Gabriel Samoila /* Bitfield Definitions */
39*08660086SCosmin-Gabriel Samoila 
40*08660086SCosmin-Gabriel Samoila /* AK4458_00_CONTROL1 (0x00) Fields
41*08660086SCosmin-Gabriel Samoila  * Addr Register Name  D7     D6    D5    D4    D3    D2    D1    D0
42*08660086SCosmin-Gabriel Samoila  * 00H  Control 1      ACKS   0     0     0     DIF2  DIF1  DIF0  RSTN
43*08660086SCosmin-Gabriel Samoila  */
44*08660086SCosmin-Gabriel Samoila 
45*08660086SCosmin-Gabriel Samoila /* Digital Filter (SD, SLOW, SSLOW) */
46*08660086SCosmin-Gabriel Samoila #define AK4458_SD_MASK		GENMASK(5, 5)
47*08660086SCosmin-Gabriel Samoila #define AK4458_SLOW_MASK	GENMASK(0, 0)
48*08660086SCosmin-Gabriel Samoila #define AK4458_SSLOW_MASK	GENMASK(0, 0)
49*08660086SCosmin-Gabriel Samoila 
50*08660086SCosmin-Gabriel Samoila /* DIF2	1 0
51*08660086SCosmin-Gabriel Samoila  *  x	1 0 MSB justified  Figure 3 (default)
52*08660086SCosmin-Gabriel Samoila  *  x	1 1 I2S Compliment  Figure 4
53*08660086SCosmin-Gabriel Samoila  */
54*08660086SCosmin-Gabriel Samoila #define AK4458_DIF_SHIFT	1
55*08660086SCosmin-Gabriel Samoila #define AK4458_DIF_MASK		GENMASK(3, 1)
56*08660086SCosmin-Gabriel Samoila 
57*08660086SCosmin-Gabriel Samoila #define AK4458_DIF_16BIT_LSB	(0 << 1)
58*08660086SCosmin-Gabriel Samoila #define AK4458_DIF_24BIT_I2S	(3 << 1)
59*08660086SCosmin-Gabriel Samoila #define AK4458_DIF_32BIT_LSB	(5 << 1)
60*08660086SCosmin-Gabriel Samoila #define AK4458_DIF_32BIT_MSB	(6 << 1)
61*08660086SCosmin-Gabriel Samoila #define AK4458_DIF_32BIT_I2S	(7 << 1)
62*08660086SCosmin-Gabriel Samoila 
63*08660086SCosmin-Gabriel Samoila /* AK4458_00_CONTROL1 (0x00) D0 bit */
64*08660086SCosmin-Gabriel Samoila #define AK4458_RSTN_MASK	GENMASK(0, 0)
65*08660086SCosmin-Gabriel Samoila #define AK4458_RSTN		(0x1 << 0)
66*08660086SCosmin-Gabriel Samoila 
67*08660086SCosmin-Gabriel Samoila /* AK4458_0A_CONTROL6 Mode bits */
68*08660086SCosmin-Gabriel Samoila #define AK4458_MODE_SHIFT	6
69*08660086SCosmin-Gabriel Samoila #define AK4458_MODE_MASK	GENMASK(7, 6)
70*08660086SCosmin-Gabriel Samoila #define AK4458_MODE_NORMAL	(0 << AK4458_MODE_SHIFT)
71*08660086SCosmin-Gabriel Samoila #define AK4458_MODE_TDM128	(1 << AK4458_MODE_SHIFT)
72*08660086SCosmin-Gabriel Samoila #define AK4458_MODE_TDM256	(2 << AK4458_MODE_SHIFT)
73*08660086SCosmin-Gabriel Samoila #define AK4458_MODE_TDM512	(3 << AK4458_MODE_SHIFT)
74*08660086SCosmin-Gabriel Samoila 
75*08660086SCosmin-Gabriel Samoila /* DAC Digital attenuator transition time setting
76*08660086SCosmin-Gabriel Samoila  * Table 19
77*08660086SCosmin-Gabriel Samoila  * Mode	ATS1	ATS2	ATT speed
78*08660086SCosmin-Gabriel Samoila  * 0	0	0	4080/fs
79*08660086SCosmin-Gabriel Samoila  * 1	0	1	2040/fs
80*08660086SCosmin-Gabriel Samoila  * 2	1	0	510/fs
81*08660086SCosmin-Gabriel Samoila  * 3	1	1	255/fs
82*08660086SCosmin-Gabriel Samoila  * */
83*08660086SCosmin-Gabriel Samoila #define AK4458_ATS_SHIFT	6
84*08660086SCosmin-Gabriel Samoila #define AK4458_ATS_MASK		GENMASK(7, 6)
85*08660086SCosmin-Gabriel Samoila 
86*08660086SCosmin-Gabriel Samoila #endif /* _AK4458_H */
87