/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef _LINUX_SPI_CPCAP_H
#define _LINUX_SPI_CPCAP_H

#include <linux/ioctl.h>

#define CPCAP_DEV_NAME "cpcap"
#define CPCAP_NUM_REG_CPCAP (CPCAP_REG_END - CPCAP_REG_START + 1)

#define CPCAP_IRQ_INT1_INDEX 0
#define CPCAP_IRQ_INT2_INDEX 16
#define CPCAP_IRQ_INT3_INDEX 32
#define CPCAP_IRQ_INT4_INDEX 48
#define CPCAP_IRQ_INT5_INDEX 64

#define CPCAP_HWCFG_NUM 2  

#define CPCAP_HWCFG0_SEC_STBY_SW1 0x0001
#define CPCAP_HWCFG0_SEC_STBY_SW2 0x0002
#define CPCAP_HWCFG0_SEC_STBY_SW3 0x0004
#define CPCAP_HWCFG0_SEC_STBY_SW4 0x0008
#define CPCAP_HWCFG0_SEC_STBY_SW5 0x0010
#define CPCAP_HWCFG0_SEC_STBY_VAUDIO 0x0020
#define CPCAP_HWCFG0_SEC_STBY_VCAM 0x0040
#define CPCAP_HWCFG0_SEC_STBY_VCSI 0x0080
#define CPCAP_HWCFG0_SEC_STBY_VDAC 0x0100
#define CPCAP_HWCFG0_SEC_STBY_VDIG 0x0200
#define CPCAP_HWCFG0_SEC_STBY_VHVIO 0x0400
#define CPCAP_HWCFG0_SEC_STBY_VPLL 0x0800
#define CPCAP_HWCFG0_SEC_STBY_VRF1 0x1000
#define CPCAP_HWCFG0_SEC_STBY_VRF2 0x2000
#define CPCAP_HWCFG0_SEC_STBY_VRFREF 0x4000
#define CPCAP_HWCFG0_SEC_STBY_VSDIO 0x8000

#define CPCAP_HWCFG1_SEC_STBY_VWLAN1 0x0001
#define CPCAP_HWCFG1_SEC_STBY_VWLAN2 0x0002
#define CPCAP_HWCFG1_SEC_STBY_VSIM 0x0004
#define CPCAP_HWCFG1_SEC_STBY_VSIMCARD 0x0008

#define CPCAP_WHISPER_MODE_PU 0x00000001
#define CPCAP_WHISPER_ENABLE_UART 0x00000002
#define CPCAP_WHISPER_ACCY_MASK 0xF8000000
#define CPCAP_WHISPER_ACCY_SHFT 27
#define CPCAP_WHISPER_ID_SIZE 16
#define CPCAP_WHISPER_PROP_SIZE 7

enum cpcap_regulator_id {
 CPCAP_SW2,
 CPCAP_SW4,
 CPCAP_SW5,
 CPCAP_VCAM,
 CPCAP_VCSI,
 CPCAP_VDAC,
 CPCAP_VDIG,
 CPCAP_VFUSE,
 CPCAP_VHVIO,
 CPCAP_VSDIO,
 CPCAP_VPLL,
 CPCAP_VRF1,
 CPCAP_VRF2,
 CPCAP_VRFREF,
 CPCAP_VWLAN1,
 CPCAP_VWLAN2,
 CPCAP_VSIM,
 CPCAP_VSIMCARD,
 CPCAP_VVIB,
 CPCAP_VUSB,
 CPCAP_VAUDIO,
 CPCAP_NUM_REGULATORS
};

enum cpcap_reg {
 CPCAP_REG_START,

 CPCAP_REG_INT1 = CPCAP_REG_START,
 CPCAP_REG_INT2,
 CPCAP_REG_INT3,
 CPCAP_REG_INT4,
 CPCAP_REG_INTM1,
 CPCAP_REG_INTM2,
 CPCAP_REG_INTM3,
 CPCAP_REG_INTM4,
 CPCAP_REG_INTS1,
 CPCAP_REG_INTS2,
 CPCAP_REG_INTS3,
 CPCAP_REG_INTS4,
 CPCAP_REG_ASSIGN1,
 CPCAP_REG_ASSIGN2,
 CPCAP_REG_ASSIGN3,
 CPCAP_REG_ASSIGN4,
 CPCAP_REG_ASSIGN5,
 CPCAP_REG_ASSIGN6,
 CPCAP_REG_VERSC1,
 CPCAP_REG_VERSC2,

