123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- /* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
- #ifndef __PM8XXX_CHARGER_H
- #define __PM8XXX_CHARGER_H
- #include <linux/errno.h>
- #include <linux/power_supply.h>
- #define PM8921_CHARGER_DEV_NAME "pm8921-charger"
- struct pm8xxx_charger_core_data {
- unsigned int vbat_channel;
- unsigned int batt_temp_channel;
- unsigned int batt_id_channel;
- };
- enum pm8921_chg_cold_thr {
- PM_SMBC_BATT_TEMP_COLD_THR__LOW,
- PM_SMBC_BATT_TEMP_COLD_THR__HIGH
- };
- enum pm8921_chg_hot_thr {
- PM_SMBC_BATT_TEMP_HOT_THR__LOW,
- PM_SMBC_BATT_TEMP_HOT_THR__HIGH
- };
- enum pm8921_usb_ov_threshold {
- PM_USB_OV_5P5V,
- PM_USB_OV_6V,
- PM_USB_OV_6P5V,
- PM_USB_OV_7V,
- };
- enum pm8921_usb_debounce_time {
- PM_USB_BYPASS_DEBOUNCER,
- PM_USB_DEBOUNCE_20P5MS,
- PM_USB_DEBOUNCE_40P5MS,
- PM_USB_DEBOUNCE_80P5MS,
- };
- enum pm8921_chg_led_src_config {
- LED_SRC_GND,
- LED_SRC_VPH_PWR,
- LED_SRC_5V,
- LED_SRC_MIN_VPH_5V,
- LED_SRC_BYPASS,
- };
- /**
- * struct pm8921_charger_platform_data -
- * valid range 4 to 512 min. PON default 120 min
- * @ttrkl_time: max trckl charging time in minutes
- * valid range 1 to 64 mins. PON default 15 min
- * @update_time: how often the userland be updated of the charging (msec)
- * @alarm_low_mv: the voltage (mV) when low battery alarm is triggered
- * @alarm_high_mv: the voltage (mV) when high battery alarm is triggered
- * @max_voltage: the max voltage (mV) the battery should be charged up to
- * @min_voltage: the voltage (mV) where charging method switches from
- * trickle to fast. This is also the minimum voltage the
- * system operates at
- * @uvd_thresh_voltage: the USB falling UVD threshold (mV) (PM8917 only)
- * @safe_current_ma: The upper limit of current allowed to be pushed in
- * battery. This ends up writing in a one time
- * programmable register.
- * @resume_voltage_delta: the (mV) drop to wait for before resume charging
- * after the battery has been fully charged
- * @resume_charge_percent: the % SOC the charger will drop to after the
- * battery is fully charged before resuming
- * charging.
- * @term_current: the charger current (mA) at which EOC happens
- * @cool_temp: the temperature (degC) at which the battery is
- * considered cool charging current and voltage is reduced.
- * Use INT_MIN to indicate not valid.
- * @warm_temp: the temperature (degC) at which the battery is
- * considered warm charging current and voltage is reduced
- * Use INT_MIN to indicate not valid.
- * @temp_check_period: The polling interval in seconds to check battery
- * temeperature if it has gone to cool or warm temperature
- * area
- * @max_bat_chg_current: Max charge current of the battery in mA
- * Usually 70% of full charge capacity
- * @usb_max_current: Maximum USB current in mA
- * @cool_bat_chg_current: chg current (mA) when the battery is cool
- * @warm_bat_chg_current: chg current (mA) when the battery is warm
- * @cool_bat_voltage: chg voltage (mV) when the battery is cool
- * @warm_bat_voltage: chg voltage (mV) when the battery is warm
- * @get_batt_capacity_percent:
- * a board specific function to return battery
- * capacity. If null - a default one will be used
- * @has_dc_supply: report DC online if this bit is set in board file
- * @trkl_voltage: the trkl voltage in (mV) below which hw controlled
- * trkl charging happens with linear charger
- * @weak_voltage: the weak voltage (mV) below which hw controlled
- * trkl charging happens with switching mode charger
- * @trkl_current: the trkl current in (mA) to use for trkl charging phase
- * @weak_current: the weak current in (mA) to use for weak charging phase
- * @vin_min: the input voltage regulation point (mV) - if the
- * voltage falls below this, the charger reduces charge
- * current or stop charging temporarily
- * @thermal_mitigation: the array of charge currents to use as temperature
- * increases
- * @thermal_levels: the number of thermal mitigation levels supported
- * @cold_thr: if high battery will be cold when VBAT_THERM goes above
- * 80% of VREF_THERM (typically 1.8volts), if low the
- * battery will be considered cold if VBAT_THERM goes above
- * 70% of VREF_THERM. Hardware defaults to low.
- * @hot_thr: if high the battery will be considered hot when the
- * VBAT_THERM goes below 35% of VREF_THERM, if low the
- * battery will be considered hot when VBAT_THERM goes
- * below 25% of VREF_THERM. Hardware defaults to low.
- * @rconn_mohm: resistance in milliOhm from the vbat sense to ground
- * with the battery terminals shorted. This indicates
- * resistance of the pads, connectors, battery terminals
- * and rsense.
- * @led_src_config: Power source for anode of charger indicator LED.
- * @btc_override: disable the comparators for conifugrations where a
- * suitable voltages don't appear on vbatt therm line
- * for the charger to detect battery is either cold / hot.
- * @btc_override_cold_degc: Temperature in degCelcius when the battery is
- * deemed cold and charging never happens. Used
- * only if btc_override = 1
- * @btc_override_hot_degc: Temperature in degCelcius when the battery is
- * deemed hot and charging never happens. Used
- * only if btc_override = 1
- * @btc_delay_ms: Delay in milliseconds to monitor the battery temperature
- * while charging when btc_override = 1
- * @btc_panic_if_cant_stop_chg: flag to instruct the driver to panic if the
- * driver couldn't stop charging when battery
- * temperature is out of bounds. Used only if
- * btc_override = 1
- * stop_chg_upon_expiry: flag to indicate that the charger driver should
- * stop charging the battery when the safety timer
- * expires. If not set the charger driver will
- * restart charging upon expiry.
- */
- struct pm8921_charger_platform_data {
- struct pm8xxx_charger_core_data charger_cdata;
- unsigned int ttrkl_time;
- unsigned int update_time;
- unsigned int max_voltage;
- unsigned int min_voltage;
- unsigned int uvd_thresh_voltage;
- unsigned int safe_current_ma;
- unsigned int alarm_low_mv;
- unsigned int alarm_high_mv;
- unsigned int resume_voltage_delta;
- int resume_charge_percent;
- unsigned int term_current;
- int cool_temp;
- int warm_temp;
- unsigned int temp_check_period;
- unsigned int max_bat_chg_current;
- unsigned int usb_max_current;
- unsigned int cool_bat_chg_current;
- unsigned int warm_bat_chg_current;
- unsigned int cool_bat_voltage;
- unsigned int warm_bat_voltage;
- int hysteresis_temp;
- unsigned int (*get_batt_capacity_percent) (void);
- int64_t batt_id_min;
- int64_t batt_id_max;
- bool keep_btm_on_suspend;
- bool has_dc_supply;
- int trkl_voltage;
- int weak_voltage;
- int trkl_current;
- int weak_current;
- int vin_min;
- int *thermal_mitigation;
- int thermal_levels;
- enum pm8921_chg_cold_thr cold_thr;
- enum pm8921_chg_hot_thr hot_thr;
- int rconn_mohm;
- enum pm8921_chg_led_src_config led_src_config;
- int battery_less_hardware;
- int btc_override;
- int btc_override_cold_degc;
- int btc_override_hot_degc;
- int btc_delay_ms;
- int btc_panic_if_cant_stop_chg;
- int stop_chg_upon_expiry;
- bool disable_chg_rmvl_wrkarnd;
- };
- enum pm8921_charger_source {
- PM8921_CHG_SRC_NONE,
- PM8921_CHG_SRC_USB,
- PM8921_CHG_SRC_DC,
- };
- #if defined(CONFIG_PM8921_CHARGER) || defined(CONFIG_PM8921_CHARGER_MODULE)
- void pm8921_charger_vbus_draw(unsigned int mA);
- int pm8921_charger_register_vbus_sn(void (*callback)(int));
- void pm8921_charger_unregister_vbus_sn(void (*callback)(int));
- /**
- * pm8921_is_usb_chg_plugged_in - is usb plugged in
- *
- * if usb is under voltage or over voltage this will return false
- */
- int pm8921_is_usb_chg_plugged_in(void);
- /**
- * pm8921_is_dc_chg_plugged_in - is dc plugged in
- *
- * if dc is under voltage or over voltage this will return false
- */
- int pm8921_is_dc_chg_plugged_in(void);
- /**
- * pm8921_is_battery_present -
- *
- * returns if the pmic sees the battery present
- */
- int pm8921_is_battery_present(void);
- /**
- * pm8921_set_max_battery_charge_current - set max battery chg current
- *
- * @ma: max charge current in milliAmperes
- */
- int pm8921_set_max_battery_charge_current(int ma);
- /**
- * pm8921_disable_input_current_limt - disable input current limit
- *
- * @disable: disable input curren_limit limit
- *
- * Disabling the charge current limit causes current
- * current limits to have no monitoring. An adequate charger
- * capable of supplying high current while sustaining VIN_MIN
- * is required if input current limiting is disabled.
- */
- int pm8921_disable_input_current_limit(bool disable);
- /**
- * pm8921_set_usb_power_supply_type - set USB supply type
- *
- * @type: power_supply_type enum
- *
- * This api lets one set a specific usb power_supply_type.
- * USB drivers can distinguish between types of USB connections
- * and set the appropriate type for the USB supply.
- */
- int pm8921_set_usb_power_supply_type(enum power_supply_type type);
- /**
- * pm8921_disable_source_current - disable drawing current from source
- * @disable: true to disable current drawing from source false otherwise
- *
- * This function will stop all charging activities and disable any current
- * drawn from the charger. The battery provides the system current.
- */
- int pm8921_disable_source_current(bool disable);
- /**
- * pm8921_regulate_input_voltage -
- * @voltage: voltage in millivolts to regulate
- * allowable values are from 4300mV to 6500mV
- */
- int pm8921_regulate_input_voltage(int voltage);
- /**
- * pm8921_is_battery_charging -
- * @source: when the battery is charging the source is updated to reflect which
- * charger, usb or dc, is charging the battery.
- *
- * RETURNS: bool, whether the battery is being charged or not
- */
- bool pm8921_is_battery_charging(int *source);
- /**
- * pm8921_batt_temperature - get battery temp in degC
- *
- */
- int pm8921_batt_temperature(void);
- /**
- * pm8921_usb_ovp_set_threshold -
- * Set the usb threshold as defined in by
- * enum usb_ov_threshold
- */
- int pm8921_usb_ovp_set_threshold(enum pm8921_usb_ov_threshold ov);
- /**
- * pm8921_usb_ovp_set_hystersis -
- * @ms: the debounce time enum
- *
- * Sets the debounce time for usb insertion/removal detection
- *
- */
- int pm8921_usb_ovp_set_hystersis(enum pm8921_usb_debounce_time ms);
- /**
- * pm8921_usb_ovp_disable -
- *
- * when disabled there is no over voltage protection. The usb voltage is
- * fed to the pmic as is. This should be disabled only when there is
- * over voltage protection circuitry present outside the pmic chip.
- *
- */
- int pm8921_usb_ovp_disable(int disable);
- /**
- * pm8921_is_batfet_closed - battery fet status
- *
- * Returns 1 if batfet is closed 0 if open. On configurations without
- * batfet this will return 0.
- */
- int pm8921_is_batfet_closed(void);
- #else
- static inline void pm8921_charger_vbus_draw(unsigned int mA)
- {
- }
- static inline int pm8921_charger_register_vbus_sn(void (*callback)(int))
- {
- return -ENXIO;
- }
- static inline void pm8921_charger_unregister_vbus_sn(void (*callback)(int))
- {
- }
- static inline int pm8921_is_usb_chg_plugged_in(void)
- {
- return -ENXIO;
- }
- static inline int pm8921_is_dc_chg_plugged_in(void)
- {
- return -ENXIO;
- }
- static inline int pm8921_is_battery_present(void)
- {
- return -ENXIO;
- }
- static inline int pm8917_set_under_voltage_detection_threshold(int mv)
- {
- return -ENXIO;
- }
- static inline int pm8921_disable_input_current_limit(bool disable)
- {
- return -ENXIO;
- }
- static inline int pm8921_set_usb_power_supply_type(enum power_supply_type type)
- {
- return -ENXIO;
- }
- static inline int pm8921_set_max_battery_charge_current(int ma)
- {
- return -ENXIO;
- }
- static inline int pm8921_disable_source_current(bool disable)
- {
- return -ENXIO;
- }
- static inline int pm8921_regulate_input_voltage(int voltage)
- {
- return -ENXIO;
- }
- static inline bool pm8921_is_battery_charging(int *source)
- {
- *source = PM8921_CHG_SRC_NONE;
- return 0;
- }
- static inline int pm8921_batt_temperature(void)
- {
- return -ENXIO;
- }
- static inline int pm8921_usb_ovp_set_threshold(enum pm8921_usb_ov_threshold ov)
- {
- return -ENXIO;
- }
- static inline int pm8921_usb_ovp_set_hystersis(enum pm8921_usb_debounce_time ms)
- {
- return -ENXIO;
- }
- static inline int pm8921_usb_ovp_disable(int disable)
- {
- return -ENXIO;
- }
- static inline int pm8921_is_batfet_closed(void)
- {
- return 1;
- }
- #endif
- #endif
|