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