 CPCAP_REG_MI1,
 CPCAP_REG_MIM1,
 CPCAP_REG_MI2,
 CPCAP_REG_MIM2,
 CPCAP_REG_UCC1,
 CPCAP_REG_UCC2,
 CPCAP_REG_PC1,
 CPCAP_REG_PC2,
 CPCAP_REG_BPEOL,
 CPCAP_REG_PGC,
 CPCAP_REG_MT1,
 CPCAP_REG_MT2,
 CPCAP_REG_MT3,
 CPCAP_REG_PF,

 CPCAP_REG_SCC,
 CPCAP_REG_SW1,
 CPCAP_REG_SW2,
 CPCAP_REG_UCTM,
 CPCAP_REG_TOD1,
 CPCAP_REG_TOD2,
 CPCAP_REG_TODA1,
 CPCAP_REG_TODA2,
 CPCAP_REG_DAY,
 CPCAP_REG_DAYA,
 CPCAP_REG_VAL1,
 CPCAP_REG_VAL2,

 CPCAP_REG_SDVSPLL,
 CPCAP_REG_SI2CC1,
 CPCAP_REG_Si2CC2,
 CPCAP_REG_S1C1,
 CPCAP_REG_S1C2,
 CPCAP_REG_S2C1,
 CPCAP_REG_S2C2,
 CPCAP_REG_S3C,
 CPCAP_REG_S4C1,
 CPCAP_REG_S4C2,
 CPCAP_REG_S5C,
 CPCAP_REG_S6C,
 CPCAP_REG_VCAMC,
 CPCAP_REG_VCSIC,
 CPCAP_REG_VDACC,
 CPCAP_REG_VDIGC,
 CPCAP_REG_VFUSEC,
 CPCAP_REG_VHVIOC,
 CPCAP_REG_VSDIOC,
 CPCAP_REG_VPLLC,
 CPCAP_REG_VRF1C,
 CPCAP_REG_VRF2C,
 CPCAP_REG_VRFREFC,
 CPCAP_REG_VWLAN1C,
 CPCAP_REG_VWLAN2C,
 CPCAP_REG_VSIMC,
 CPCAP_REG_VVIBC,
 CPCAP_REG_VUSBC,
 CPCAP_REG_VUSBINT1C,
 CPCAP_REG_VUSBINT2C,
 CPCAP_REG_URT,
 CPCAP_REG_URM1,
 CPCAP_REG_URM2,

 CPCAP_REG_VAUDIOC,
 CPCAP_REG_CC,
 CPCAP_REG_CDI,
 CPCAP_REG_SDAC,
 CPCAP_REG_SDACDI,
 CPCAP_REG_TXI,
 CPCAP_REG_TXMP,
 CPCAP_REG_RXOA,
 CPCAP_REG_RXVC,
 CPCAP_REG_RXCOA,
 CPCAP_REG_RXSDOA,
 CPCAP_REG_RXEPOA,
 CPCAP_REG_RXLL,
 CPCAP_REG_A2LA,
 CPCAP_REG_MIPIS1,
 CPCAP_REG_MIPIS2,
 CPCAP_REG_MIPIS3,
 CPCAP_REG_LVAB,

 CPCAP_REG_CCC1,
 CPCAP_REG_CRM,
 CPCAP_REG_CCCC2,
 CPCAP_REG_CCS1,
 CPCAP_REG_CCS2,
 CPCAP_REG_CCA1,
 CPCAP_REG_CCA2,
 CPCAP_REG_CCM,
 CPCAP_REG_CCO,
 CPCAP_REG_CCI,

