mirror of
https://github.com/genesi/linux-legacy.git
synced 2026-02-12 05:34:44 +00:00
This is i.MX BSP 5.0.0 release ported to 2.6.31 Signed-off-by: Rob Herring <r.herring@freescale.com> Signed-off-by: Alan Tull <r80115@freescale.com> Signed-off-by: Xinyu Chen <xinyu.chen@freescale.com>
1109 lines
18 KiB
C
1109 lines
18 KiB
C
/*
|
|
* 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__ */
|