1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * comparator.h  --  Comparator Aux ADC for Wolfson WM8350 PMIC
4  *
5  * Copyright 2007 Wolfson Microelectronics PLC
6  */
7 
8 #ifndef __LINUX_MFD_WM8350_COMPARATOR_H_
9 #define __LINUX_MFD_WM8350_COMPARATOR_H_
10 
11 /*
12  * Registers
13  */
14 
15 #define WM8350_DIGITISER_CONTROL_1              0x90
16 #define WM8350_DIGITISER_CONTROL_2              0x91
17 #define WM8350_AUX1_READBACK                    0x98
18 #define WM8350_AUX2_READBACK                    0x99
19 #define WM8350_AUX3_READBACK                    0x9A
20 #define WM8350_AUX4_READBACK                    0x9B
21 #define WM8350_CHIP_TEMP_READBACK               0x9F
22 #define WM8350_GENERIC_COMPARATOR_CONTROL       0xA3
23 #define WM8350_GENERIC_COMPARATOR_1             0xA4
24 #define WM8350_GENERIC_COMPARATOR_2             0xA5
25 #define WM8350_GENERIC_COMPARATOR_3             0xA6
26 #define WM8350_GENERIC_COMPARATOR_4             0xA7
27 
28 /*
29  * R144 (0x90) - Digitiser Control (1)
30  */
31 #define WM8350_AUXADC_CTC                       0x4000
32 #define WM8350_AUXADC_POLL                      0x2000
33 #define WM8350_AUXADC_HIB_MODE                  0x1000
34 #define WM8350_AUXADC_SEL8                      0x0080
35 #define WM8350_AUXADC_SEL7                      0x0040
36 #define WM8350_AUXADC_SEL6                      0x0020
37 #define WM8350_AUXADC_SEL5                      0x0010
38 #define WM8350_AUXADC_SEL4                      0x0008
39 #define WM8350_AUXADC_SEL3                      0x0004
40 #define WM8350_AUXADC_SEL2                      0x0002
41 #define WM8350_AUXADC_SEL1                      0x0001
42 
43 /*
44  * R145 (0x91) - Digitiser Control (2)
45  */
46 #define WM8350_AUXADC_MASKMODE_MASK             0x3000
47 #define WM8350_AUXADC_CRATE_MASK                0x0700
48 #define WM8350_AUXADC_CAL                       0x0004
49 #define WM8350_AUX_RBMODE                       0x0002
50 #define WM8350_AUXADC_WAIT                      0x0001
51 
52 /*
53  * R152 (0x98) - AUX1 Readback
54  */
55 #define WM8350_AUXADC_SCALE1_MASK               0x6000
56 #define WM8350_AUXADC_REF1                      0x1000
57 #define WM8350_AUXADC_DATA1_MASK                0x0FFF
58 
59 /*
60  * R153 (0x99) - AUX2 Readback
61  */
62 #define WM8350_AUXADC_SCALE2_MASK               0x6000
63 #define WM8350_AUXADC_REF2                      0x1000
64 #define WM8350_AUXADC_DATA2_MASK                0x0FFF
65 
66 /*
67  * R154 (0x9A) - AUX3 Readback
68  */
69 #define WM8350_AUXADC_SCALE3_MASK               0x6000
70 #define WM8350_AUXADC_REF3                      0x1000
71 #define WM8350_AUXADC_DATA3_MASK                0x0FFF
72 
73 /*
74  * R155 (0x9B) - AUX4 Readback
75  */
76 #define WM8350_AUXADC_SCALE4_MASK               0x6000
77 #define WM8350_AUXADC_REF4                      0x1000
78 #define WM8350_AUXADC_DATA4_MASK                0x0FFF
79 
80 /*
81  * R156 (0x9C) - USB Voltage Readback
82  */
83 #define WM8350_AUXADC_DATA_USB_MASK             0x0FFF
84 
85 /*
86  * R157 (0x9D) - LINE Voltage Readback
87  */
88 #define WM8350_AUXADC_DATA_LINE_MASK            0x0FFF
89 
90 /*
91  * R158 (0x9E) - BATT Voltage Readback
92  */
93 #define WM8350_AUXADC_DATA_BATT_MASK            0x0FFF
94 
95 /*
96  * R159 (0x9F) - Chip Temp Readback
97  */
98 #define WM8350_AUXADC_DATA_CHIPTEMP_MASK        0x0FFF
99 
100 /*
101  * R163 (0xA3) - Generic Comparator Control
102  */
103 #define WM8350_DCMP4_ENA                        0x0008
104 #define WM8350_DCMP3_ENA                        0x0004
105 #define WM8350_DCMP2_ENA                        0x0002
106 #define WM8350_DCMP1_ENA                        0x0001
107 
108 /*
109  * R164 (0xA4) - Generic comparator 1
110  */
111 #define WM8350_DCMP1_SRCSEL_MASK                0xE000
112 #define WM8350_DCMP1_GT                         0x1000
113 #define WM8350_DCMP1_THR_MASK                   0x0FFF
114 
115 /*
116  * R165 (0xA5) - Generic comparator 2
117  */
118 #define WM8350_DCMP2_SRCSEL_MASK                0xE000
119 #define WM8350_DCMP2_GT                         0x1000
120 #define WM8350_DCMP2_THR_MASK                   0x0FFF
121 
122 /*
123  * R166 (0xA6) - Generic comparator 3
124  */
125 #define WM8350_DCMP3_SRCSEL_MASK                0xE000
126 #define WM8350_DCMP3_GT                         0x1000
127 #define WM8350_DCMP3_THR_MASK                   0x0FFF
128 
129 /*
130  * R167 (0xA7) - Generic comparator 4
131  */
132 #define WM8350_DCMP4_SRCSEL_MASK                0xE000
133 #define WM8350_DCMP4_GT                         0x1000
134 #define WM8350_DCMP4_THR_MASK                   0x0FFF
135 
136 /*
137  * Interrupts.
138  */
139 #define WM8350_IRQ_AUXADC_DATARDY		16
140 #define WM8350_IRQ_AUXADC_DCOMP4		17
141 #define WM8350_IRQ_AUXADC_DCOMP3		18
142 #define WM8350_IRQ_AUXADC_DCOMP2		19
143 #define WM8350_IRQ_AUXADC_DCOMP1		20
144 #define WM8350_IRQ_SYS_HYST_COMP_FAIL		21
145 #define WM8350_IRQ_SYS_CHIP_GT115		22
146 #define WM8350_IRQ_SYS_CHIP_GT140		23
147 
148 /*
149  * USB/2, LINE & BATT = ((VRTC * 2) / 4095)) * 10e6 uV
150  * Where VRTC = 2.7 V
151  */
152 #define WM8350_AUX_COEFF			1319
153 
154 #define WM8350_AUXADC_AUX1			0
155 #define WM8350_AUXADC_AUX2			1
156 #define WM8350_AUXADC_AUX3			2
157 #define WM8350_AUXADC_AUX4			3
158 #define WM8350_AUXADC_USB			4
159 #define WM8350_AUXADC_LINE			5
160 #define WM8350_AUXADC_BATT			6
161 #define WM8350_AUXADC_TEMP			7
162 
163 struct wm8350;
164 
165 /*
166  * AUX ADC Readback
167  */
168 int wm8350_read_auxadc(struct wm8350 *wm8350, int channel, int scale,
169 		       int vref);
170 
171 #endif
172