 CPCAP_REG_ADCC1,
 CPCAP_REG_ADCC2,
 CPCAP_REG_ADCD0,
 CPCAP_REG_ADCD1,
 CPCAP_REG_ADCD2,
 CPCAP_REG_ADCD3,
 CPCAP_REG_ADCD4,
 CPCAP_REG_ADCD5,
 CPCAP_REG_ADCD6,
 CPCAP_REG_ADCD7,
 CPCAP_REG_ADCAL1,
 CPCAP_REG_ADCAL2,

 CPCAP_REG_USBC1,
 CPCAP_REG_USBC2,
 CPCAP_REG_USBC3,
 CPCAP_REG_UVIDL,
 CPCAP_REG_UVIDH,
 CPCAP_REG_UPIDL,
 CPCAP_REG_UPIDH,
 CPCAP_REG_UFC1,
 CPCAP_REG_UFC2,
 CPCAP_REG_UFC3,
 CPCAP_REG_UIC1,
 CPCAP_REG_UIC2,
 CPCAP_REG_UIC3,
 CPCAP_REG_USBOTG1,
 CPCAP_REG_USBOTG2,
 CPCAP_REG_USBOTG3,
 CPCAP_REG_UIER1,
 CPCAP_REG_UIER2,
 CPCAP_REG_UIER3,
 CPCAP_REG_UIEF1,
 CPCAP_REG_UIEF2,
 CPCAP_REG_UIEF3,
 CPCAP_REG_UIS,
 CPCAP_REG_UIL,
 CPCAP_REG_USBD,
 CPCAP_REG_SCR1,
 CPCAP_REG_SCR2,
 CPCAP_REG_SCR3,
 CPCAP_REG_VMC,
 CPCAP_REG_OWDC,
 CPCAP_REG_GPIO0,
 CPCAP_REG_GPIO1,
 CPCAP_REG_GPIO2,
 CPCAP_REG_GPIO3,
 CPCAP_REG_GPIO4,
 CPCAP_REG_GPIO5,
 CPCAP_REG_GPIO6,

 CPCAP_REG_MDLC,
 CPCAP_REG_KLC,
 CPCAP_REG_ADLC,
 CPCAP_REG_REDC,
 CPCAP_REG_GREENC,
 CPCAP_REG_BLUEC,
 CPCAP_REG_CFC,
 CPCAP_REG_ABC,
 CPCAP_REG_BLEDC,
 CPCAP_REG_CLEDC,

 CPCAP_REG_OW1C,
 CPCAP_REG_OW1D,
 CPCAP_REG_OW1I,
 CPCAP_REG_OW1IE,
 CPCAP_REG_OW1,
 CPCAP_REG_OW2C,
 CPCAP_REG_OW2D,
 CPCAP_REG_OW2I,
 CPCAP_REG_OW2IE,
 CPCAP_REG_OW2,
 CPCAP_REG_OW3C,
 CPCAP_REG_OW3D,
 CPCAP_REG_OW3I,
 CPCAP_REG_OW3IE,
 CPCAP_REG_OW3,
 CPCAP_REG_GCAIC,
 CPCAP_REG_GCAIM,
 CPCAP_REG_LGDIR,
 CPCAP_REG_LGPU,
 CPCAP_REG_LGPIN,
 CPCAP_REG_LGMASK,
 CPCAP_REG_LDEB,
 CPCAP_REG_LGDET,
 CPCAP_REG_LMISC,
 CPCAP_REG_LMACE,

 CPCAP_REG_END = CPCAP_REG_LMACE,

 CPCAP_REG_MAX
 = CPCAP_REG_END,

 CPCAP_REG_SIZE = CPCAP_REG_MAX + 1,
 CPCAP_REG_UNUSED = CPCAP_REG_MAX + 2,
};

enum {
 CPCAP_IOCTL_NUM_TEST__START,
 CPCAP_IOCTL_NUM_TEST_READ_REG,
 CPCAP_IOCTL_NUM_TEST_WRITE_REG,
 CPCAP_IOCTL_NUM_TEST__END,

 CPCAP_IOCTL_NUM_ADC__START,
 CPCAP_IOCTL_NUM_ADC_PHASE,
 CPCAP_IOCTL_NUM_ADC__END,

