summaryrefslogtreecommitdiff
path: root/include/linux/pmic_external.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/pmic_external.h')
-rw-r--r--include/linux/pmic_external.h1108
1 files changed, 1108 insertions, 0 deletions
diff --git a/include/linux/pmic_external.h b/include/linux/pmic_external.h
new file mode 100644
index 000000000000..96d61b740666
--- /dev/null
+++ b/include/linux/pmic_external.h
@@ -0,0 +1,1108 @@
+/*
+ * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+/*
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+#ifndef __ASM_ARCH_MXC_PMIC_EXTERNAL_H__
+#define __ASM_ARCH_MXC_PMIC_EXTERNAL_H__
+
+#ifdef __KERNEL__
+#include <linux/list.h>
+#endif
+
+/*!
+ * @defgroup PMIC_DRVRS PMIC Drivers
+ */
+
+/*!
+ * @defgroup PMIC_CORE PMIC Protocol Drivers
+ * @ingroup PMIC_DRVRS
+ */
+
+/*!
+ * @file arch-mxc/pmic_external.h
+ * @brief This file contains interface of PMIC protocol driver.
+ *
+ * @ingroup PMIC_CORE
+ */
+
+#include <linux/ioctl.h>
+#include <linux/pmic_status.h>
+
+/*!
+ * This is the enumeration of versions of PMIC
+ */
+typedef enum {
+ PMIC_MC13783 = 1, /*!< MC13783 */
+ PMIC_SC55112 = 2, /*!< SC55112 */
+ PMIC_MC13892 = 3,
+ PMIC_MC34704 = 4
+} pmic_id_t;
+
+/*!
+ * @struct pmic_version_t
+ * @brief PMIC version and revision
+ */
+typedef struct {
+ /*!
+ * PMIC version identifier.
+ */
+ pmic_id_t id;
+ /*!
+ * Revision of the PMIC.
+ */
+ int revision;
+} pmic_version_t;
+
+/*!
+ * struct pmic_event_callback_t
+ * @brief This structure contains callback function pointer and its
+ * parameter to be used when un/registering and launching a callback
+ * for an event.
+ */
+typedef struct {
+ /*!
+ * call back function
+ */
+ void (*func) (void *);
+
+ /*!
+ * call back function parameter
+ */
+ void *param;
+} pmic_event_callback_t;
+
+/*!
+ * This structure is used with IOCTL.
+ * It defines register, register value, register mask and event number
+ */
+typedef struct {
+ /*!
+ * register number
+ */
+ int reg;
+ /*!
+ * value of register
+ */
+ unsigned int reg_value;
+ /*!
+ * mask of bits, only used with PMIC_WRITE_REG
+ */
+ unsigned int reg_mask;
+} register_info;
+
+/*!
+ * @name IOCTL definitions for sc55112 core driver
+ */
+/*! @{ */
+/*! Read a PMIC register */
+#define PMIC_READ_REG _IOWR('P', 0xa0, register_info*)
+/*! Write a PMIC register */
+#define PMIC_WRITE_REG _IOWR('P', 0xa1, register_info*)
+/*! Subscribe a PMIC interrupt event */
+#define PMIC_SUBSCRIBE _IOR('P', 0xa2, int)
+/*! Unsubscribe a PMIC interrupt event */
+#define PMIC_UNSUBSCRIBE _IOR('P', 0xa3, int)
+/*! Subscribe a PMIC event for user notification*/
+#define PMIC_NOTIFY_USER _IOR('P', 0xa4, int)
+/*! Get the PMIC event occured for which user recieved notification */
+#define PMIC_GET_NOTIFY _IOW('P', 0xa5, int)
+/*! @} */
+
+/*!
+ * This is PMIC registers valid bits
+ */
+#define PMIC_ALL_BITS 0xFFFFFF
+#define PMIC_MAX_EVENTS 48
+
+#define PMIC_ARBITRATION "NULL"
+
+#ifdef CONFIG_MXC_PMIC_MC13783
+/*!
+ * This is the enumeration of register names of MC13783
+ */
+typedef enum {
+ /*!
+ * REG_INTERRUPT_STATUS_0
+ */
+ REG_INTERRUPT_STATUS_0 = 0,
+ /*!
+ * REG_INTERRUPT_MASK_0
+ */
+ REG_INTERRUPT_MASK_0,
+ /*!
+ * REG_INTERRUPT_SENSE_0
+ */
+ REG_INTERRUPT_SENSE_0,
+ /*!
+ * REG_INTERRUPT_STATUS_1
+ */
+ REG_INTERRUPT_STATUS_1,
+ /*!
+ * REG_INTERRUPT_MASK_1
+ */
+ REG_INTERRUPT_MASK_1,
+ /*!
+ * REG_INTERRUPT_SENSE_1
+ */
+ REG_INTERRUPT_SENSE_1,
+ /*!
+ * REG_POWER_UP_MODE_SENSE
+ */
+ REG_POWER_UP_MODE_SENSE,
+ /*!
+ * REG_REVISION
+ */
+ REG_REVISION,
+ /*!
+ * REG_SEMAPHORE
+ */
+ REG_SEMAPHORE,
+ /*!
+ * REG_ARBITRATION_PERIPHERAL_AUDIO
+ */
+ REG_ARBITRATION_PERIPHERAL_AUDIO,
+ /*!
+ * REG_ARBITRATION_SWITCHERS
+ */
+ REG_ARBITRATION_SWITCHERS,
+ /*!
+ * REG_ARBITRATION_REGULATORS_0
+ */
+ REG_ARBITRATION_REGULATORS_0,
+ /*!
+ * REG_ARBITRATION_REGULATORS_1
+ */
+ REG_ARBITRATION_REGULATORS_1,
+ /*!
+ * REG_POWER_CONTROL_0
+ */
+ REG_POWER_CONTROL_0,
+ /*!
+ * REG_POWER_CONTROL_1
+ */
+ REG_POWER_CONTROL_1,
+ /*!
+ * REG_POWER_CONTROL_2
+ */
+ REG_POWER_CONTROL_2,
+ /*!
+ * REG_REGEN_ASSIGNMENT
+ */
+ REG_REGEN_ASSIGNMENT,
+ /*!
+ * REG_CONTROL_SPARE
+ */
+ REG_CONTROL_SPARE,
+ /*!
+ * REG_MEMORY_A
+ */
+ REG_MEMORY_A,
+ /*!
+ * REG_MEMORY_B
+ */
+ REG_MEMORY_B,
+ /*!
+ * REG_RTC_TIME
+ */
+ REG_RTC_TIME,
+ /*!
+ * REG_RTC_ALARM
+ */
+ REG_RTC_ALARM,
+ /*!
+ * REG_RTC_DAY
+ */
+ REG_RTC_DAY,
+ /*!
+ * REG_RTC_DAY_ALARM
+ */
+ REG_RTC_DAY_ALARM,
+ /*!
+ * REG_SWITCHERS_0
+ */
+ REG_SWITCHERS_0,
+ /*!
+ * REG_SWITCHERS_1
+ */
+ REG_SWITCHERS_1,
+ /*!
+ * REG_SWITCHERS_2
+ */
+ REG_SWITCHERS_2,
+ /*!
+ * REG_SWITCHERS_3
+ */
+ REG_SWITCHERS_3,
+ /*!
+ * REG_SWITCHERS_4
+ */
+ REG_SWITCHERS_4,
+ /*!
+ * REG_SWITCHERS_5
+ */
+ REG_SWITCHERS_5,
+ /*!
+ * REG_REGULATOR_SETTING_0
+ */
+ REG_REGULATOR_SETTING_0,
+ /*!
+ * REG_REGULATOR_SETTING_1
+ */
+ REG_REGULATOR_SETTING_1,
+ /*!
+ * REG_REGULATOR_MODE_0
+ */
+ REG_REGULATOR_MODE_0,
+ /*!
+ * REG_REGULATOR_MODE_1
+ */
+ REG_REGULATOR_MODE_1,
+ /*!
+ * REG_POWER_MISCELLANEOUS
+ */
+ REG_POWER_MISCELLANEOUS,
+ /*!
+ * REG_POWER_SPARE
+ */
+ REG_POWER_SPARE,
+ /*!
+ * REG_AUDIO_RX_0
+ */
+ REG_AUDIO_RX_0,
+ /*!
+ * REG_AUDIO_RX_1
+ */
+ REG_AUDIO_RX_1,
+ /*!
+ * REG_AUDIO_TX
+ */
+ REG_AUDIO_TX,
+ /*!
+ * REG_AUDIO_SSI_NETWORK
+ */
+ REG_AUDIO_SSI_NETWORK,
+ /*!
+ * REG_AUDIO_CODEC
+ */
+ REG_AUDIO_CODEC,
+ /*!
+ * REG_AUDIO_STEREO_DAC
+ */
+ REG_AUDIO_STEREO_DAC,
+ /*!
+ * REG_AUDIO_SPARE
+ */
+ REG_AUDIO_SPARE,
+ /*!
+ * REG_ADC_0
+ */
+ REG_ADC_0,
+ /*!
+ * REG_ADC_1
+ */
+ REG_ADC_1,
+ /*!
+ * REG_ADC_2
+ */
+ REG_ADC_2,
+ /*!
+ * REG_ADC_3
+ */
+ REG_ADC_3,
+ /*!
+ * REG_ADC_4
+ */
+ REG_ADC_4,
+ /*!
+ * REG_CHARGER
+ */
+ REG_CHARGER,
+ /*!
+ * REG_USB
+ */
+ REG_USB,
+ /*!
+ * REG_CHARGE_USB_SPARE
+ */
+ REG_CHARGE_USB_SPARE,
+ /*!
+ * REG_LED_CONTROL_0
+ */
+ REG_LED_CONTROL_0,
+ /*!
+ * REG_LED_CONTROL_1
+ */
+ REG_LED_CONTROL_1,
+ /*!
+ * REG_LED_CONTROL_2
+ */
+ REG_LED_CONTROL_2,
+ /*!
+ * REG_LED_CONTROL_3
+ */
+ REG_LED_CONTROL_3,
+ /*!
+ * REG_LED_CONTROL_4
+ */
+ REG_LED_CONTROL_4,
+ /*!
+ * REG_LED_CONTROL_5
+ */
+ REG_LED_CONTROL_5,
+ /*!
+ * REG_SPARE
+ */
+ REG_SPARE,
+ /*!
+ * REG_TRIM_0
+ */
+ REG_TRIM_0,
+ /*!
+ * REG_TRIM_1
+ */
+ REG_TRIM_1,
+ /*!
+ * REG_TEST_0
+ */
+ REG_TEST_0,
+ /*!
+ * REG_TEST_1
+ */
+ REG_TEST_1,
+ /*!
+ * REG_TEST_2
+ */
+ REG_TEST_2,
+ /*!
+ * REG_TEST_3
+ */
+ REG_TEST_3,
+ /*!
+ * REG_NB
+ */
+ REG_NB,
+} pmic_reg;
+
+/*!
+ * This is event list of mc13783 interrupt
+ */
+
+typedef enum {
+ /*!
+ * ADC has finished requested conversions
+ */
+ EVENT_ADCDONEI = 0,
+ /*!
+ * ADCBIS has finished requested conversions
+ */
+ EVENT_ADCBISDONEI = 1,
+ /*!
+ * Touchscreen wakeup
+ */
+ EVENT_TSI = 2,
+ /*!
+ * ADC reading above high limit
+ */
+ EVENT_WHIGHI = 3,
+ /*!
+ * ADC reading below low limit
+ */
+ EVENT_WLOWI = 4,
+ /*!
+ * Charger attach and removal
+ */
+ EVENT_CHGDETI = 6,
+ /*!
+ * Charger over-voltage detection
+ */
+ EVENT_CHGOVI = 7,
+ /*!
+ * Charger path reverse current
+ */
+ EVENT_CHGREVI = 8,
+ /*!
+ * Charger path short circuit
+ */
+ EVENT_CHGSHORTI = 9,
+ /*!
+ * BP regulator current or voltage regulation
+ */
+ EVENT_CCCVI = 10,
+ /*!
+ * Charge current below threshold
+ */
+ EVENT_CHRGCURRI = 11,
+ /*!
+ * BP turn on threshold detection
+ */
+ EVENT_BPONI = 12,
+ /*!
+ * End of life / low battery detect
+ */
+ EVENT_LOBATLI = 13,
+ /*!
+ * Low battery warning
+ */
+ EVENT_LOBATHI = 14,
+ /*!
+ * USB detect
+ */
+ EVENT_USBI = 16,
+ /*!
+ * USB ID Line detect
+ */
+ EVENT_IDI = 19,
+ /*!
+ * Single ended 1 detect
+ */
+ EVENT_SE1I = 21,
+ /*!
+ * Car-kit detect
+ */
+ EVENT_CKDETI = 22,
+ /*!
+ * 1 Hz time-tick
+ */
+ EVENT_E1HZI = 24,
+ /*!
+ * Time of day alarm
+ */
+ EVENT_TODAI = 25,
+ /*!
+ * ON1B event
+ */
+ EVENT_ONOFD1I = 27,
+ /*!
+ * ON2B event
+ */
+ EVENT_ONOFD2I = 28,
+ /*!
+ * ON3B event
+ */
+ EVENT_ONOFD3I = 29,
+ /*!
+ * System reset
+ */
+ EVENT_SYSRSTI = 30,
+ /*!
+ * RTC reset occurred
+ */
+ EVENT_RTCRSTI = 31,
+ /*!
+ * Power cut event
+ */
+ EVENT_PCI = 32,
+ /*!
+ * Warm start event
+ */
+ EVENT_WARMI = 33,
+ /*!
+ * Memory hold event
+ */
+ EVENT_MEMHLDI = 34,
+ /*!
+ * Power ready
+ */
+ EVENT_PWRRDYI = 35,
+ /*!
+ * Thermal warning lower threshold
+ */
+ EVENT_THWARNLI = 36,
+ /*!
+ * Thermal warning higher threshold
+ */
+ EVENT_THWARNHI = 37,
+ /*!
+ * Clock source change
+ */
+ EVENT_CLKI = 38,
+ /*!
+ * Semaphore
+ */
+ EVENT_SEMAFI = 39,
+ /*!
+ * Microphone bias 2 detect
+ */
+ EVENT_MC2BI = 41,
+ /*!
+ * Headset attach
+ */
+ EVENT_HSDETI = 42,
+ /*!
+ * Stereo headset detect
+ */
+ EVENT_HSLI = 43,
+ /*!
+ * Thermal shutdown ALSP
+ */
+ EVENT_ALSPTHI = 44,
+ /*!
+ * Short circuit on AHS outputs
+ */
+ EVENT_AHSSHORTI = 45,
+ /*!
+ * number of event
+ */
+ EVENT_NB,
+} type_event;
+
+/*!
+ * This enumeration all senses of MC13783.
+ */
+typedef enum {
+ /*!
+ * Charger attach sense
+ */
+ SENSE_CHGDETS = 6,
+ /*!
+ * Charger over-voltage sense
+ */
+ SENSE_CHGOVS,
+ /*!
+ * Charger reverse current
+ * If 1 current flows into phone
+ */
+ SENSE_CHGREVS,
+ /*!
+ * Charger short circuit
+ */
+ SENSE_CHGSHORTS,
+ /*!
+ * Charger regulator operating mode
+ */
+ SENSE_CCCVS,
+ /*!
+ * Charger current below threshold
+ */
+ SENSE_CHGCURRS,
+ /*!
+ * BP turn on
+ */
+ SENSE_BPONS,
+ /*!
+ * Low bat detect
+ */
+ SENSE_LOBATLS,
+ /*!
+ * Low bat warning
+ */
+ SENSE_LOBATHS,
+ /*!
+ * UDPS
+ */
+ SENSE_UDPS,
+ /*!
+ * USB 4V4
+ */
+ SENSE_USB4V4S,
+ /*!
+ * USB 2V0
+ */
+ SENSE_USB2V0S,
+ /*!
+ * USB 0V8
+ */
+ SENSE_USB0V8S,
+ /*!
+ * ID Floats
+ */
+ SENSE_ID_FLOATS,
+ /*!
+ * ID Gnds
+ */
+ SENSE_ID_GNDS,
+ /*!
+ * Single ended
+ */
+ SENSE_SE1S,
+ /*!
+ * Car-kit detect
+ */
+ SENSE_CKDETS,
+ /*!
+ * UDMS
+ */
+ SENSE_UDMS,
+ /*!
+ * mic bias detect
+ */
+ SENSE_MC2BS,
+ /*!
+ * headset attached
+ */
+ SENSE_HSDETS,
+ /*!
+ * ST headset attached
+ */
+ SENSE_HSLS,
+ /*!
+ * Thermal shutdown ALSP
+ */
+ SENSE_ALSPTHS,
+ /*!
+ * short circuit on AHS
+ */
+ SENSE_AHSSHORTS,
+ /*!
+ * ON1B pin is hight
+ */
+ SENSE_ONOFD1S,
+ /*!
+ * ON2B pin is hight
+ */
+ SENSE_ONOFD2S,
+ /*!
+ * ON3B pin is hight
+ */
+ SENSE_ONOFD3S,
+ /*!
+ * System reset power ready
+ */
+ SENSE_PWRRDYS,
+ /*!
+ * Thermal warning higher threshold
+ */
+ SENSE_THWARNHS,
+ /*!
+ * Thermal warning lower threshold
+ */
+ SENSE_THWARNLS,
+ /*!
+ * Clock source is XTAL
+ */
+ SENSE_CLKS,
+} t_sensor;
+
+/*!
+ * This structure is used to read all sense bits of MC13783.
+ */
+typedef struct {
+ /*!
+ * Charger attach sense
+ */
+ bool sense_chgdets;
+ /*!
+ * Charger over-voltage sense
+ */
+ bool sense_chgovs;
+ /*!
+ * Charger reverse current
+ * If 1 current flows into phone
+ */
+ bool sense_chgrevs;
+ /*!
+ * Charger short circuit
+ */
+ bool sense_chgshorts;
+ /*!
+ * Charger regulator operating mode
+ */
+ bool sense_cccvs;
+ /*!
+ * Charger current below threshold
+ */
+ bool sense_chgcurrs;
+ /*!
+ * BP turn on
+ */
+ bool sense_bpons;
+ /*!
+ * Low bat detect
+ */
+ bool sense_lobatls;
+ /*!
+ * Low bat warning
+ */
+ bool sense_lobaths;
+ /*!
+ * USB 4V4
+ */
+ bool sense_usb4v4s;
+ /*!
+ * USB 2V0
+ */
+ bool sense_usb2v0s;
+ /*!
+ * USB 0V8
+ */
+ bool sense_usb0v8s;
+ /*!
+ * ID Floats
+ */
+ bool sense_id_floats;
+ /*!
+ * ID Gnds
+ */
+ bool sense_id_gnds;
+ /*!
+ * Single ended
+ */
+ bool sense_se1s;
+ /*!
+ * Car-kit detect
+ */
+ bool sense_ckdets;
+ /*!
+ * mic bias detect
+ */
+ bool sense_mc2bs;
+ /*!
+ * headset attached
+ */
+ bool sense_hsdets;
+ /*!
+ * ST headset attached
+ */
+ bool sense_hsls;
+ /*!
+ * Thermal shutdown ALSP
+ */
+ bool sense_alspths;
+ /*!
+ * short circuit on AHS
+ */
+ bool sense_ahsshorts;
+ /*!
+ * ON1B pin is hight
+ */
+ bool sense_onofd1s;
+ /*!
+ * ON2B pin is hight
+ */
+ bool sense_onofd2s;
+ /*!
+ * ON3B pin is hight
+ */
+ bool sense_onofd3s;
+ /*!
+ * System reset power ready
+ */
+ bool sense_pwrrdys;
+ /*!
+ * Thermal warning higher threshold
+ */
+ bool sense_thwarnhs;
+ /*!
+ * Thermal warning lower threshold
+ */
+ bool sense_thwarnls;
+ /*!
+ * Clock source is XTAL
+ */
+ bool sense_clks;
+} t_sensor_bits;
+
+#endif /*CONFIG_MXC_PMIC_MC13783 */
+
+#if defined(CONFIG_MXC_PMIC_MC13892_MODULE) || defined(CONFIG_MXC_PMIC_MC13892)
+enum {
+ REG_INT_STATUS0 = 0,
+ REG_INT_MASK0,
+ REG_INT_SENSE0,
+ REG_INT_STATUS1,
+ REG_INT_MASK1,
+ REG_INT_SENSE1,
+ REG_PU_MODE_S,
+ REG_IDENTIFICATION,
+ REG_UNUSED0,
+ REG_ACC0,
+ REG_ACC1, /*10 */
+ REG_UNUSED1,
+ REG_UNUSED2,
+ REG_POWER_CTL0,
+ REG_POWER_CTL1,
+ REG_POWER_CTL2,
+ REG_REGEN_ASSIGN,
+ REG_UNUSED3,
+ REG_MEM_A,
+ REG_MEM_B,
+ REG_RTC_TIME, /*20 */
+ REG_RTC_ALARM,
+ REG_RTC_DAY,
+ REG_RTC_DAY_ALARM,
+ REG_SW_0,
+ REG_SW_1,
+ REG_SW_2,
+ REG_SW_3,
+ REG_SW_4,
+ REG_SW_5,
+ REG_SETTING_0, /*30 */
+ REG_SETTING_1,
+ REG_MODE_0,
+ REG_MODE_1,
+ REG_POWER_MISC,
+ REG_UNUSED4,
+ REG_UNUSED5,
+ REG_UNUSED6,
+ REG_UNUSED7,
+ REG_UNUSED8,
+ REG_UNUSED9, /*40 */
+ REG_UNUSED10,
+ REG_UNUSED11,
+ REG_ADC0,
+ REG_ADC1,
+ REG_ADC2,
+ REG_ADC3,
+ REG_ADC4,
+ REG_CHARGE,
+ REG_USB0,
+ REG_USB1, /*50 */
+ REG_LED_CTL0,
+ REG_LED_CTL1,
+ REG_LED_CTL2,
+ REG_LED_CTL3,
+ REG_UNUSED12,
+ REG_UNUSED13,
+ REG_TRIM0,
+ REG_TRIM1,
+ REG_TEST0,
+ REG_TEST1, /*60 */
+ REG_TEST2,
+ REG_TEST3,
+ REG_TEST4,
+};
+
+typedef enum {
+ EVENT_ADCDONEI = 0,
+ EVENT_ADCBISDONEI = 1,
+ EVENT_TSI = 2,
+ EVENT_VBUSVI = 3,
+ EVENT_IDFACI = 4,
+ EVENT_USBOVI = 5,
+ EVENT_CHGDETI = 6,
+ EVENT_CHGFAULTI = 7,
+ EVENT_CHGREVI = 8,
+ EVENT_CHGRSHORTI = 9,
+ EVENT_CCCVI = 10,
+ EVENT_CHGCURRI = 11,
+ EVENT_BPONI = 12,
+ EVENT_LOBATLI = 13,
+ EVENT_LOBATHI = 14,
+ EVENT_IDFLOATI = 19,
+ EVENT_IDGNDI = 20,
+ EVENT_SE1I = 21,
+ EVENT_CKDETI = 22,
+ EVENT_1HZI = 24,
+ EVENT_TODAI = 25,
+ EVENT_PWRONI = 27,
+ EVENT_WDIRESETI = 29,
+ EVENT_SYSRSTI = 30,
+ EVENT_RTCRSTI = 31,
+ EVENT_PCI = 32,
+ EVENT_WARMI = 33,
+ EVENT_MEMHLDI = 34,
+ EVENT_THWARNLI = 36,
+ EVENT_THWARNHI = 37,
+ EVENT_CLKI = 38,
+ EVENT_SCPI = 40,
+ EVENT_LBPI = 44,
+ EVENT_NB,
+} type_event;
+
+typedef enum {
+ SENSE_VBUSVS = 3,
+ SENSE_IDFACS = 4,
+ SENSE_USBOVS = 5,
+ SENSE_CHGDETS = 6,
+ SENSE_CHGREVS = 8,
+ SENSE_CHGRSHORTS = 9,
+ SENSE_CCCVS = 10,
+ SENSE_CHGCURRS = 11,
+ SENSE_BPONS = 12,
+ SENSE_LOBATLS = 13,
+ SENSE_LOBATHS = 14,
+ SENSE_IDFLOATS = 19,
+ SENSE_IDGNDS = 20,
+ SENSE_SE1S = 21,
+ SENSE_PWRONS = 27,
+ SENSE_THWARNLS = 36,
+ SENSE_THWARNHS = 37,
+ SENSE_CLKS = 38,
+ SENSE_LBPS = 44,
+ SENSE_NB,
+} t_sensor;
+
+typedef struct {
+ bool sense_vbusvs;
+ bool sense_idfacs;
+ bool sense_usbovs;
+ bool sense_chgdets;
+ bool sense_chgrevs;
+ bool sense_chgrshorts;
+ bool sense_cccvs;
+ bool sense_chgcurrs;
+ bool sense_bpons;
+ bool sense_lobatls;
+ bool sense_lobaths;
+ bool sense_idfloats;
+ bool sense_idgnds;
+ bool sense_se1s;
+ bool sense_pwrons;
+ bool sense_thwarnls;
+ bool sense_thwarnhs;
+ bool sense_clks;
+ bool sense_lbps;
+} t_sensor_bits;
+
+extern struct i2c_client *mc13892_client;
+int pmic_i2c_24bit_read(struct i2c_client *client, unsigned int reg_num,
+ unsigned int *value);
+int pmic_read(int reg_num, unsigned int *reg_val);
+int pmic_write(int reg_num, const unsigned int reg_val);
+void gpio_pmic_active(void);
+void pmic_event_list_init(void);
+void mc13892_power_off(void);
+
+#endif
+
+#if defined(CONFIG_MXC_PMIC_MC34704_MODULE) || defined(CONFIG_MXC_PMIC_MC34704)
+
+typedef enum {
+ /* register names for mc34704 */
+ REG_MC34704_GENERAL1 = 0x01,
+ REG_MC34704_GENERAL2 = 0x02,
+ REG_MC34704_GENERAL3 = 0x03,
+ REG_MC34704_VGSET1 = 0x04,
+ REG_MC34704_VGSET2 = 0x05,
+ REG_MC34704_REG2SET1 = 0x06,
+ REG_MC34704_REG2SET2 = 0x07,
+ REG_MC34704_REG3SET1 = 0x08,
+ REG_MC34704_REG3SET2 = 0x09,
+ REG_MC34704_REG4SET1 = 0x0A,
+ REG_MC34704_REG4SET2 = 0x0B,
+ REG_MC34704_REG5SET1 = 0x0C,
+ REG_MC34704_REG5SET2 = 0x0D,
+ REG_MC34704_REG5SET3 = 0x0E,
+ REG_MC34704_REG6SET1 = 0x0F,
+ REG_MC34704_REG6SET2 = 0x10,
+ REG_MC34704_REG6SET3 = 0x11,
+ REG_MC34704_REG7SET1 = 0x12,
+ REG_MC34704_REG7SET2 = 0x13,
+ REG_MC34704_REG7SET3 = 0x14,
+ REG_MC34704_REG8SET1 = 0x15,
+ REG_MC34704_REG8SET2 = 0x16,
+ REG_MC34704_REG8SET3 = 0x17,
+ REG_MC34704_FAULTS = 0x18,
+ REG_MC34704_I2CSET1 = 0x19,
+ REG_MC34704_REG3DAC = 0x49,
+ REG_MC34704_REG7CR0 = 0x58,
+ REG_MC34704_REG7DAC = 0x59,
+ REG_NB = 0x60,
+} pmic_reg;
+
+typedef enum {
+ /* events for mc34704 */
+ EVENT_FLT1 = 0,
+ EVENT_FLT2,
+ EVENT_FLT3,
+ EVENT_FLT4,
+ EVENT_FLT5,
+ EVENT_FLT6,
+ EVENT_FLT7,
+ EVENT_FLT8,
+ EVENT_NB,
+} type_event;
+
+typedef enum {
+ MCU_SENSOR_NOT_SUPPORT
+} t_sensor;
+
+typedef enum {
+ MCU_SENSOR_BIT_NOT_SUPPORT
+} t_sensor_bits;
+
+#endif /* MXC_PMIC_MC34704 */
+
+/* EXPORTED FUNCTIONS */
+#ifdef __KERNEL__
+
+#if defined(CONFIG_MXC_PMIC)
+/*!
+ * This function is used to determine the PMIC type and its revision.
+ *
+ * @return Returns the PMIC type and its revision.
+ */
+pmic_version_t pmic_get_version(void);
+
+/*!
+ * This function is called by PMIC clients to read a register on PMIC.
+ *
+ * @param priority priority of access
+ * @param reg number of register
+ * @param reg_value return value of register
+ *
+ * @return This function returns PMIC_SUCCESS if successful.
+ */
+PMIC_STATUS pmic_read_reg(int reg, unsigned int *reg_value,
+ unsigned int reg_mask);
+/*!
+ * This function is called by PMIC clients to write a register on MC13783.
+ *
+ * @param priority priority of access
+ * @param reg number of register
+ * @param reg_value New value of register
+ * @param reg_mask Bitmap mask indicating which bits to modify
+ *
+ * @return This function returns PMIC_SUCCESS if successful.
+ */
+PMIC_STATUS pmic_write_reg(int reg, unsigned int reg_value,
+ unsigned int reg_mask);
+
+/*!
+ * This function is called by PMIC clients to subscribe on an event.
+ *
+ * @param event_sub structure of event, it contains type of event and callback
+ *
+ * @return This function returns PMIC_SUCCESS if successful.
+ */
+PMIC_STATUS pmic_event_subscribe(type_event event,
+ pmic_event_callback_t callback);
+/*!
+* This function is called by PMIC clients to un-subscribe on an event.
+*
+* @param event_unsub structure of event, it contains type of event and callback
+*
+* @return This function returns PMIC_SUCCESS if successful.
+*/
+PMIC_STATUS pmic_event_unsubscribe(type_event event,
+ pmic_event_callback_t callback);
+/*!
+* This function is called to read all sensor bits of PMIC.
+*
+* @param sensor Sensor to be checked.
+*
+* @return This function returns true if the sensor bit is high;
+* or returns false if the sensor bit is low.
+*/
+bool pmic_check_sensor(t_sensor sensor);
+
+/*!
+* This function checks one sensor of PMIC.
+*
+* @param sensor_bits structure of all sensor bits.
+*
+* @return This function returns PMIC_SUCCESS if successful.
+*/
+PMIC_STATUS pmic_get_sensors(t_sensor_bits * sensor_bits);
+
+void pmic_event_callback(type_event event);
+void pmic_event_list_init(void);
+
+#endif /*CONFIG_MXC_PMIC*/
+#endif /* __KERNEL__ */
+/* CONFIG_MXC_PMIC_MC13783 || CONFIG_MXC_PMIC_MC9SDZ60 */
+
+struct pmic_platform_data {
+ int (*init)(void *);
+ int power_key_irq;
+};
+
+#endif /* __ASM_ARCH_MXC_PMIC_EXTERNAL_H__ */