tizen 2.4 release
[profile/mobile/platform/kernel/linux-3.10-sc7730.git] / drivers / battery / sec_adc.c
1 /*
2  *  sec_adc.c
3  *  Samsung Mobile Battery Driver
4  *
5  *  Copyright (C) 2012 Samsung Electronics
6  *
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #include <linux/battery/sec_adc.h>
14 #include <soc/sprd/adc.h>
15
16 #define ADC_CHANNEL_TEMP        1
17
18 static struct iio_channel *temp_adc;
19
20 static void sec_bat_adc_ap_init(struct platform_device *pdev)
21 {
22         /*
23         temp_adc = iio_channel_get_all(&pdev->dev);
24         */
25         return true;
26 }
27
28 static int sec_bat_adc_ap_read(int channel)
29 {
30         int data;
31         int ret = 0;
32
33         data = sci_adc_get_value(ADC_CHANNEL_TEMP, false);
34         pr_info("read channel [%d]\n", data);
35         /*
36         int data = -1;
37         int ret = 0;
38
39         switch (channel)
40         {
41         case SEC_BAT_ADC_CHANNEL_CABLE_CHECK:
42         case SEC_BAT_ADC_CHANNEL_BAT_CHECK:
43                 break;
44         case SEC_BAT_ADC_CHANNEL_TEMP:
45         case SEC_BAT_ADC_CHANNEL_TEMP_AMBIENT:
46                 data = sci_adc_get_value(ADC_CHANNEL_1,0);
47                 if (ret < 0)
48                         pr_info("read channel error[%d]\n", ret);
49                 else
50                         pr_debug("TEMP ADC(%d)\n", data);
51                 break;
52         case SEC_BAT_ADC_CHANNEL_FULL_CHECK:
53         case SEC_BAT_ADC_CHANNEL_VOLTAGE_NOW:
54         case SEC_BAT_ADC_CHANNEL_NUM:
55                 break;
56         default:
57                 break;
58         }
59         */
60         return data;
61 }
62
63 static void sec_bat_adc_ap_exit(void)
64 {
65         /*
66         iio_channel_release(temp_adc);
67         */
68          return true;
69 }
70
71 static void sec_bat_adc_none_init(struct platform_device *pdev)
72 {
73 }
74
75 static int sec_bat_adc_none_read(int channel)
76 {
77         return 0;
78 }
79
80 static void sec_bat_adc_none_exit(void)
81 {
82 }
83
84 static void sec_bat_adc_ic_init(struct platform_device *pdev)
85 {
86 }
87
88 static int sec_bat_adc_ic_read(int channel)
89 {
90         return 0;
91 }
92
93 static void sec_bat_adc_ic_exit(void)
94 {
95 }
96 static int adc_read_type(struct sec_battery_info *battery, int channel)
97 {
98         int adc = 0;
99
100         switch (battery->pdata->temp_adc_type)
101         {
102         case SEC_BATTERY_ADC_TYPE_NONE :
103                 adc = sec_bat_adc_none_read(channel);
104                 break;
105         case SEC_BATTERY_ADC_TYPE_AP :
106                 adc = sec_bat_adc_ap_read(channel);
107                 break;
108         case SEC_BATTERY_ADC_TYPE_IC :
109                 adc = sec_bat_adc_ic_read(channel);
110                 break;
111         case SEC_BATTERY_ADC_TYPE_NUM :
112                 break;
113         default :
114                 break;
115         }
116         return adc;
117 }
118
119 static void adc_init_type(struct platform_device *pdev,
120                           struct sec_battery_info *battery)
121 {
122         switch (battery->pdata->temp_adc_type)
123         {
124         case SEC_BATTERY_ADC_TYPE_NONE :
125                 sec_bat_adc_none_init(pdev);
126                 break;
127         case SEC_BATTERY_ADC_TYPE_AP :
128                 sec_bat_adc_ap_init(pdev);
129                 break;
130         case SEC_BATTERY_ADC_TYPE_IC :
131                 sec_bat_adc_ic_init(pdev);
132                 break;
133         case SEC_BATTERY_ADC_TYPE_NUM :
134                 break;
135         default :
136                 break;
137         }
138 }
139
140 static void adc_exit_type(struct sec_battery_info *battery)
141 {
142         switch (battery->pdata->temp_adc_type)
143         {
144         case SEC_BATTERY_ADC_TYPE_NONE :
145                 sec_bat_adc_none_exit();
146                 break;
147         case SEC_BATTERY_ADC_TYPE_AP :
148                 sec_bat_adc_ap_exit();
149                 break;
150         case SEC_BATTERY_ADC_TYPE_IC :
151                 sec_bat_adc_ic_exit();
152                 break;
153         case SEC_BATTERY_ADC_TYPE_NUM :
154                 break;
155         default :
156                 break;
157         }
158 }
159
160 int adc_read(struct sec_battery_info *battery, int channel)
161 {
162         int adc = 0;
163
164         adc = adc_read_type(battery, channel);
165
166         dev_dbg(battery->dev, "[%s]adc = %d\n", __func__, adc);
167
168         return adc;
169 }
170
171 void adc_init(struct platform_device *pdev, struct sec_battery_info *battery)
172 {
173         adc_init_type(pdev, battery);
174 }
175
176 void adc_exit(struct sec_battery_info *battery)
177 {
178         adc_exit_type(battery);
179 }
180