 CPCAP_IOCTL_NUM_BATT__START,
 CPCAP_IOCTL_NUM_BATT_DISPLAY_UPDATE,
 CPCAP_IOCTL_NUM_BATT_ATOD_ASYNC,
 CPCAP_IOCTL_NUM_BATT_ATOD_SYNC,
 CPCAP_IOCTL_NUM_BATT_ATOD_READ,
 CPCAP_IOCTL_NUM_BATT__END,

 CPCAP_IOCTL_NUM_UC__START,
 CPCAP_IOCTL_NUM_UC_MACRO_START,
 CPCAP_IOCTL_NUM_UC_MACRO_STOP,
 CPCAP_IOCTL_NUM_UC_GET_VENDOR,
 CPCAP_IOCTL_NUM_UC_SET_TURBO_MODE,
 CPCAP_IOCTL_NUM_UC__END,

 CPCAP_IOCTL_NUM_ACCY__START,
 CPCAP_IOCTL_NUM_ACCY_WHISPER,
 CPCAP_IOCTL_NUM_ACCY__END,
};

enum cpcap_irqs {
 CPCAP_IRQ__START,
 CPCAP_IRQ_HSCLK = CPCAP_IRQ_INT1_INDEX,
 CPCAP_IRQ_PRIMAC,
 CPCAP_IRQ_SECMAC,
 CPCAP_IRQ_LOWBPL,
 CPCAP_IRQ_SEC2PRI,
 CPCAP_IRQ_LOWBPH,
 CPCAP_IRQ_EOL,
 CPCAP_IRQ_TS,
 CPCAP_IRQ_ADCDONE,
 CPCAP_IRQ_HS,
 CPCAP_IRQ_MB2,
 CPCAP_IRQ_VBUSOV,
 CPCAP_IRQ_RVRS_CHRG,
 CPCAP_IRQ_CHRG_DET,
 CPCAP_IRQ_IDFLOAT,
 CPCAP_IRQ_IDGND,

 CPCAP_IRQ_SE1 = CPCAP_IRQ_INT2_INDEX,
 CPCAP_IRQ_SESSEND,
 CPCAP_IRQ_SESSVLD,
 CPCAP_IRQ_VBUSVLD,
 CPCAP_IRQ_CHRG_CURR1,
 CPCAP_IRQ_CHRG_CURR2,
 CPCAP_IRQ_RVRS_MODE,
 CPCAP_IRQ_ON,
 CPCAP_IRQ_ON2,
 CPCAP_IRQ_CLK,
 CPCAP_IRQ_1HZ,
 CPCAP_IRQ_PTT,
 CPCAP_IRQ_SE0CONN,
 CPCAP_IRQ_CHRG_SE1B,
 CPCAP_IRQ_UART_ECHO_OVERRUN,
 CPCAP_IRQ_EXTMEMHD,

 CPCAP_IRQ_WARM = CPCAP_IRQ_INT3_INDEX,
 CPCAP_IRQ_SYSRSTR,
 CPCAP_IRQ_SOFTRST,
 CPCAP_IRQ_DIEPWRDWN,
 CPCAP_IRQ_DIETEMPH,
 CPCAP_IRQ_PC,
 CPCAP_IRQ_OFLOWSW,
 CPCAP_IRQ_TODA,
 CPCAP_IRQ_OPT_SEL_DTCH,
 CPCAP_IRQ_OPT_SEL_STATE,
 CPCAP_IRQ_ONEWIRE1,
 CPCAP_IRQ_ONEWIRE2,
 CPCAP_IRQ_ONEWIRE3,
 CPCAP_IRQ_UCRESET,
 CPCAP_IRQ_PWRGOOD,
 CPCAP_IRQ_USBDPLLCLK,

 CPCAP_IRQ_DPI = CPCAP_IRQ_INT4_INDEX,
 CPCAP_IRQ_DMI,
 CPCAP_IRQ_UCBUSY,
 CPCAP_IRQ_GCAI_CURR1,
 CPCAP_IRQ_GCAI_CURR2,
 CPCAP_IRQ_SB_MAX_RETRANSMIT_ERR,
 CPCAP_IRQ_BATTDETB,
 CPCAP_IRQ_PRIHALT,
 CPCAP_IRQ_SECHALT,
 CPCAP_IRQ_CC_CAL,

