/* * Copyright 2004-2011 Freescale Semiconductor, Inc. All Rights Reserved. */ /* * The code contained herein is licensed under the GNU Lesser General * Public License. You may obtain a copy of the GNU Lesser General * Public License Version 2.1 or later at the following locations: * * http://www.opensource.org/licenses/lgpl-license.html * http://www.gnu.org/copyleft/lgpl.html */ #ifndef __ASM_ARCH_MXC_PMIC_BATTERY_H__ #define __ASM_ARCH_MXC_PMIC_BATTERY_H__ /*! * @defgroup PMIC_BATTERY PMIC Battery Driver * @ingroup PMIC_DRVRS */ /*! * @file arch-mxc/pmic_battery.h * @brief This is the header of PMIC Battery driver. * * @ingroup PMIC_BATTERY */ #include #include #include /*! * @name IOCTL user space interface */ /*! @{ */ /*! * Enable and disable charger. * Argument type: pointer to t_charger_setting */ #define PMIC_BATT_CHARGER_CONTROL _IOW('p', 0xc0, int) /*! * Set charger configuration. * Argument type: pointer to t_charger_setting */ #define PMIC_BATT_SET_CHARGER _IOW('p', 0xc1, int) /*! * Get charger configuration. * Argument type: pointer to t_charger_setting */ #define PMIC_BATT_GET_CHARGER _IOR('p', 0xc2, int) /*! * Get charger current. * Argument type: pointer to t_charger_setting */ #define PMIC_BATT_GET_CHARGER_CURRENT _IOR('p', 0xc3, int) /*! * Set EOL control * Argument type: pointer to t_eol_setting */ #define PMIC_BATT_EOL_CONTROL _IOW('p', 0xc4, int) /*! * Enable and disable charging LED. * Argument type: bool */ #define PMIC_BATT_LED_CONTROL _IOW('p', 0xc5, int) /*! * Enable and disable reverse supply. * Argument type: bool */ #define PMIC_BATT_REV_SUPP_CONTROL _IOW('p', 0xc6, int) /*! * Enable and disable unregulated charging mode. * Argument type: bool */ #define PMIC_BATT_UNREG_CONTROL _IOW('p', 0xc7, int) /*! * Set the output controls. * Argument type: t_control */ #define PMIC_BATT_SET_OUT_CONTROL _IOW('p', 0xc8, int) /*! * Set the over voltage threshold. * Argument type: int */ #define PMIC_BATT_SET_THRESHOLD _IOW('p', 0xc9, int) /*! * Get the charger voltage. * Argument type: int */ #define PMIC_BATT_GET_CHARGER_VOLTAGE _IOR('p', 0xca, int) /*! * Get the battery voltage. * Argument type: int */ #define PMIC_BATT_GET_BATTERY_VOLTAGE _IOR('p', 0xcb, int) /*! * Get the battery current. * Argument type: int */ #define PMIC_BATT_GET_BATTERY_CURRENT _IOR('p', 0xcc, int) /*! * Get the charger sensor. * Argument type: int */ #define PMIC_BATT_GET_CHARGER_SENSOR _IOR('p', 0xcd, int) /*! * Get the battery temperature. * Argument type: int */ #define PMIC_BATT_GET_BATTERY_TEMPERATURE _IOR('p', 0xce, int) /*! @} */ /*! * This enumeration defines battery chargers. */ typedef enum { BATT_MAIN_CHGR = 0, /*!< Main battery charger */ BATT_CELL_CHGR, /*!< Cell battery charger */ BATT_TRCKLE_CHGR /*!< Trickle charger (only available on mc13783) */ } t_batt_charger; /*! * This enumeration defines the bp threshold. */ typedef enum { BATT_BP_0 = 0, /*!< LOBATL UVDET + 0.2 */ BATT_BP_1, /*!< LOBATL UVDET + 0.3 */ BATT_BP_2, /*!< LOBATL UVDET + 0.4 */ BATT_BP_3 /*!< LOBATL UVDET + 0.5 */ } t_bp_threshold; /*! * This enumeration of all types of output controls */ typedef enum { /*! * controlled hardware */ CONTROL_HARDWARE = 0, /*! * BPFET is driven low, BATTFET is driven high */ CONTROL_BPFET_LOW, /*! * BPFET is driven high, BATTFET is driven low */ CONTROL_BPFET_HIGH, } t_control; /*! * This enumeration define all battery interrupt */ typedef enum { /*! * Charge detection interrupt */ BAT_IT_CHG_DET, /*! * Charge over voltage detection it */ BAT_IT_CHG_OVERVOLT, /*! * Charge path reverse current it */ BAT_IT_CHG_REVERSE, /*! * Charge path short circuitin revers supply mode it */ BAT_IT_CHG_SHORT_CIRCUIT, /*! * Charger has switched its mode (CC to CV or CV to CC) */ BAT_IT_CCCV, /*! * Charge current has dropped below its threshold */ BAT_IT_BELOW_THRESHOLD, } t_batt_event; /*! * This structure is used for the following battery changer control * IOCTLs: * - PMIC_BATT_CHARGER_CONTROL * - PMIC_BATT_SET_CHARGER * - PMIC_BATT_GET_CHARGER */ typedef struct { /*! * Charger */ t_batt_charger chgr; /*! * Turn on charger */ bool on; /*! * Charging voltage */ unsigned char c_voltage; /*! * Charging current */ unsigned char c_current; } t_charger_setting; /*! * This structure is used for EOL setting IOCTL PMIC_BATT_EOL_CONTROL */ typedef struct { /*! * Enable EOL comparator */ bool enable; /*! * c_voltage threshold - Used on SC55112 */ unsigned char threshold; /*! * bp threshold - Used on mc13783 */ t_bp_threshold typical; } t_eol_setting; /* EXPORTED FUNCTIONS */ #ifdef __KERNEL__ /*START: for 3ds hw event*/ /*! * Battery event type enum */ enum { BAT_EVENT_CHARGER_PLUG = 0x01, BAT_EVENT_CHARGER_UNPLUG = 0x02, BAT_EVENT_CHARGER_OVERVOLTAGE = 0x04, BAT_EVENT_BATTERY_LOW = 0x08, BAT_EVENT_POWER_FAILED = 0x10, BAT_EVENT_CHARGER_FULL = 0x20, } t_bat_event; /*END: for 3ds hw event*/ /*! * This function is used to start charging a battery. For different charger, * different c_voltage and current range are supported. \n * * * @param chgr Charger as defined in \b t_batt_charger. * @param c_voltage Charging voltage. * @param c_current Charging current. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_enable_charger(t_batt_charger chgr, unsigned char c_voltage, unsigned char c_current); /*! * This function turns off a charger. * * @param chgr Charger as defined in \b t_batt_charger. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_disable_charger(t_batt_charger chgr); /*! * This function is used to change the charger setting. * * @param chgr Charger as defined in \b t_batt_charger. * @param c_voltage Charging voltage. * @param c_current Charging current. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_set_charger(t_batt_charger chgr, unsigned char c_voltage, unsigned char c_current); /*! * This function is used to retrieve the charger setting. * * @param chgr Charger as defined in \b t_batt_charger. * @param c_voltage Output parameter for charging c_voltage setting. * @param c_current Output parameter for charging current setting. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_get_charger_setting(t_batt_charger chgr, unsigned char *c_voltage, unsigned char *c_current); /*! * This function is retrieves the main battery charging current. * * @param c_current Output parameter for charging current setting. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_get_charge_current(unsigned short *c_current); /*! * This function enables End-of-Life comparator. * * @param threshold End-of-Life threshold. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_enable_eol(unsigned char threshold); /*! * This function enables End-of-Life comparator. * * @param typical Falling Edge Threshold threshold. * @verbatim * BPDET UVDET LOBATL * ____ _____ ___________ * 0 2.6 UVDET + 0.2 * 1 2.6 UVDET + 0.3 * 2 2.6 UVDET + 0.4 * 3 2.6 UVDET + 0.5 * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_bp_enable_eol(t_bp_threshold typical); /*! * This function disables End-of-Life comparator. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_disable_eol(void); /*! * This function sets the output controls. * It sets the FETOVRD and FETCTRL bits of mc13783 * * @param control type of control. * * @return This function returns 0 if successful. */ PMIC_STATUS pmic_batt_set_out_control(t_control control); /*! * This function sets over voltage threshold. * * @param threshold value of over voltage threshold. * * @return This function returns 0 if successful. */ PMIC_STATUS pmic_batt_set_threshold(int threshold); /*! * This function controls charge LED. * * @param on If on is true, LED will be turned on, * or otherwise, LED will be turned off. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_led_control(bool on); /*! * This function sets reverse supply mode. * * @param enable If enable is true, reverse supply mode is enable, * or otherwise, reverse supply mode is disabled. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_set_reverse_supply(bool enable); /*! * This function sets unregulated charging mode on main battery. * * @param enable If enable is true, unregulated charging mode is * enable, or otherwise, disabled. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_set_unregulated(bool enable); /*! * This function sets a 5K pull down at CHRGRAW. * To be used in the dual path charging configuration. * * @param enable If enable is true, 5k pull down is * enable, or otherwise, disabled. * * @return This function returns PMIC_SUCCESS if successful. */ PMIC_STATUS pmic_batt_set_5k_pull(bool enable); /*! * This function is used to subscribe on battery event IT. * * @param event type of event. * @param callback event callback function. * * @return This function returns 0 if successful. */ PMIC_STATUS pmic_batt_event_subscribe(t_batt_event event, void *callback); /*! * This function is used to un subscribe on battery event IT. * * @param event type of event. * @param callback event callback function. * * @return This function returns 0 if successful. */ PMIC_STATUS pmic_batt_event_unsubscribe(t_batt_event event, void *callback); #endif /* __KERNEL__ */ #endif /* __ASM_ARCH_MXC_PMIC_BATTERY_H__ */