hc
2023-02-14 a65d8712103cb143619d6c58afd5127e347b13c9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
 * Copyright (C) 2010 ST-Ericsson SA
 * Licensed under GPLv2.
 *
 * 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 */