 CPCAP_IRQ_UC_PRIROMR = CPCAP_IRQ_INT5_INDEX,
 CPCAP_IRQ_UC_PRIRAMW,
 CPCAP_IRQ_UC_PRIRAMR,
 CPCAP_IRQ_UC_USEROFF,
 CPCAP_IRQ_UC_PRIMACRO_4,
 CPCAP_IRQ_UC_PRIMACRO_5,
 CPCAP_IRQ_UC_PRIMACRO_6,
 CPCAP_IRQ_UC_PRIMACRO_7,
 CPCAP_IRQ_UC_PRIMACRO_8,
 CPCAP_IRQ_UC_PRIMACRO_9,
 CPCAP_IRQ_UC_PRIMACRO_10,
 CPCAP_IRQ_UC_PRIMACRO_11,
 CPCAP_IRQ_UC_PRIMACRO_12,
 CPCAP_IRQ_UC_PRIMACRO_13,
 CPCAP_IRQ_UC_PRIMACRO_14,
 CPCAP_IRQ_UC_PRIMACRO_15,
 CPCAP_IRQ__NUM
};

enum cpcap_adc_bank0 {
 CPCAP_ADC_AD0_BATTDETB,
 CPCAP_ADC_BATTP,
 CPCAP_ADC_VBUS,
 CPCAP_ADC_AD3,
 CPCAP_ADC_BPLUS_AD4,
 CPCAP_ADC_CHG_ISENSE,
 CPCAP_ADC_BATTI_ADC,
 CPCAP_ADC_USB_ID,

 CPCAP_ADC_BANK0_NUM,
};

enum cpcap_adc_bank1 {
 CPCAP_ADC_AD8,
 CPCAP_ADC_AD9,
 CPCAP_ADC_LICELL,
 CPCAP_ADC_HV_BATTP,
 CPCAP_ADC_TSX1_AD12,
 CPCAP_ADC_TSX2_AD13,
 CPCAP_ADC_TSY1_AD14,
 CPCAP_ADC_TSY2_AD15,

 CPCAP_ADC_BANK1_NUM,
};

enum cpcap_adc_format {
 CPCAP_ADC_FORMAT_RAW,
 CPCAP_ADC_FORMAT_PHASED,
 CPCAP_ADC_FORMAT_CONVERTED,
};

enum cpcap_adc_timing {
 CPCAP_ADC_TIMING_IMM,
 CPCAP_ADC_TIMING_IN,
 CPCAP_ADC_TIMING_OUT,
};

enum cpcap_adc_type {
 CPCAP_ADC_TYPE_BANK_0,
 CPCAP_ADC_TYPE_BANK_1,
 CPCAP_ADC_TYPE_BATT_PI,
};

enum cpcap_macro {
 CPCAP_MACRO_ROMR,
 CPCAP_MACRO_RAMW,
 CPCAP_MACRO_RAMR,
 CPCAP_MACRO_USEROFF,
 CPCAP_MACRO_4,
 CPCAP_MACRO_5,
 CPCAP_MACRO_6,
 CPCAP_MACRO_7,
 CPCAP_MACRO_8,
 CPCAP_MACRO_9,
 CPCAP_MACRO_10,
 CPCAP_MACRO_11,
 CPCAP_MACRO_12,
 CPCAP_MACRO_13,
 CPCAP_MACRO_14,
 CPCAP_MACRO_15,

 CPCAP_MACRO__END,
};

enum cpcap_vendor {
 CPCAP_VENDOR_ST,
 CPCAP_VENDOR_TI,
};

enum cpcap_revision {
 CPCAP_REVISION_1_0 = 0x08,
 CPCAP_REVISION_1_1 = 0x09,
 CPCAP_REVISION_2_0 = 0x10,
 CPCAP_REVISION_2_1 = 0x11,
};

enum cpcap_batt_usb_model {
 CPCAP_BATT_USB_MODEL_NONE,
 CPCAP_BATT_USB_MODEL_USB,
 CPCAP_BATT_USB_MODEL_FACTORY,
};

