summaryrefslogtreecommitdiff
path: root/include/linux/mfd/ac100.h
blob: 3c148f196b9fbce4b6b3bc07d6dcf0440ad9ccae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/*
 * Functions and registers to access AC100 codec / RTC combo IC.
 *
 * Copyright (C) 2016 Chen-Yu Tsai
 *
 * Chen-Yu Tsai <wens@csie.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __LINUX_MFD_AC100_H
#define __LINUX_MFD_AC100_H

#include <linux/regmap.h>

struct ac100_dev {
	struct device			*dev;
	struct regmap			*regmap;
};

/* Audio codec related registers */
#define AC100_CHIP_AUDIO_RST		0x00
#define AC100_PLL_CTRL1			0x01
#define AC100_PLL_CTRL2			0x02
#define AC100_SYSCLK_CTRL		0x03
#define AC100_MOD_CLK_ENA		0x04
#define AC100_MOD_RST_CTRL		0x05
#define AC100_I2S_SR_CTRL		0x06

/* I2S1 interface */
#define AC100_I2S1_CLK_CTRL		0x10
#define AC100_I2S1_SND_OUT_CTRL		0x11
#define AC100_I2S1_SND_IN_CTRL		0x12
#define AC100_I2S1_MXR_SRC		0x13
#define AC100_I2S1_VOL_CTRL1		0x14
#define AC100_I2S1_VOL_CTRL2		0x15
#define AC100_I2S1_VOL_CTRL3		0x16
#define AC100_I2S1_VOL_CTRL4		0x17
#define AC100_I2S1_MXR_GAIN		0x18

/* I2S2 interface */
#define AC100_I2S2_CLK_CTRL		0x20
#define AC100_I2S2_SND_OUT_CTRL		0x21
#define AC100_I2S2_SND_IN_CTRL		0x22
#define AC100_I2S2_MXR_SRC		0x23
#define AC100_I2S2_VOL_CTRL1		0x24
#define AC100_I2S2_VOL_CTRL2		0x25
#define AC100_I2S2_VOL_CTRL3		0x26
#define AC100_I2S2_VOL_CTRL4		0x27
#define AC100_I2S2_MXR_GAIN		0x28

/* I2S3 interface */
#define AC100_I2S3_CLK_CTRL		0x30
#define AC100_I2S3_SND_OUT_CTRL		0x31
#define AC100_I2S3_SND_IN_CTRL		0x32
#define AC100_I2S3_SIG_PATH_CTRL	0x33

/* ADC digital controls */
#define AC100_ADC_DIG_CTRL		0x40
#define AC100_ADC_VOL_CTRL		0x41

/* HMIC plug sensing / key detection */
#define AC100_HMIC_CTRL1		0x44
#define AC100_HMIC_CTRL2		0x45
#define AC100_HMIC_STATUS		0x46

/* DAC digital controls */
#define AC100_DAC_DIG_CTRL		0x48
#define AC100_DAC_VOL_CTRL		0x49
#define AC100_DAC_MXR_SRC		0x4c
#define AC100_DAC_MXR_GAIN		0x4d

/* Analog controls */
#define AC100_ADC_APC_CTRL		0x50
#define AC100_ADC_SRC			0x51
#define AC100_ADC_SRC_BST_CTRL		0x52
#define AC100_OUT_MXR_DAC_A_CTRL	0x53
#define AC100_OUT_MXR_SRC		0x54
#define AC100_OUT_MXR_SRC_BST		0x55
#define AC100_HPOUT_CTRL		0x56
#define AC100_ERPOUT_CTRL		0x57
#define AC100_SPKOUT_CTRL		0x58
#define AC100_LINEOUT_CTRL		0x59

/* ADC digital audio processing (high pass filter & auto gain control */
#define AC100_ADC_DAP_L_STA		0x80
#define AC100_ADC_DAP_R_STA		0x81
#define AC100_ADC_DAP_L_CTRL		0x82
#define AC100_ADC_DAP_R_CTRL		0x83
#define AC100_ADC_DAP_L_T_L		0x84 /* Left Target Level */
#define AC100_ADC_DAP_R_T_L		0x85 /* Right Target Level */
#define AC100_ADC_DAP_L_H_A_C		0x86 /* Left High Avg. Coef */
#define AC100_ADC_DAP_L_L_A_C		0x87 /* Left Low Avg. Coef */
#define AC100_ADC_DAP_R_H_A_C		0x88 /* Right High Avg. Coef */
#define AC100_ADC_DAP_R_L_A_C		0x89 /* Right Low Avg. Coef */
#define AC100_ADC_DAP_L_D_T		0x8a /* Left Decay Time */
#define AC100_ADC_DAP_L_A_T		0x8b /* Left Attack Time */
#define AC100_ADC_DAP_R_D_T		0x8c /* Right Decay Time */
#define AC100_ADC_DAP_R_A_T		0x8d /* Right Attack Time */
#define AC100_ADC_DAP_N_TH		0x8e /* Noise Threshold */
#define AC100_ADC_DAP_L_H_N_A_C		0x8f /* Left High Noise Avg. Coef */
#define AC100_ADC_DAP_L_L_N_A_C		0x90 /* Left Low Noise Avg. Coef */
#define AC100_ADC_DAP_R_H_N_A_C		0x91 /* Right High Noise Avg. Coef */
#define AC100_ADC_DAP_R_L_N_A_C		0x92 /* Right Low Noise Avg. Coef */
#define AC100_ADC_DAP_H_HPF_C		0x93 /* High High-Pass-Filter Coef */
#define AC100_ADC_DAP_L_HPF_C		0x94 /* Low High-Pass-Filter Coef */
#define AC100_ADC_DAP_OPT		0x95 /* AGC Optimum */

