/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2010 ST-Ericsson SA * * Author: Arun R Murthy * Author: Daniel Willerud * Author: M'boumba Cedric Madianga */ #ifndef _AB8500_GPADC_H #define _AB8500_GPADC_H /* GPADC source: From datasheet(ADCSwSel[4:0] in GPADCCtrl2 * and ADCHwSel[4:0] in GPADCCtrl3 ) */ #define BAT_CTRL 0x01 #define BTEMP_BALL 0x02 #define MAIN_CHARGER_V 0x03 #define ACC_DETECT1 0x04 #define ACC_DETECT2 0x05 #define ADC_AUX1 0x06 #define ADC_AUX2 0x07 #define MAIN_BAT_V 0x08 #define VBUS_V 0x09 #define MAIN_CHARGER_C 0x0A #define USB_CHARGER_C 0x0B #define BK_BAT_V 0x0C #define DIE_TEMP 0x0D #define USB_ID 0x0E #define XTAL_TEMP 0x12 #define VBAT_TRUE_MEAS 0x13 #define BAT_CTRL_AND_IBAT 0x1C #define VBAT_MEAS_AND_IBAT 0x1D #define VBAT_TRUE_MEAS_AND_IBAT 0x1E #define BAT_TEMP_AND_IBAT 0x1F /* Virtual channel used only for ibat convertion to ampere * Battery current conversion (ibat) cannot be requested as a single conversion * but it is always in combination with other input requests */ #define IBAT_VIRTUAL_CHANNEL 0xFF #define SAMPLE_1 1 #define SAMPLE_4 4 #define SAMPLE_8 8 #define SAMPLE_16 16 #define RISING_EDGE 0 #define FALLING_EDGE 1 /* Arbitrary ADC conversion type constants */ #define ADC_SW 0 #define ADC_HW 1 struct ab8500_gpadc; struct ab8500_gpadc *ab8500_gpadc_get(char *name); int ab8500_gpadc_sw_hw_convert(struct ab8500_gpadc *gpadc, u8 channel, u8 avg_sample, u8 trig_edge, u8 trig_timer, u8 conv_type); static inline int ab8500_gpadc_convert(struct ab8500_gpadc *gpadc, u8 channel) { return ab8500_gpadc_sw_hw_convert(gpadc, channel, SAMPLE_16, 0, 0, ADC_SW); } int ab8500_gpadc_read_raw(struct ab8500_gpadc *gpadc, u8 channel, u8 avg_sample, u8 trig_edge, u8 trig_timer, u8 conv_type); int ab8500_gpadc_double_read_raw(struct ab8500_gpadc *gpadc, u8 channel, u8 avg_sample, u8 trig_edge, u8 trig_timer, u8 conv_type, int *ibat); int ab8500_gpadc_ad_to_voltage(struct ab8500_gpadc *gpadc, u8 channel, int ad_value); void ab8540_gpadc_get_otp(struct ab8500_gpadc *gpadc, u16 *vmain_l, u16 *vmain_h, u16 *btemp_l, u16 *btemp_h, u16 *vbat_l, u16 *vbat_h, u16 *ibat_l, u16 *ibat_h); #endif /* _AB8500_GPADC_H */