123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- /* Copyright (c) 2011, 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.
- */
- /*
- * Qualcomm PMIC PM8xxx Battery Alarm driver
- *
- */
- #ifndef __MFD_PM8XXX_BATT_ALARM_H__
- #define __MFD_PM8XXX_BATT_ALARM_H__
- #include <linux/bitops.h>
- #include <linux/errno.h>
- #include <linux/notifier.h>
- #define PM8XXX_BATT_ALARM_DEV_NAME "pm8xxx-batt-alarm"
- /**
- * enum pm8xxx_batt_alarm_core_data - PMIC core specific core passed into the
- * batter alarm driver as platform data
- * @irq_name:
- * @reg_addr_batt_alarm_threshold: PMIC threshold register address
- * @reg_addr_batt_alarm_ctrl1: PMIC control 1 register address
- * @reg_addr_batt_alarm_ctrl2: PMIC control 2 register address
- * @reg_addr_batt_alarm_pwm_ctrl: PMIC PWM control register address
- */
- struct pm8xxx_batt_alarm_core_data {
- char *irq_name;
- u16 reg_addr_threshold;
- u16 reg_addr_ctrl1;
- u16 reg_addr_ctrl2;
- u16 reg_addr_pwm_ctrl;
- };
- /**
- * enum pm8xxx_batt_alarm_comparator - battery alarm comparator ID values
- */
- enum pm8xxx_batt_alarm_comparator {
- PM8XXX_BATT_ALARM_LOWER_COMPARATOR,
- PM8XXX_BATT_ALARM_UPPER_COMPARATOR,
- };
- /**
- * enum pm8xxx_batt_alarm_hold_time - hold time required for out of range
- * battery voltage needed to trigger a status change. Enum names denote
- * hold time in milliseconds.
- */
- enum pm8xxx_batt_alarm_hold_time {
- PM8XXX_BATT_ALARM_HOLD_TIME_0p125_MS = 0,
- PM8XXX_BATT_ALARM_HOLD_TIME_0p25_MS,
- PM8XXX_BATT_ALARM_HOLD_TIME_0p5_MS,
- PM8XXX_BATT_ALARM_HOLD_TIME_1_MS,
- PM8XXX_BATT_ALARM_HOLD_TIME_2_MS,
- PM8XXX_BATT_ALARM_HOLD_TIME_4_MS,
- PM8XXX_BATT_ALARM_HOLD_TIME_8_MS,
- PM8XXX_BATT_ALARM_HOLD_TIME_16_MS,
- };
- /*
- * Bits that are set in the return value of pm8xxx_batt_alarm_status_read
- * to indicate crossing of the upper or lower threshold.
- */
- #define PM8XXX_BATT_ALARM_STATUS_BELOW_LOWER BIT(0)
- #define PM8XXX_BATT_ALARM_STATUS_ABOVE_UPPER BIT(1)
- #if defined(CONFIG_MFD_PM8XXX_BATT_ALARM) \
- || defined(CONFIG_MFD_PM8XXX_BATT_ALARM_MODULE)
- /**
- * pm8xxx_batt_alarm_enable - enable one of the battery voltage threshold
- * comparators
- * @comparator: selects which comparator to enable
- *
- * RETURNS: an appropriate -ERRNO error value on error, or zero for success.
- */
- int pm8xxx_batt_alarm_enable(enum pm8xxx_batt_alarm_comparator comparator);
- /**
- * pm8xxx_batt_alarm_disable - disable one of the battery voltage threshold
- * comparators
- * @comparator: selects which comparator to disable
- *
- * RETURNS: an appropriate -ERRNO error value on error, or zero for success.
- */
- int pm8xxx_batt_alarm_disable(enum pm8xxx_batt_alarm_comparator comparator);
- /**
- * pm8xxx_batt_alarm_threshold_set - set the lower and upper alarm thresholds
- * @comparator: selects which comparator to set the threshold of
- * @threshold_mV: battery voltage threshold in millivolts
- * set points = 2500-5675 mV in 25 mV steps
- *
- * RETURNS: an appropriate -ERRNO error value on error, or zero for success.
- */
- int pm8xxx_batt_alarm_threshold_set(
- enum pm8xxx_batt_alarm_comparator comparator, int threshold_mV);
- /**
- * pm8xxx_batt_alarm_status_read - get status of both threshold comparators
- *
- * RETURNS: < 0 = error
- * 0 = battery voltage ok
- * BIT(0) set = battery voltage below lower threshold
- * BIT(1) set = battery voltage above upper threshold
- */
- int pm8xxx_batt_alarm_status_read(void);
- /**
- * pm8xxx_batt_alarm_register_notifier - register a notifier to run when a
- * battery voltage change interrupt fires
- * @nb: notifier block containing callback function to register
- *
- * nb->notifier_call must point to a function of this form -
- * int (*notifier_call)(struct notifier_block *nb, unsigned long status,
- * void *unused);
- * "status" will receive the battery alarm status; "unused" will be NULL.
- *
- * RETURNS: an appropriate -ERRNO error value on error, or zero for success.
- */
- int pm8xxx_batt_alarm_register_notifier(struct notifier_block *nb);
- /**
- * pm8xxx_batt_alarm_unregister_notifier - unregister a notifier that is run
- * when a battery voltage change interrupt fires
- * @nb: notifier block containing callback function to unregister
- *
- * RETURNS: an appropriate -ERRNO error value on error, or zero for success.
- */
- int pm8xxx_batt_alarm_unregister_notifier(struct notifier_block *nb);
- /**
- * pm8xxx_batt_alarm_hold_time_set - set hold time of interrupt output *
- * @hold_time: amount of time that battery voltage must remain outside of the
- * threshold range before the battery alarm interrupt triggers
- *
- * RETURNS: an appropriate -ERRNO error value on error, or zero for success.
- */
- int pm8xxx_batt_alarm_hold_time_set(enum pm8xxx_batt_alarm_hold_time hold_time);
- /**
- * pm8xxx_batt_alarm_pwm_rate_set - set battery alarm update rate *
- * @use_pwm: 1 = use PWM update rate, 0 = comparators always active
- * @clock_scaler: PWM clock scaler = 2 to 9
- * @clock_divider: PWM clock divider = 2 to 8
- *
- * This function sets the rate at which the battery alarm module enables
- * the threshold comparators. The rate is determined by the following equation:
- *
- * f_update = (1024 Hz) / (clock_divider * (2 ^ clock_scaler))
- *
- * Thus, the update rate can range from 0.25 Hz to 128 Hz.
- *
- * RETURNS: an appropriate -ERRNO error value on error, or zero for success.
- */
- int pm8xxx_batt_alarm_pwm_rate_set(int use_pwm, int clock_scaler,
- int clock_divider);
- #else
- static inline int
- pm8xxx_batt_alarm_enable(enum pm8xxx_batt_alarm_comparator comparator)
- { return -ENODEV; }
- static inline int
- pm8xxx_batt_alarm_disable(enum pm8xxx_batt_alarm_comparator comparator)
- { return -ENODEV; }
- static inline int
- pm8xxx_batt_alarm_threshold_set(enum pm8xxx_batt_alarm_comparator comparator,
- int threshold_mV)
- { return -ENODEV; }
- static inline int pm8xxx_batt_alarm_status_read(void)
- { return -ENODEV; }
- static inline int pm8xxx_batt_alarm_register_notifier(struct notifier_block *nb)
- { return -ENODEV; }
- static inline int
- pm8xxx_batt_alarm_unregister_notifier(struct notifier_block *nb)
- { return -ENODEV; }
- static inline int
- pm8xxx_batt_alarm_hold_time_set(enum pm8xxx_batt_alarm_hold_time hold_time)
- { return -ENODEV; }
- static inline int
- pm8xxx_batt_alarm_pwm_rate_set(int use_pwm, int clock_scaler, int clock_divider)
- { return -ENODEV; }
- #endif
- #endif /* __MFD_PM8XXX_BATT_ALARM_H__ */
|