change source file mode to 0644 instead of 0755
[profile/mobile/platform/kernel/u-boot-tm1.git] / arch / arm / cpu / armv7 / sc8810 / chg_phy.c
1 #include <common.h>
2 #include <asm/io.h>
3
4 #include <asm/arch/regs_adi.h>
5 #include <asm/arch/adi_hal_internal.h>
6 #include <asm/arch/analog_reg_v3.h>
7
8 uint16_t adc_voltage_table[2][2] =
9 {
10 #ifdef CONFIG_SC7710G2
11     {3300, 4200},
12     {2800, 3600},
13 #else
14         {928,4200},
15         {796,3600},
16 #endif
17 };
18 uint16_t CHGMNG_AdcvalueToVoltage (uint16_t adcvalue)
19 {
20         int32_t temp;
21         temp = adc_voltage_table[0][1] - adc_voltage_table[1][1];
22         temp = temp * (adcvalue - adc_voltage_table[0][0]);
23         temp = temp / (adc_voltage_table[0][0] - adc_voltage_table[1][0]);
24
25         printf("mingwei uboot adcvalue:%u,vol:%d,adc4200:%d,adc3600:%d\n", (unsigned int)adcvalue, temp + adc_voltage_table[0][1],
26                 adc_voltage_table[0][0], adc_voltage_table[1][0]);
27
28         return temp + adc_voltage_table[0][1];
29 }
30 void CHG_TurnOn (void)
31 {
32         ANA_REG_AND (ANA_CHGR_CTL0,~CHGR_PD_BIT);
33 }
34
35 void CHG_ShutDown (void)
36 {
37         ANA_REG_OR (ANA_CHGR_CTL0,CHGR_PD_BIT);
38 }
39
40 void CHG_SetRecharge (void)
41 {
42         ANA_REG_OR (ANA_CHGR_CTL0,CHGR_RECHG_BIT);
43 }
44
45 void CHG_Init (void)
46 {
47         unsigned int efuse_cal_data[2] = {0};
48         if(sci_efuse_calibration_get(efuse_cal_data))
49         {
50                 printf("sci_efuse_calibration_get OK");
51                 adc_voltage_table[0][1]=efuse_cal_data[0]&0xffff;
52                 adc_voltage_table[0][0]=(efuse_cal_data[0]>>16)&0xffff;
53                 adc_voltage_table[1][1]=efuse_cal_data[1]&0xffff;
54                 adc_voltage_table[1][0]=(efuse_cal_data[1]>>16)&0xffff;
55         }
56 #ifdef CONFIG_AP_ADC_CALIBRATION
57         {
58                 extern int read_adc_calibration_data(char *buffer,int size);
59                 unsigned int *adc_data;
60                 int ret=0;
61                 adc_data = malloc(64);
62                 if(adc_data){
63                         ret = read_adc_calibration_data(adc_data,48);
64                         if((ret > 0) &&
65                            ((adc_data[2]&0xffff) < 4500 )&&((adc_data[2]&0xffff) > 3000)&&
66                            ((adc_data[3]&0xffff) < 4500 )&&((adc_data[3]&0xffff) > 3000)){
67                                 printf("adc_para = 0x%x 0x%x \n",adc_data[2],adc_data[3]);
68                                 adc_voltage_table[0][1]=adc_data[2]&0xffff;
69                                 adc_voltage_table[0][0]=(adc_data[2]>>16)&0xffff;
70                                 adc_voltage_table[1][1]=adc_data[3]&0xffff;
71                                 adc_voltage_table[1][0]=(adc_data[3]>>16)&0xffff;
72                         }
73                         free(adc_data);  
74                 }
75           }
76 #endif
77
78         CHG_SetRecharge();
79 }
80