76 lines
2.3 KiB
C
76 lines
2.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (C) 2010 ST-Ericsson SA
|
|
*
|
|
* Author: Arun R Murthy <arun.murthy@stericsson.com>
|
|
* Author: Daniel Willerud <daniel.willerud@stericsson.com>
|
|
* Author: M'boumba Cedric Madianga <cedric.madianga@stericsson.com>
|
|
*/
|
|
|
|
#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 */
|