mfd: cpcap: Add CPCAP drivers
[firefly-linux-kernel-4.4.55.git] / include / linux / spi / cpcap.h
1 #ifndef _LINUX_SPI_CPCAP_H
2 #define _LINUX_SPI_CPCAP_H
3
4 /*
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17  * 02111-1307, USA
18  *
19  */
20
21 #include <linux/ioctl.h>
22 #ifdef __KERNEL__
23 #include <linux/workqueue.h>
24 #include <linux/completion.h>
25 #include <linux/power_supply.h>
26 #include <linux/platform_device.h>
27 #endif
28
29 #ifdef CONFIG_RTC_INTF_SECCLKD
30 #include <linux/rtc.h>
31 #endif
32
33 #define CPCAP_DEV_NAME "cpcap"
34 #define CPCAP_NUM_REG_CPCAP (CPCAP_REG_END - CPCAP_REG_START + 1)
35
36 #define CPCAP_IRQ_INT1_INDEX 0
37 #define CPCAP_IRQ_INT2_INDEX 16
38 #define CPCAP_IRQ_INT3_INDEX 32
39 #define CPCAP_IRQ_INT4_INDEX 48
40 #define CPCAP_IRQ_INT5_INDEX 64
41
42 #define CPCAP_WHISPER_MODE_PU 0x00000001
43
44 enum cpcap_regulator_id {
45         CPCAP_SW5,
46         CPCAP_VCAM,
47         CPCAP_VCSI,
48         CPCAP_VDAC,
49         CPCAP_VDIG,
50         CPCAP_VFUSE,
51         CPCAP_VHVIO,
52         CPCAP_VSDIO,
53         CPCAP_VPLL,
54         CPCAP_VRF1,
55         CPCAP_VRF2,
56         CPCAP_VRFREF,
57         CPCAP_VWLAN1,
58         CPCAP_VWLAN2,
59         CPCAP_VSIM,
60         CPCAP_VSIMCARD,
61         CPCAP_VVIB,
62         CPCAP_VUSB,
63         CPCAP_VAUDIO,
64
65         CPCAP_NUM_REGULATORS
66 };
67
68 /*
69  * Enumeration of all registers in the cpcap. Note that the register
70  * numbers on the CPCAP IC are not contiguous. The values of the enums below
71  * are not the actual register numbers.
72  */
73 enum cpcap_reg {
74         CPCAP_REG_START,        /* Start of CPCAP registers. */
75
76         CPCAP_REG_INT1 = CPCAP_REG_START, /* Interrupt 1 */
77         CPCAP_REG_INT2,         /* Interrupt 2 */
78         CPCAP_REG_INT3,         /* Interrupt 3 */
79         CPCAP_REG_INT4,         /* Interrupt 4 */
80         CPCAP_REG_INTM1,        /* Interrupt Mask 1 */
81         CPCAP_REG_INTM2,        /* Interrupt Mask 2 */
82         CPCAP_REG_INTM3,        /* Interrupt Mask 3 */
83         CPCAP_REG_INTM4,        /* Interrupt Mask 4 */
84         CPCAP_REG_INTS1,        /* Interrupt Sense 1 */
85         CPCAP_REG_INTS2,        /* Interrupt Sense 2 */
86         CPCAP_REG_INTS3,        /* Interrupt Sense 3 */
87         CPCAP_REG_INTS4,        /* Interrupt Sense 4 */
88         CPCAP_REG_ASSIGN1,      /* Resource Assignment 1 */
89         CPCAP_REG_ASSIGN2,      /* Resource Assignment 2 */
90         CPCAP_REG_ASSIGN3,      /* Resource Assignment 3 */
91         CPCAP_REG_ASSIGN4,      /* Resource Assignment 4 */
92         CPCAP_REG_ASSIGN5,      /* Resource Assignment 5 */
93         CPCAP_REG_ASSIGN6,      /* Resource Assignment 6 */
94         CPCAP_REG_VERSC1,       /* Version Control 1 */
95         CPCAP_REG_VERSC2,       /* Version Control 2 */
96
97         CPCAP_REG_MI1,          /* Macro Interrupt 1 */
98         CPCAP_REG_MIM1,         /* Macro Interrupt Mask 1 */
99         CPCAP_REG_MI2,          /* Macro Interrupt 2 */
100         CPCAP_REG_MIM2,         /* Macro Interrupt Mask 2 */
101         CPCAP_REG_UCC1,         /* UC Control 1 */
102         CPCAP_REG_UCC2,         /* UC Control 2 */
103         CPCAP_REG_PC1,          /* Power Cut 1 */
104         CPCAP_REG_PC2,          /* Power Cut 2 */
105         CPCAP_REG_BPEOL,        /* BP and EOL */
106         CPCAP_REG_PGC,          /* Power Gate and Control */
107         CPCAP_REG_MT1,          /* Memory Transfer 1 */
108         CPCAP_REG_MT2,          /* Memory Transfer 2 */
109         CPCAP_REG_MT3,          /* Memory Transfer 3 */
110         CPCAP_REG_PF,           /* Print Format */
111
112         CPCAP_REG_SCC,          /* System Clock Control */
113         CPCAP_REG_SW1,          /* Stop Watch 1 */
114         CPCAP_REG_SW2,          /* Stop Watch 2 */
115         CPCAP_REG_UCTM,         /* UC Turbo Mode */
116         CPCAP_REG_TOD1,         /* Time of Day 1 */
117         CPCAP_REG_TOD2,         /* Time of Day 2 */
118         CPCAP_REG_TODA1,        /* Time of Day Alarm 1 */
119         CPCAP_REG_TODA2,        /* Time of Day Alarm 2 */
120         CPCAP_REG_DAY,          /* Day */
121         CPCAP_REG_DAYA,         /* Day Alarm */
122         CPCAP_REG_VAL1,         /* Validity 1 */
123         CPCAP_REG_VAL2,         /* Validity 2 */
124
125         CPCAP_REG_SDVSPLL,      /* Switcher DVS and PLL */
126         CPCAP_REG_SI2CC1,       /* Switcher I2C Control 1 */
127         CPCAP_REG_Si2CC2,       /* Switcher I2C Control 2 */
128         CPCAP_REG_S1C1,         /* Switcher 1 Control 1 */
129         CPCAP_REG_S1C2,         /* Switcher 1 Control 2 */
130         CPCAP_REG_S2C1,         /* Switcher 2 Control 1 */
131         CPCAP_REG_S2C2,         /* Switcher 2 Control 2 */
132         CPCAP_REG_S3C,          /* Switcher 3 Control */
133         CPCAP_REG_S4C1,         /* Switcher 4 Control 1 */
134         CPCAP_REG_S4C2,         /* Switcher 4 Control 2 */
135         CPCAP_REG_S5C,          /* Switcher 5 Control */
136         CPCAP_REG_S6C,          /* Switcher 6 Control */
137         CPCAP_REG_VCAMC,        /* VCAM Control */
138         CPCAP_REG_VCSIC,        /* VCSI Control */
139         CPCAP_REG_VDACC,        /* VDAC Control */
140         CPCAP_REG_VDIGC,        /* VDIG Control */
141         CPCAP_REG_VFUSEC,       /* VFUSE Control */
142         CPCAP_REG_VHVIOC,       /* VHVIO Control */
143         CPCAP_REG_VSDIOC,       /* VSDIO Control */
144         CPCAP_REG_VPLLC,        /* VPLL Control */
145         CPCAP_REG_VRF1C,        /* VRF1 Control */
146         CPCAP_REG_VRF2C,        /* VRF2 Control */
147         CPCAP_REG_VRFREFC,      /* VRFREF Control */
148         CPCAP_REG_VWLAN1C,      /* VWLAN1 Control */
149         CPCAP_REG_VWLAN2C,      /* VWLAN2 Control */
150         CPCAP_REG_VSIMC,        /* VSIM Control */
151         CPCAP_REG_VVIBC,        /* VVIB Control */
152         CPCAP_REG_VUSBC,        /* VUSB Control */
153         CPCAP_REG_VUSBINT1C,    /* VUSBINT1 Control */
154         CPCAP_REG_VUSBINT2C,    /* VUSBINT2 Control */
155         CPCAP_REG_URT,          /* Useroff Regulator Trigger */
156         CPCAP_REG_URM1,         /* Useroff Regulator Mask 1 */
157         CPCAP_REG_URM2,         /* Useroff Regulator Mask 2 */
158
159         CPCAP_REG_VAUDIOC,      /* VAUDIO Control */
160         CPCAP_REG_CC,           /* Codec Control */
161         CPCAP_REG_CDI,          /* Codec Digital Interface */
162         CPCAP_REG_SDAC,         /* Stereo DAC */
163         CPCAP_REG_SDACDI,       /* Stereo DAC Digital Interface */
164         CPCAP_REG_TXI,          /* TX Inputs */
165         CPCAP_REG_TXMP,         /* TX MIC PGA's */
166         CPCAP_REG_RXOA,         /* RX Output Amplifiers */
167         CPCAP_REG_RXVC,         /* RX Volume Control */
168         CPCAP_REG_RXCOA,        /* RX Codec to Output Amps */
169         CPCAP_REG_RXSDOA,       /* RX Stereo DAC to Output Amps */
170         CPCAP_REG_RXEPOA,       /* RX External PGA to Output Amps */
171         CPCAP_REG_RXLL,         /* RX Low Latency */
172         CPCAP_REG_A2LA,         /* A2 Loudspeaker Amplifier */
173         CPCAP_REG_MIPIS1,       /* MIPI Slimbus 1 */
174         CPCAP_REG_MIPIS2,       /* MIPI Slimbus 2 */
175         CPCAP_REG_MIPIS3,       /* MIPI Slimbus 3. */
176         CPCAP_REG_LVAB,         /* LMR Volume and A4 Balanced. */
177
178         CPCAP_REG_CCC1,         /* Coulomb Counter Control 1 */
179         CPCAP_REG_CRM,          /* Charger and Reverse Mode */
180         CPCAP_REG_CCCC2,        /* Coincell and Coulomb Ctr Ctrl 2 */
181         CPCAP_REG_CCS1,         /* Coulomb Counter Sample 1 */
182         CPCAP_REG_CCS2,         /* Coulomb Counter Sample 2 */
183         CPCAP_REG_CCA1,         /* Coulomb Counter Accumulator 1 */
184         CPCAP_REG_CCA2,         /* Coulomb Counter Accumulator 2 */
185         CPCAP_REG_CCM,          /* Coulomb Counter Mode */
186         CPCAP_REG_CCO,          /* Coulomb Counter Offset */
187         CPCAP_REG_CCI,          /* Coulomb Counter Integrator */
188
189         CPCAP_REG_ADCC1,        /* A/D Converter Configuration 1 */
190         CPCAP_REG_ADCC2,        /* A/D Converter Configuration 2 */
191         CPCAP_REG_ADCD0,        /* A/D Converter Data 0 */
192         CPCAP_REG_ADCD1,        /* A/D Converter Data 1 */
193         CPCAP_REG_ADCD2,        /* A/D Converter Data 2 */
194         CPCAP_REG_ADCD3,        /* A/D Converter Data 3 */
195         CPCAP_REG_ADCD4,        /* A/D Converter Data 4 */
196         CPCAP_REG_ADCD5,        /* A/D Converter Data 5 */
197         CPCAP_REG_ADCD6,        /* A/D Converter Data 6 */
198         CPCAP_REG_ADCD7,        /* A/D Converter Data 7 */
199         CPCAP_REG_ADCAL1,       /* A/D Converter Calibration 1 */
200         CPCAP_REG_ADCAL2,       /* A/D Converter Calibration 2 */
201
202         CPCAP_REG_USBC1,        /* USB Control 1 */
203         CPCAP_REG_USBC2,        /* USB Control 2 */
204         CPCAP_REG_USBC3,        /* USB Control 3 */
205         CPCAP_REG_UVIDL,        /* ULPI Vendor ID Low */
206         CPCAP_REG_UVIDH,        /* ULPI Vendor ID High */
207         CPCAP_REG_UPIDL,        /* ULPI Product ID Low */
208         CPCAP_REG_UPIDH,        /* ULPI Product ID High */
209         CPCAP_REG_UFC1,         /* ULPI Function Control 1 */
210         CPCAP_REG_UFC2,         /* ULPI Function Control 2 */
211         CPCAP_REG_UFC3,         /* ULPI Function Control 3 */
212         CPCAP_REG_UIC1,         /* ULPI Interface Control 1 */
213         CPCAP_REG_UIC2,         /* ULPI Interface Control 2 */
214         CPCAP_REG_UIC3,         /* ULPI Interface Control 3 */
215         CPCAP_REG_USBOTG1,      /* USB OTG Control 1 */
216         CPCAP_REG_USBOTG2,      /* USB OTG Control 2 */
217         CPCAP_REG_USBOTG3,      /* USB OTG Control 3 */
218         CPCAP_REG_UIER1,        /* USB Interrupt Enable Rising 1 */
219         CPCAP_REG_UIER2,        /* USB Interrupt Enable Rising 2 */
220         CPCAP_REG_UIER3,        /* USB Interrupt Enable Rising 3 */
221         CPCAP_REG_UIEF1,        /* USB Interrupt Enable Falling 1 */
222         CPCAP_REG_UIEF2,        /* USB Interrupt Enable Falling 1 */
223         CPCAP_REG_UIEF3,        /* USB Interrupt Enable Falling 1 */
224         CPCAP_REG_UIS,          /* USB Interrupt Status */
225         CPCAP_REG_UIL,          /* USB Interrupt Latch */
226         CPCAP_REG_USBD,         /* USB Debug */
227         CPCAP_REG_SCR1,         /* Scratch 1 */
228         CPCAP_REG_SCR2,         /* Scratch 2 */
229         CPCAP_REG_SCR3,         /* Scratch 3 */
230         CPCAP_REG_VMC,          /* Video Mux Control */
231         CPCAP_REG_OWDC,         /* One Wire Device Control */
232         CPCAP_REG_GPIO0,        /* GPIO 0 Control */
233         CPCAP_REG_GPIO1,        /* GPIO 1 Control */
234         CPCAP_REG_GPIO2,        /* GPIO 2 Control */
235         CPCAP_REG_GPIO3,        /* GPIO 3 Control */
236         CPCAP_REG_GPIO4,        /* GPIO 4 Control */
237         CPCAP_REG_GPIO5,        /* GPIO 5 Control */
238         CPCAP_REG_GPIO6,        /* GPIO 6 Control */
239
240         CPCAP_REG_MDLC,         /* Main Display Lighting Control */
241         CPCAP_REG_KLC,          /* Keypad Lighting Control */
242         CPCAP_REG_ADLC,         /* Aux Display Lighting Control */
243         CPCAP_REG_REDC,         /* Red Triode Control */
244         CPCAP_REG_GREENC,       /* Green Triode Control */
245         CPCAP_REG_BLUEC,        /* Blue Triode Control */
246         CPCAP_REG_CFC,          /* Camera Flash Control */
247         CPCAP_REG_ABC,          /* Adaptive Boost Control */
248         CPCAP_REG_BLEDC,        /* Bluetooth LED Control */
249         CPCAP_REG_CLEDC,        /* Camera Privacy LED Control */
250
251         CPCAP_REG_OW1C,         /* One Wire 1 Command */
252         CPCAP_REG_OW1D,         /* One Wire 1 Data */
253         CPCAP_REG_OW1I,         /* One Wire 1 Interrupt */
254         CPCAP_REG_OW1IE,        /* One Wire 1 Interrupt Enable */
255         CPCAP_REG_OW1,          /* One Wire 1 Control */
256         CPCAP_REG_OW2C,         /* One Wire 2 Command */
257         CPCAP_REG_OW2D,         /* One Wire 2 Data */
258         CPCAP_REG_OW2I,         /* One Wire 2 Interrupt */
259         CPCAP_REG_OW2IE,        /* One Wire 2 Interrupt Enable */
260         CPCAP_REG_OW2,          /* One Wire 2 Control */
261         CPCAP_REG_OW3C,         /* One Wire 3 Command */
262         CPCAP_REG_OW3D,         /* One Wire 3 Data */
263         CPCAP_REG_OW3I,         /* One Wire 3 Interrupt */
264         CPCAP_REG_OW3IE,        /* One Wire 3 Interrupt Enable */
265         CPCAP_REG_OW3,          /* One Wire 3 Control */
266         CPCAP_REG_GCAIC,        /* GCAI Clock Control */
267         CPCAP_REG_GCAIM,        /* GCAI GPIO Mode */
268         CPCAP_REG_LGDIR,        /* LMR GCAI GPIO Direction */
269         CPCAP_REG_LGPU,         /* LMR GCAI GPIO Pull-up */
270         CPCAP_REG_LGPIN,        /* LMR GCAI GPIO Pin */
271         CPCAP_REG_LGMASK,       /* LMR GCAI GPIO Mask */
272         CPCAP_REG_LDEB,         /* LMR Debounce Settings */
273         CPCAP_REG_LGDET,        /* LMR GCAI Detach Detect */
274         CPCAP_REG_LMISC,        /* LMR Misc Bits */
275         CPCAP_REG_LMACE,        /* LMR Mace IC Support */
276
277         CPCAP_REG_END = CPCAP_REG_LMACE, /* End of CPCAP registers. */
278
279         CPCAP_REG_MAX           /* The largest valid register value. */
280         = CPCAP_REG_END,
281
282         CPCAP_REG_SIZE = CPCAP_REG_MAX + 1,
283         CPCAP_REG_UNUSED = CPCAP_REG_MAX + 2,
284 };
285
286 enum {
287         CPCAP_IOCTL_NUM_TEST__START,
288         CPCAP_IOCTL_NUM_TEST_READ_REG,
289         CPCAP_IOCTL_NUM_TEST_WRITE_REG,
290         CPCAP_IOCTL_NUM_TEST__END,
291
292         CPCAP_IOCTL_NUM_ADC__START,
293         CPCAP_IOCTL_NUM_ADC_PHASE,
294         CPCAP_IOCTL_NUM_ADC__END,
295
296         CPCAP_IOCTL_NUM_BATT__START,
297         CPCAP_IOCTL_NUM_BATT_DISPLAY_UPDATE,
298         CPCAP_IOCTL_NUM_BATT_ATOD_ASYNC,
299         CPCAP_IOCTL_NUM_BATT_ATOD_SYNC,
300         CPCAP_IOCTL_NUM_BATT_ATOD_READ,
301         CPCAP_IOCTL_NUM_BATT__END,
302
303         CPCAP_IOCTL_NUM_UC__START,
304         CPCAP_IOCTL_NUM_UC_MACRO_START,
305         CPCAP_IOCTL_NUM_UC_MACRO_STOP,
306         CPCAP_IOCTL_NUM_UC_GET_VENDOR,
307         CPCAP_IOCTL_NUM_UC_SET_TURBO_MODE,
308         CPCAP_IOCTL_NUM_UC__END,
309
310 #ifdef CONFIG_RTC_INTF_SECCLKD
311         CPCAP_IOCTL_NUM_RTC__START,
312         CPCAP_IOCTL_NUM_RTC_COUNT,
313         CPCAP_IOCTL_NUM_RTC__END,
314 #endif
315
316         CPCAP_IOCTL_NUM_ACCY__START,
317         CPCAP_IOCTL_NUM_ACCY_WHISPER,
318         CPCAP_IOCTL_NUM_ACCY__END,
319 };
320
321 enum cpcap_irqs {
322         CPCAP_IRQ__START,               /* 1st supported interrupt event */
323         CPCAP_IRQ_HSCLK = CPCAP_IRQ_INT1_INDEX, /* High Speed Clock */
324         CPCAP_IRQ_PRIMAC,               /* Primary Macro */
325         CPCAP_IRQ_SECMAC,               /* Secondary Macro */
326         CPCAP_IRQ_LOWBPL,               /* Low Battery Low Threshold */
327         CPCAP_IRQ_SEC2PRI,              /* 2nd Macro to Primary Processor */
328         CPCAP_IRQ_LOWBPH,               /* Low Battery High Threshold  */
329         CPCAP_IRQ_EOL,                  /* End of Life */
330         CPCAP_IRQ_TS,                   /* Touchscreen */
331         CPCAP_IRQ_ADCDONE,              /* ADC Conversion Complete */
332         CPCAP_IRQ_HS,                   /* Headset */
333         CPCAP_IRQ_MB2,                  /* Mic Bias2 */
334         CPCAP_IRQ_VBUSOV,               /* Overvoltage Detected */
335         CPCAP_IRQ_RVRS_CHRG,            /* Reverse Charge */
336         CPCAP_IRQ_CHRG_DET,             /* Charger Detected */
337         CPCAP_IRQ_IDFLOAT,              /* ID Float */
338         CPCAP_IRQ_IDGND,                /* ID Ground */
339
340         CPCAP_IRQ_SE1 = CPCAP_IRQ_INT2_INDEX, /* SE1 Detector */
341         CPCAP_IRQ_SESSEND,              /* Session End */
342         CPCAP_IRQ_SESSVLD,              /* Session Valid */
343         CPCAP_IRQ_VBUSVLD,              /* VBUS Valid */
344         CPCAP_IRQ_CHRG_CURR1,           /* Charge Current Monitor (20mA) */
345         CPCAP_IRQ_CHRG_CURR2,           /* Charge Current Monitor (250mA) */
346         CPCAP_IRQ_RVRS_MODE,            /* Reverse Current Limit */
347         CPCAP_IRQ_ON,                   /* On Signal */
348         CPCAP_IRQ_ON2,                  /* On 2 Signal */
349         CPCAP_IRQ_CLK,                  /* 32k Clock Transition */
350         CPCAP_IRQ_1HZ,                  /* 1Hz Tick */
351         CPCAP_IRQ_PTT,                  /* Push To Talk */
352         CPCAP_IRQ_SE0CONN,              /* SE0 Condition */
353         CPCAP_IRQ_CHRG_SE1B,            /* CHRG_SE1B Pin */
354         CPCAP_IRQ_UART_ECHO_OVERRUN,    /* UART Buffer Overflow */
355         CPCAP_IRQ_EXTMEMHD,             /* External MEMHOLD */
356
357         CPCAP_IRQ_WARM = CPCAP_IRQ_INT3_INDEX, /* Warm Start */
358         CPCAP_IRQ_SYSRSTR,              /* System Restart */
359         CPCAP_IRQ_SOFTRST,              /* Soft Reset */
360         CPCAP_IRQ_DIEPWRDWN,            /* Die Temperature Powerdown */
361         CPCAP_IRQ_DIETEMPH,             /* Die Temperature High */
362         CPCAP_IRQ_PC,                   /* Power Cut */
363         CPCAP_IRQ_OFLOWSW,              /* Stopwatch Overflow */
364         CPCAP_IRQ_TODA,                 /* TOD Alarm */
365         CPCAP_IRQ_OPT_SEL_DTCH,         /* Detach Detect */
366         CPCAP_IRQ_OPT_SEL_STATE,        /* State Change */
367         CPCAP_IRQ_ONEWIRE1,             /* Onewire 1 Block */
368         CPCAP_IRQ_ONEWIRE2,             /* Onewire 2 Block */
369         CPCAP_IRQ_ONEWIRE3,             /* Onewire 3 Block */
370         CPCAP_IRQ_UCRESET,              /* Microcontroller Reset */
371         CPCAP_IRQ_PWRGOOD,              /* BP Turn On */
372         CPCAP_IRQ_USBDPLLCLK,           /* USB DPLL Status */
373
374         CPCAP_IRQ_DPI = CPCAP_IRQ_INT4_INDEX, /* DP Line */
375         CPCAP_IRQ_DMI,                  /* DM Line */
376         CPCAP_IRQ_UCBUSY,               /* Microcontroller Busy */
377         CPCAP_IRQ_GCAI_CURR1,           /* Charge Current Monitor (65mA) */
378         CPCAP_IRQ_GCAI_CURR2,           /* Charge Current Monitor (600mA) */
379         CPCAP_IRQ_SB_MAX_RETRANSMIT_ERR,/* SLIMbus Retransmit Error */
380         CPCAP_IRQ_BATTDETB,             /* Battery Presence Detected */
381         CPCAP_IRQ_PRIHALT,              /* Primary Microcontroller Halt */
382         CPCAP_IRQ_SECHALT,              /* Secondary Microcontroller Halt */
383         CPCAP_IRQ_CC_CAL,               /* CC Calibration */
384
385         CPCAP_IRQ_UC_PRIROMR = CPCAP_IRQ_INT5_INDEX, /* Prim ROM Rd Macro Int */
386         CPCAP_IRQ_UC_PRIRAMW,           /* Primary RAM Write Macro Int */
387         CPCAP_IRQ_UC_PRIRAMR,           /* Primary RAM Read Macro Int */
388         CPCAP_IRQ_UC_USEROFF,           /* USEROFF Macro Interrupt */
389         CPCAP_IRQ_UC_PRIMACRO_4,        /* Primary Macro 4 Interrupt */
390         CPCAP_IRQ_UC_PRIMACRO_5,        /* Primary Macro 5 Interrupt */
391         CPCAP_IRQ_UC_PRIMACRO_6,        /* Primary Macro 6 Interrupt */
392         CPCAP_IRQ_UC_PRIMACRO_7,        /* Primary Macro 7 Interrupt */
393         CPCAP_IRQ_UC_PRIMACRO_8,        /* Primary Macro 8 Interrupt */
394         CPCAP_IRQ_UC_PRIMACRO_9,        /* Primary Macro 9 Interrupt */
395         CPCAP_IRQ_UC_PRIMACRO_10,       /* Primary Macro 10 Interrupt */
396         CPCAP_IRQ_UC_PRIMACRO_11,       /* Primary Macro 11 Interrupt */
397         CPCAP_IRQ_UC_PRIMACRO_12,       /* Primary Macro 12 Interrupt */
398         CPCAP_IRQ_UC_PRIMACRO_13,       /* Primary Macro 13 Interrupt */
399         CPCAP_IRQ_UC_PRIMACRO_14,       /* Primary Macro 14 Interrupt */
400         CPCAP_IRQ_UC_PRIMACRO_15,       /* Primary Macro 15 Interrupt */
401         CPCAP_IRQ__NUM                  /* Number of allocated events */
402 };
403
404 enum cpcap_adc_bank0 {
405         CPCAP_ADC_AD0_BATTDETB,
406         CPCAP_ADC_BATTP,
407         CPCAP_ADC_VBUS,
408         CPCAP_ADC_AD3,
409         CPCAP_ADC_BPLUS_AD4,
410         CPCAP_ADC_CHG_ISENSE,
411         CPCAP_ADC_BATTI_ADC,
412         CPCAP_ADC_USB_ID,
413
414         CPCAP_ADC_BANK0_NUM,
415 };
416
417 enum cpcap_adc_bank1 {
418         CPCAP_ADC_AD8,
419         CPCAP_ADC_AD9,
420         CPCAP_ADC_LICELL,
421         CPCAP_ADC_HV_BATTP,
422         CPCAP_ADC_TSX1_AD12,
423         CPCAP_ADC_TSX2_AD13,
424         CPCAP_ADC_TSY1_AD14,
425         CPCAP_ADC_TSY2_AD15,
426
427         CPCAP_ADC_BANK1_NUM,
428 };
429
430 enum cpcap_adc_format {
431         CPCAP_ADC_FORMAT_RAW,
432         CPCAP_ADC_FORMAT_PHASED,
433         CPCAP_ADC_FORMAT_CONVERTED,
434 };
435
436 enum cpcap_adc_timing {
437         CPCAP_ADC_TIMING_IMM,
438         CPCAP_ADC_TIMING_IN,
439         CPCAP_ADC_TIMING_OUT,
440 };
441
442 enum cpcap_adc_type {
443         CPCAP_ADC_TYPE_BANK_0,
444         CPCAP_ADC_TYPE_BANK_1,
445         CPCAP_ADC_TYPE_BATT_PI,
446 };
447
448 enum cpcap_macro {
449         CPCAP_MACRO_ROMR,
450         CPCAP_MACRO_RAMW,
451         CPCAP_MACRO_RAMR,
452         CPCAP_MACRO_USEROFF,
453         CPCAP_MACRO_4,
454         CPCAP_MACRO_5,
455         CPCAP_MACRO_6,
456         CPCAP_MACRO_7,
457         CPCAP_MACRO_8,
458         CPCAP_MACRO_9,
459         CPCAP_MACRO_10,
460         CPCAP_MACRO_11,
461         CPCAP_MACRO_12,
462         CPCAP_MACRO_13,
463         CPCAP_MACRO_14,
464         CPCAP_MACRO_15,
465
466         CPCAP_MACRO__END,
467 };
468
469 enum cpcap_vendor {
470         CPCAP_VENDOR_ST,
471         CPCAP_VENDOR_TI,
472 };
473
474 enum cpcap_revision {
475         CPCAP_REVISION_1_0 = 0x08,
476         CPCAP_REVISION_1_1 = 0x09,
477         CPCAP_REVISION_2_0 = 0x10,
478         CPCAP_REVISION_2_1 = 0x11,
479 };
480
481 enum cpcap_batt_usb_model {
482         CPCAP_BATT_USB_MODEL_NONE,
483         CPCAP_BATT_USB_MODEL_USB,
484         CPCAP_BATT_USB_MODEL_FACTORY,
485 };
486
487 struct cpcap_spi_init_data {
488         enum cpcap_reg reg;
489         unsigned short data;
490 };
491
492 struct cpcap_adc_ato {
493         unsigned short ato_in;
494         unsigned short atox_in;
495         unsigned short adc_ps_factor_in;
496         unsigned short atox_ps_factor_in;
497         unsigned short ato_out;
498         unsigned short atox_out;
499         unsigned short adc_ps_factor_out;
500         unsigned short atox_ps_factor_out;
501 };
502
503 struct cpcap_display_led {
504         unsigned int display_reg;
505         unsigned int display_mask;
506         unsigned int display_on;
507         unsigned int display_off;
508         unsigned int display_init;
509         unsigned int poll_intvl;
510         unsigned int zone0;
511         unsigned int zone1;
512         unsigned int zone2;
513         unsigned int zone3;
514         unsigned int zone4;
515 };
516
517 struct cpcap_button_led {
518         unsigned int button_reg;
519         unsigned int button_mask;
520         unsigned int button_on;
521         unsigned int button_off;
522 };
523
524 struct cpcap_kpad_led {
525         unsigned int kpad_reg;
526         unsigned int kpad_mask;
527         unsigned int kpad_on;
528         unsigned int kpad_off;
529 };
530
531 struct cpcap_rgb_led {
532         unsigned int rgb_reg;
533         unsigned int rgb_mask;
534         unsigned int rgb_on;
535         unsigned int rgb_off;
536 };
537
538 struct cpcap_leds {
539         struct cpcap_display_led display_led;
540         struct cpcap_button_led button_led;
541         struct cpcap_kpad_led kpad_led;
542         struct cpcap_rgb_led rgb_led;
543 };
544
545 struct cpcap_batt_data {
546         int status;
547         int health;
548         int present;
549         int capacity;
550         int batt_volt;
551         int batt_temp;
552 };
553
554 struct cpcap_batt_ac_data {
555         int online;
556 };
557
558 struct cpcap_batt_usb_data {
559         int online;
560         int current_now;
561         enum cpcap_batt_usb_model model;
562 };
563
564 #ifdef CONFIG_RTC_INTF_SECCLKD
565 struct cpcap_rtc_time_cnt {
566         struct rtc_time time;
567         unsigned short count;
568 };
569 #endif
570 struct cpcap_device;
571
572 #ifdef __KERNEL__
573 struct cpcap_platform_data {
574         struct cpcap_spi_init_data *init;
575         int init_len;
576         unsigned short *regulator_mode_values;
577         unsigned short *regulator_off_mode_values;
578         struct regulator_init_data *regulator_init;
579         struct cpcap_adc_ato *adc_ato;
580         struct cpcap_leds *leds;
581         void (*ac_changed)(struct power_supply *,
582                            struct cpcap_batt_ac_data *);
583         void (*batt_changed)(struct power_supply *,
584                              struct cpcap_batt_data *);
585         void (*usb_changed)(struct power_supply *,
586                             struct cpcap_batt_usb_data *);
587 };
588
589 struct cpcap_whisper_pdata {
590         unsigned int gpio;
591         unsigned char uartmux;
592 };
593
594 struct cpcap_adc_request {
595         enum cpcap_adc_format format;
596         enum cpcap_adc_timing timing;
597         enum cpcap_adc_type type;
598         int status;
599         int result[CPCAP_ADC_BANK0_NUM];
600         void (*callback)(struct cpcap_device *, void *);
601         void *callback_param;
602
603         /* Used in case of sync requests */
604         struct completion completion;
605 };
606 #endif
607
608 struct cpcap_adc_us_request {
609         enum cpcap_adc_format format;
610         enum cpcap_adc_timing timing;
611         enum cpcap_adc_type type;
612         int status;
613         int result[CPCAP_ADC_BANK0_NUM];
614 };
615
616 struct cpcap_adc_phase {
617         signed char offset_batti;
618         unsigned char slope_batti;
619         signed char offset_chrgi;
620         unsigned char slope_chrgi;
621         signed char offset_battp;
622         unsigned char slope_battp;
623         signed char offset_bp;
624         unsigned char slope_bp;
625         signed char offset_battt;
626         unsigned char slope_battt;
627         signed char offset_chrgv;
628         unsigned char slope_chrgv;
629 };
630
631 struct cpcap_regacc {
632         unsigned short reg;
633         unsigned short value;
634         unsigned short mask;
635 };
636
637 /*
638  * Gets the contents of the specified cpcap register.
639  *
640  * INPUTS: The register number in the cpcap driver's format.
641  *
642  * OUTPUTS: The command writes the register data back to user space at the
643  * location specified, or it may return an error code.
644  */
645 #ifdef CONFIG_RTC_INTF_SECCLKD
646 #define CPCAP_IOCTL_GET_RTC_TIME_COUNTER \
647         _IOR(0, CPCAP_IOCTL_NUM_RTC_COUNT, struct cpcap_rtc_time_cnt)
648 #endif
649
650 #define CPCAP_IOCTL_TEST_READ_REG \
651         _IOWR(0, CPCAP_IOCTL_NUM_TEST_READ_REG, struct cpcap_regacc*)
652
653 /*
654  * Writes the specifed cpcap register.
655  *
656  * This function writes the specified cpcap register with the specified
657  * data.
658  *
659  * INPUTS: The register number in the cpcap driver's format and the data to
660  * write to that register.
661  *
662  * OUTPUTS: The command has no output other than the returned error code for
663  * the ioctl() call.
664  */
665 #define CPCAP_IOCTL_TEST_WRITE_REG \
666         _IOWR(0, CPCAP_IOCTL_NUM_TEST_WRITE_REG, struct cpcap_regacc*)
667
668 #define CPCAP_IOCTL_ADC_PHASE \
669         _IOWR(0, CPCAP_IOCTL_NUM_ADC_PHASE, struct cpcap_adc_phase*)
670
671 #define CPCAP_IOCTL_BATT_DISPLAY_UPDATE \
672         _IOW(0, CPCAP_IOCTL_NUM_BATT_DISPLAY_UPDATE, struct cpcap_batt_data*)
673
674 #define CPCAP_IOCTL_BATT_ATOD_ASYNC \
675         _IOW(0, CPCAP_IOCTL_NUM_BATT_ATOD_ASYNC, struct cpcap_adc_us_request*)
676
677 #define CPCAP_IOCTL_BATT_ATOD_SYNC \
678         _IOWR(0, CPCAP_IOCTL_NUM_BATT_ATOD_SYNC, struct cpcap_adc_us_request*)
679
680 #define CPCAP_IOCTL_BATT_ATOD_READ \
681         _IOWR(0, CPCAP_IOCTL_NUM_BATT_ATOD_READ, struct cpcap_adc_us_request*)
682
683
684 #define CPCAP_IOCTL_UC_MACRO_START \
685         _IOWR(0, CPCAP_IOCTL_NUM_UC_MACRO_START, enum cpcap_macro)
686
687 #define CPCAP_IOCTL_UC_MACRO_STOP \
688         _IOWR(0, CPCAP_IOCTL_NUM_UC_MACRO_STOP, enum cpcap_macro)
689
690 #define CPCAP_IOCTL_UC_GET_VENDOR \
691         _IOWR(0, CPCAP_IOCTL_NUM_UC_GET_VENDOR, enum cpcap_vendor)
692
693 #define CPCAP_IOCTL_UC_SET_TURBO_MODE \
694         _IOW(0, CPCAP_IOCTL_NUM_UC_SET_TURBO_MODE, unsigned short)
695
696 #define CPCAP_IOCTL_ACCY_WHISPER \
697         _IOW(0, CPCAP_IOCTL_NUM_ACCY_WHISPER, unsigned long)
698
699 #ifdef __KERNEL__
700 struct cpcap_device {
701         struct spi_device       *spi;
702         enum cpcap_vendor       vendor;
703         enum cpcap_revision     revision;
704         void                    *keydata;
705         struct platform_device  *regulator_pdev[CPCAP_NUM_REGULATORS];
706         void                    *irqdata;
707         void                    *adcdata;
708         void                    *battdata;
709         void                    *ucdata;
710         void                    *accydata;
711         void                    (*h2w_new_state)(int);
712 };
713
714 static inline void cpcap_set_keydata(struct cpcap_device *cpcap, void *data)
715 {
716         cpcap->keydata = data;
717 }
718
719 static inline void *cpcap_get_keydata(struct cpcap_device *cpcap)
720 {
721         return cpcap->keydata;
722 }
723
724 int cpcap_regacc_write(struct cpcap_device *cpcap, enum cpcap_reg reg,
725                        unsigned short value, unsigned short mask);
726
727 int cpcap_regacc_read(struct cpcap_device *cpcap, enum cpcap_reg reg,
728                       unsigned short *value_ptr);
729
730 int cpcap_regacc_init(struct cpcap_device *cpcap);
731
732 void cpcap_broadcast_key_event(struct cpcap_device *cpcap,
733                                unsigned int code, int value);
734
735 int cpcap_irq_init(struct cpcap_device *cpcap);
736
737 void cpcap_irq_shutdown(struct cpcap_device *cpcap);
738
739 int cpcap_irq_register(struct cpcap_device *cpcap, enum cpcap_irqs irq,
740                        void (*cb_func) (enum cpcap_irqs, void *), void *data);
741
742 int cpcap_irq_free(struct cpcap_device *cpcap, enum cpcap_irqs irq);
743
744 int cpcap_irq_get_data(struct cpcap_device *cpcap, enum cpcap_irqs irq,
745                        void **data);
746
747 int cpcap_irq_clear(struct cpcap_device *cpcap, enum cpcap_irqs int_event);
748
749 int cpcap_irq_mask(struct cpcap_device *cpcap, enum cpcap_irqs int_event);
750
751 int cpcap_irq_unmask(struct cpcap_device *cpcap, enum cpcap_irqs int_event);
752
753 int cpcap_irq_mask_get(struct cpcap_device *cpcap, enum cpcap_irqs int_event);
754
755 int cpcap_irq_sense(struct cpcap_device *cpcap, enum cpcap_irqs int_event,
756                     unsigned char clear);
757
758 int cpcap_adc_sync_read(struct cpcap_device *cpcap,
759                         struct cpcap_adc_request *request);
760
761 int cpcap_adc_async_read(struct cpcap_device *cpcap,
762                          struct cpcap_adc_request *request);
763
764 void cpcap_adc_phase(struct cpcap_device *cpcap, struct cpcap_adc_phase *phase);
765
766 void cpcap_batt_set_ac_prop(struct cpcap_device *cpcap, int online);
767
768 void cpcap_batt_set_usb_prop_online(struct cpcap_device *cpcap, int online,
769                                     enum cpcap_batt_usb_model model);
770
771 void cpcap_batt_set_usb_prop_curr(struct cpcap_device *cpcap,
772                                   unsigned int curr);
773
774 int cpcap_uc_start(struct cpcap_device *cpcap, enum cpcap_macro macro);
775
776 int cpcap_uc_stop(struct cpcap_device *cpcap, enum cpcap_macro macro);
777
778 unsigned char cpcap_uc_status(struct cpcap_device *cpcap,
779                               enum cpcap_macro macro);
780
781 int cpcap_accy_whisper(struct cpcap_device *cpcap, unsigned long cmd);
782
783 #define  cpcap_driver_register platform_driver_register
784 #define  cpcap_driver_unregister platform_driver_unregister
785
786 int cpcap_device_register(struct platform_device *pdev);
787 int cpcap_device_unregister(struct platform_device *pdev);
788
789
790 #endif /* __KERNEL__ */
791 #endif /* _LINUX_SPI_CPCAP_H */