/* Copyright (c) 2012-2019, 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 __QCOM_ADC_TM_H_CLIENTS__ #define __QCOM_ADC_TM_H_CLIENTS__ struct adc_tm_chip; /** * enum adc_tm_state - This lets the client know whether the threshold * that was crossed was high/low. * %ADC_TM_HIGH_STATE: Client is notified of crossing the requested high * voltage threshold. * %ADC_TM_COOL_STATE: Client is notified of crossing the requested cool * temperature threshold. * %ADC_TM_LOW_STATE: Client is notified of crossing the requested low * voltage threshold. * %ADC_TM_WARM_STATE: Client is notified of crossing the requested high * temperature threshold. */ enum adc_tm_state { ADC_TM_HIGH_STATE = 0, ADC_TM_COOL_STATE = ADC_TM_HIGH_STATE, ADC_TM_LOW_STATE, ADC_TM_WARM_STATE = ADC_TM_LOW_STATE, ADC_TM_STATE_NUM, }; /** * enum adc_tm_state_request - Request to enable/disable the corresponding * high/low voltage/temperature thresholds. * %ADC_TM_HIGH_THR_ENABLE: Enable high voltage threshold. * %ADC_TM_COOL_THR_ENABLE = Enables cool temperature threshold. * %ADC_TM_LOW_THR_ENABLE: Enable low voltage/temperature threshold. * %ADC_TM_WARM_THR_ENABLE = Enables warm temperature threshold. * %ADC_TM_HIGH_LOW_THR_ENABLE: Enable high and low voltage/temperature * threshold. * %ADC_TM_HIGH_THR_DISABLE: Disable high voltage/temperature threshold. * %ADC_TM_COOL_THR_ENABLE = Disables cool temperature threshold. * %ADC_TM_LOW_THR_DISABLE: Disable low voltage/temperature threshold. * %ADC_TM_WARM_THR_ENABLE = Disables warm temperature threshold. * %ADC_TM_HIGH_THR_DISABLE: Disable high and low voltage/temperature * threshold. */ enum adc_tm_state_request { ADC_TM_HIGH_THR_ENABLE = 0, ADC_TM_COOL_THR_ENABLE = ADC_TM_HIGH_THR_ENABLE, ADC_TM_LOW_THR_ENABLE, ADC_TM_WARM_THR_ENABLE = ADC_TM_LOW_THR_ENABLE, ADC_TM_HIGH_LOW_THR_ENABLE, ADC_TM_HIGH_THR_DISABLE, ADC_TM_COOL_THR_DISABLE = ADC_TM_HIGH_THR_DISABLE, ADC_TM_LOW_THR_DISABLE, ADC_TM_WARM_THR_DISABLE = ADC_TM_LOW_THR_DISABLE, ADC_TM_HIGH_LOW_THR_DISABLE, ADC_TM_THR_NUM, }; struct adc_tm_param { int low_thr; int high_thr; uint32_t channel; enum adc_tm_state_request state_request; void *btm_ctx; void (*threshold_notification)(enum adc_tm_state state, void *ctx); }; /* Public API */ #if defined(CONFIG_QTI_ADC_TM) struct adc_tm_chip *get_adc_tm(struct device *dev, const char *name); int32_t adc_tm5_channel_measure(struct adc_tm_chip *chip, struct adc_tm_param *param); int32_t adc_tm5_disable_chan_meas(struct adc_tm_chip *chip, struct adc_tm_param *param); #else static inline struct adc_tm_chip *get_adc_tm( struct device *dev, const char *name) { return ERR_PTR(-ENXIO); } static inline int32_t adc_tm5_channel_measure( struct adc_tm_chip *chip, struct adc_tm_param *param) { return -ENXIO; } static inline int32_t adc_tm5_disable_chan_meas( struct adc_tm_chip *chip, struct adc_tm_param *param) { return -ENXIO; } #endif #endif /* __QCOM_ADC_TM_H_CLIENTS__ */