1
2
3
4
5
6
7
8 #ifndef MADERA_CORE_H
9 #define MADERA_CORE_H
10
11 #include <linux/gpio/consumer.h>
12 #include <linux/interrupt.h>
13 #include <linux/mfd/madera/pdata.h>
14 #include <linux/mutex.h>
15 #include <linux/notifier.h>
16 #include <linux/regmap.h>
17 #include <linux/regulator/consumer.h>
18
19 enum madera_type {
20
21 CS47L35 = 1,
22 CS47L85 = 2,
23 CS47L90 = 3,
24 CS47L91 = 4,
25 CS47L92 = 5,
26 CS47L93 = 6,
27 WM1840 = 7,
28 CS47L15 = 8,
29 CS42L92 = 9,
30 };
31
32 #define MADERA_MAX_CORE_SUPPLIES 2
33 #define MADERA_MAX_GPIOS 40
34
35 #define CS47L15_NUM_GPIOS 15
36 #define CS47L35_NUM_GPIOS 16
37 #define CS47L85_NUM_GPIOS 40
38 #define CS47L90_NUM_GPIOS 38
39 #define CS47L92_NUM_GPIOS 16
40
41 #define MADERA_MAX_MICBIAS 4
42
43 #define MADERA_MAX_HP_OUTPUT 3
44
45
46 #define MADERA_NOTIFY_VOICE_TRIGGER 0x1
47 #define MADERA_NOTIFY_HPDET 0x2
48 #define MADERA_NOTIFY_MICDET 0x4
49
50
51 #define MADERA_GP_FN_ALTERNATE 0x00
52 #define MADERA_GP_FN_GPIO 0x01
53 #define MADERA_GP_FN_DSP_GPIO 0x02
54 #define MADERA_GP_FN_IRQ1 0x03
55 #define MADERA_GP_FN_IRQ2 0x04
56 #define MADERA_GP_FN_FLL1_CLOCK 0x10
57 #define MADERA_GP_FN_FLL2_CLOCK 0x11
58 #define MADERA_GP_FN_FLL3_CLOCK 0x12
59 #define MADERA_GP_FN_FLLAO_CLOCK 0x13
60 #define MADERA_GP_FN_FLL1_LOCK 0x18
61 #define MADERA_GP_FN_FLL2_LOCK 0x19
62 #define MADERA_GP_FN_FLL3_LOCK 0x1A
63 #define MADERA_GP_FN_FLLAO_LOCK 0x1B
64 #define MADERA_GP_FN_OPCLK_OUT 0x40
65 #define MADERA_GP_FN_OPCLK_ASYNC_OUT 0x41
66 #define MADERA_GP_FN_PWM1 0x48
67 #define MADERA_GP_FN_PWM2 0x49
68 #define MADERA_GP_FN_SPDIF_OUT 0x4C
69 #define MADERA_GP_FN_HEADPHONE_DET 0x50
70 #define MADERA_GP_FN_MIC_DET 0x58
71 #define MADERA_GP_FN_DRC1_SIGNAL_DETECT 0x80
72 #define MADERA_GP_FN_DRC2_SIGNAL_DETECT 0x81
73 #define MADERA_GP_FN_ASRC1_IN1_LOCK 0x88
74 #define MADERA_GP_FN_ASRC1_IN2_LOCK 0x89
75 #define MADERA_GP_FN_ASRC2_IN1_LOCK 0x8A
76 #define MADERA_GP_FN_ASRC2_IN2_LOCK 0x8B
77 #define MADERA_GP_FN_DSP_IRQ1 0xA0
78 #define MADERA_GP_FN_DSP_IRQ2 0xA1
79 #define MADERA_GP_FN_DSP_IRQ3 0xA2
80 #define MADERA_GP_FN_DSP_IRQ4 0xA3
81 #define MADERA_GP_FN_DSP_IRQ5 0xA4
82 #define MADERA_GP_FN_DSP_IRQ6 0xA5
83 #define MADERA_GP_FN_DSP_IRQ7 0xA6
84 #define MADERA_GP_FN_DSP_IRQ8 0xA7
85 #define MADERA_GP_FN_DSP_IRQ9 0xA8
86 #define MADERA_GP_FN_DSP_IRQ10 0xA9
87 #define MADERA_GP_FN_DSP_IRQ11 0xAA
88 #define MADERA_GP_FN_DSP_IRQ12 0xAB
89 #define MADERA_GP_FN_DSP_IRQ13 0xAC
90 #define MADERA_GP_FN_DSP_IRQ14 0xAD
91 #define MADERA_GP_FN_DSP_IRQ15 0xAE
92 #define MADERA_GP_FN_DSP_IRQ16 0xAF
93 #define MADERA_GP_FN_HPOUT1L_SC 0xB0
94 #define MADERA_GP_FN_HPOUT1R_SC 0xB1
95 #define MADERA_GP_FN_HPOUT2L_SC 0xB2
96 #define MADERA_GP_FN_HPOUT2R_SC 0xB3
97 #define MADERA_GP_FN_HPOUT3L_SC 0xB4
98 #define MADERA_GP_FN_HPOUT4R_SC 0xB5
99 #define MADERA_GP_FN_SPKOUTL_SC 0xB6
100 #define MADERA_GP_FN_SPKOUTR_SC 0xB7
101 #define MADERA_GP_FN_HPOUT1L_ENA 0xC0
102 #define MADERA_GP_FN_HPOUT1R_ENA 0xC1
103 #define MADERA_GP_FN_HPOUT2L_ENA 0xC2
104 #define MADERA_GP_FN_HPOUT2R_ENA 0xC3
105 #define MADERA_GP_FN_HPOUT3L_ENA 0xC4
106 #define MADERA_GP_FN_HPOUT4R_ENA 0xC5
107 #define MADERA_GP_FN_SPKOUTL_ENA 0xC6
108 #define MADERA_GP_FN_SPKOUTR_ENA 0xC7
109 #define MADERA_GP_FN_HPOUT1L_DIS 0xD0
110 #define MADERA_GP_FN_HPOUT1R_DIS 0xD1
111 #define MADERA_GP_FN_HPOUT2L_DIS 0xD2
112 #define MADERA_GP_FN_HPOUT2R_DIS 0xD3
113 #define MADERA_GP_FN_HPOUT3L_DIS 0xD4
114 #define MADERA_GP_FN_HPOUT4R_DIS 0xD5
115 #define MADERA_GP_FN_SPKOUTL_DIS 0xD6
116 #define MADERA_GP_FN_SPKOUTR_DIS 0xD7
117 #define MADERA_GP_FN_SPK_SHUTDOWN 0xE0
118 #define MADERA_GP_FN_SPK_OVH_SHUTDOWN 0xE1
119 #define MADERA_GP_FN_SPK_OVH_WARN 0xE2
120 #define MADERA_GP_FN_TIMER1_STATUS 0x140
121 #define MADERA_GP_FN_TIMER2_STATUS 0x141
122 #define MADERA_GP_FN_TIMER3_STATUS 0x142
123 #define MADERA_GP_FN_TIMER4_STATUS 0x143
124 #define MADERA_GP_FN_TIMER5_STATUS 0x144
125 #define MADERA_GP_FN_TIMER6_STATUS 0x145
126 #define MADERA_GP_FN_TIMER7_STATUS 0x146
127 #define MADERA_GP_FN_TIMER8_STATUS 0x147
128 #define MADERA_GP_FN_EVENTLOG1_FIFO_STS 0x150
129 #define MADERA_GP_FN_EVENTLOG2_FIFO_STS 0x151
130 #define MADERA_GP_FN_EVENTLOG3_FIFO_STS 0x152
131 #define MADERA_GP_FN_EVENTLOG4_FIFO_STS 0x153
132 #define MADERA_GP_FN_EVENTLOG5_FIFO_STS 0x154
133 #define MADERA_GP_FN_EVENTLOG6_FIFO_STS 0x155
134 #define MADERA_GP_FN_EVENTLOG7_FIFO_STS 0x156
135 #define MADERA_GP_FN_EVENTLOG8_FIFO_STS 0x157
136
137 struct snd_soc_dapm_context;
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 struct madera {
167 struct regmap *regmap;
168 struct regmap *regmap_32bit;
169
170 struct device *dev;
171
172 enum madera_type type;
173 unsigned int rev;
174 const char *type_name;
175
176 int num_core_supplies;
177 struct regulator_bulk_data core_supplies[MADERA_MAX_CORE_SUPPLIES];
178 struct regulator *dcvdd;
179 bool internal_dcvdd;
180
181 struct madera_pdata pdata;
182
183 struct device *irq_dev;
184 struct regmap_irq_chip_data *irq_data;
185 int irq;
186
187 unsigned int num_micbias;
188 unsigned int num_childbias[MADERA_MAX_MICBIAS];
189
190 struct snd_soc_dapm_context *dapm;
191 struct mutex dapm_ptr_lock;
192 unsigned int hp_ena;
193 bool out_clamp[MADERA_MAX_HP_OUTPUT];
194 bool out_shorted[MADERA_MAX_HP_OUTPUT];
195
196 struct blocking_notifier_head notifier;
197 };
198 #endif