/* DAC digital audio processing (high pass filter & dynamic range control) */
#define AC100_DAC_DAP_CTRL		0xa0
#define AC100_DAC_DAP_H_HPF_C		0xa1 /* High High-Pass-Filter Coef */
#define AC100_DAC_DAP_L_HPF_C		0xa2 /* Low High-Pass-Filter Coef */
#define AC100_DAC_DAP_L_H_E_A_C		0xa3 /* Left High Energy Avg Coef */
#define AC100_DAC_DAP_L_L_E_A_C		0xa4 /* Left Low Energy Avg Coef */
#define AC100_DAC_DAP_R_H_E_A_C		0xa5 /* Right High Energy Avg Coef */
#define AC100_DAC_DAP_R_L_E_A_C		0xa6 /* Right Low Energy Avg Coef */
#define AC100_DAC_DAP_H_G_D_T_C		0xa7 /* High Gain Delay Time Coef */
#define AC100_DAC_DAP_L_G_D_T_C		0xa8 /* Low Gain Delay Time Coef */
#define AC100_DAC_DAP_H_G_A_T_C		0xa9 /* High Gain Attack Time Coef */
#define AC100_DAC_DAP_L_G_A_T_C		0xaa /* Low Gain Attack Time Coef */
#define AC100_DAC_DAP_H_E_TH		0xab /* High Energy Threshold */
#define AC100_DAC_DAP_L_E_TH		0xac /* Low Energy Threshold */
#define AC100_DAC_DAP_H_G_K		0xad /* High Gain K parameter */
#define AC100_DAC_DAP_L_G_K		0xae /* Low Gain K parameter */
#define AC100_DAC_DAP_H_G_OFF		0xaf /* High Gain offset */
#define AC100_DAC_DAP_L_G_OFF		0xb0 /* Low Gain offset */
#define AC100_DAC_DAP_OPT		0xb1 /* DRC optimum */

/* Digital audio processing enable */
#define AC100_ADC_DAP_ENA		0xb4
#define AC100_DAC_DAP_ENA		0xb5

/* SRC control */
#define AC100_SRC1_CTRL1		0xb8
#define AC100_SRC1_CTRL2		0xb9
#define AC100_SRC1_CTRL3		0xba
#define AC100_SRC1_CTRL4		0xbb
#define AC100_SRC2_CTRL1		0xbc
#define AC100_SRC2_CTRL2		0xbd
#define AC100_SRC2_CTRL3		0xbe
#define AC100_SRC2_CTRL4		0xbf

/* RTC clk control */
#define AC100_CLK32K_ANALOG_CTRL	0xc0
#define AC100_CLKOUT_CTRL1		0xc1
#define AC100_CLKOUT_CTRL2		0xc2
#define AC100_CLKOUT_CTRL3		0xc3

/* RTC module */
#define AC100_RTC_RST			0xc6
#define AC100_RTC_CTRL			0xc7
#define AC100_RTC_SEC			0xc8 /* second */
#define AC100_RTC_MIN			0xc9 /* minute */
#define AC100_RTC_HOU			0xca /* hour */
#define AC100_RTC_WEE			0xcb /* weekday */
#define AC100_RTC_DAY			0xcc /* day */
#define AC100_RTC_MON			0xcd /* month */
#define AC100_RTC_YEA			0xce /* year */
#define AC100_RTC_UPD			0xcf /* update trigger */

/* RTC alarm */
#define AC100_ALM_INT_ENA		0xd0
#define	AC100_ALM_INT_STA		0xd1
#define AC100_ALM_SEC			0xd8
#define AC100_ALM_MIN			0xd9
#define AC100_ALM_HOU			0xda
#define AC100_ALM_WEE			0xdb
#define AC100_ALM_DAY			0xdc
#define AC100_ALM_MON			0xdd
#define AC100_ALM_YEA			0xde
#define AC100_ALM_UPD			0xdf

/* RTC general purpose register 0 ~ 15 */
#define AC100_RTC_GP(x)			(0xe0 + (x))

#endif /* __LINUX_MFD_AC100_H */