struct cpcap_spi_init_data {
 enum cpcap_reg reg;
 unsigned short data;
};

struct cpcap_adc_ato {
 unsigned short ato_in;
 unsigned short atox_in;
 unsigned short adc_ps_factor_in;
 unsigned short atox_ps_factor_in;
 unsigned short ato_out;
 unsigned short atox_out;
 unsigned short adc_ps_factor_out;
 unsigned short atox_ps_factor_out;
};

struct cpcap_batt_data {
 int status;
 int health;
 int present;
 int capacity;
 int batt_volt;
 int batt_temp;
};

struct cpcap_batt_ac_data {
 int online;
};

struct cpcap_batt_usb_data {
 int online;
 int current_now;
 enum cpcap_batt_usb_model model;
};

struct cpcap_device;

struct cpcap_adc_us_request {
 enum cpcap_adc_format format;
 enum cpcap_adc_timing timing;
 enum cpcap_adc_type type;
 int status;
 int result[CPCAP_ADC_BANK0_NUM];
};

struct cpcap_adc_phase {
 signed char offset_batti;
 unsigned char slope_batti;
 signed char offset_chrgi;
 unsigned char slope_chrgi;
 signed char offset_battp;
 unsigned char slope_battp;
 signed char offset_bp;
 unsigned char slope_bp;
 signed char offset_battt;
 unsigned char slope_battt;
 signed char offset_chrgv;
 unsigned char slope_chrgv;
};

struct cpcap_regacc {
 unsigned short reg;
 unsigned short value;
 unsigned short mask;
};

struct cpcap_whisper_request {
 unsigned int cmd;
 char dock_id[CPCAP_WHISPER_ID_SIZE];
 char dock_prop[CPCAP_WHISPER_PROP_SIZE];
};

#define CPCAP_IOCTL_TEST_READ_REG   _IOWR(0, CPCAP_IOCTL_NUM_TEST_READ_REG, struct cpcap_regacc*)

#define CPCAP_IOCTL_TEST_WRITE_REG   _IOWR(0, CPCAP_IOCTL_NUM_TEST_WRITE_REG, struct cpcap_regacc*)

#define CPCAP_IOCTL_ADC_PHASE   _IOWR(0, CPCAP_IOCTL_NUM_ADC_PHASE, struct cpcap_adc_phase*)

#define CPCAP_IOCTL_BATT_DISPLAY_UPDATE   _IOW(0, CPCAP_IOCTL_NUM_BATT_DISPLAY_UPDATE, struct cpcap_batt_data*)

#define CPCAP_IOCTL_BATT_ATOD_ASYNC   _IOW(0, CPCAP_IOCTL_NUM_BATT_ATOD_ASYNC, struct cpcap_adc_us_request*)

#define CPCAP_IOCTL_BATT_ATOD_SYNC   _IOWR(0, CPCAP_IOCTL_NUM_BATT_ATOD_SYNC, struct cpcap_adc_us_request*)

#define CPCAP_IOCTL_BATT_ATOD_READ   _IOWR(0, CPCAP_IOCTL_NUM_BATT_ATOD_READ, struct cpcap_adc_us_request*)

#define CPCAP_IOCTL_UC_MACRO_START   _IOWR(0, CPCAP_IOCTL_NUM_UC_MACRO_START, enum cpcap_macro)

#define CPCAP_IOCTL_UC_MACRO_STOP   _IOWR(0, CPCAP_IOCTL_NUM_UC_MACRO_STOP, enum cpcap_macro)

#define CPCAP_IOCTL_UC_GET_VENDOR   _IOWR(0, CPCAP_IOCTL_NUM_UC_GET_VENDOR, enum cpcap_vendor)

#define CPCAP_IOCTL_UC_SET_TURBO_MODE   _IOW(0, CPCAP_IOCTL_NUM_UC_SET_TURBO_MODE, unsigned short)

#define CPCAP_IOCTL_ACCY_WHISPER   _IOW(0, CPCAP_IOCTL_NUM_ACCY_WHISPER, struct cpcap_whisper_request*)

#endif

