thor: fix invalid larger device descriptor than requested
[profile/mobile/platform/kernel/u-boot-tm1.git] / property / vbat_check.c
1 #include <common.h>
2 #include <asm/arch/adc_drvapi.h>
3 #include <boot_mode.h>
4 unsigned int get_bat_low_level(void);
5 unsigned int get_bat_low_level_chg(void);
6 int charger_connected(void);
7 extern uint16_t sprdbat_auxadc2vbatvol(uint16_t adcvalue);
8
9 #define _BUF_SIZE 10
10 uint32_t vbat_buf[_BUF_SIZE];
11 void put_vbat_value(uint32_t vbat)
12 {
13     int i;
14     for(i=0;i<_BUF_SIZE -1;i++){
15         vbat_buf[i] = vbat_buf[i+1];
16     }
17
18     vbat_buf[_BUF_SIZE-1] = vbat;
19 }
20
21 uint32_t get_vbat_value(void)
22 {
23     unsigned long sum=0;
24     int i;
25     for(i=0; i < _BUF_SIZE; i++)
26       sum += vbat_buf[i];
27
28     return sum/_BUF_SIZE;
29 }
30
31
32 int is_bat_low(void)
33 {
34     int adc_value = 0;
35     unsigned int comp_vbat = 0;
36     int i;
37 #ifdef CONFIG_SPX20
38 //#ifdef CONFIG_FPGA
39         return 0;
40 //#endif
41 #endif
42     if(charger_connected()){
43         comp_vbat = get_bat_low_level_chg();
44     }else{
45         comp_vbat = get_bat_low_level();
46     }
47
48     ADC_Init();
49
50     for(i=0;i<_BUF_SIZE;i++){
51 retry_adc:
52         adc_value = ADC_GetValue(ADC_CHANNEL_VBAT, false);
53         if(adc_value < 0){
54             printf("ADC read error\n");
55             udelay(10);
56             goto retry_adc;
57         }else{
58             put_vbat_value(adc_value);
59         }
60     }
61
62     adc_value = get_vbat_value();
63         
64     printf("is_bat_low adc_value:%d,comp_vbat:%d\n",adc_value,comp_vbat);
65
66     if(sprdbat_auxadc2vbatvol (adc_value) < comp_vbat)
67       return 1;
68     else
69       return 0;
70         
71 }