3 * Samsung Mobile Battery Driver
5 * Copyright (C) 2012 Samsung Electronics
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.
13 #include <linux/battery/sec_adc.h>
14 #include <soc/sprd/adc.h>
16 #define ADC_CHANNEL_TEMP 1
18 static struct iio_channel *temp_adc;
20 static void sec_bat_adc_ap_init(struct platform_device *pdev)
23 temp_adc = iio_channel_get_all(&pdev->dev);
28 static int sec_bat_adc_ap_read(int channel)
33 data = sci_adc_get_value(ADC_CHANNEL_TEMP, false);
34 pr_info("read channel [%d]\n", data);
41 case SEC_BAT_ADC_CHANNEL_CABLE_CHECK:
42 case SEC_BAT_ADC_CHANNEL_BAT_CHECK:
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);
48 pr_info("read channel error[%d]\n", ret);
50 pr_debug("TEMP ADC(%d)\n", data);
52 case SEC_BAT_ADC_CHANNEL_FULL_CHECK:
53 case SEC_BAT_ADC_CHANNEL_VOLTAGE_NOW:
54 case SEC_BAT_ADC_CHANNEL_NUM:
63 static void sec_bat_adc_ap_exit(void)
66 iio_channel_release(temp_adc);
71 static void sec_bat_adc_none_init(struct platform_device *pdev)
75 static int sec_bat_adc_none_read(int channel)
80 static void sec_bat_adc_none_exit(void)
84 static void sec_bat_adc_ic_init(struct platform_device *pdev)
88 static int sec_bat_adc_ic_read(int channel)
93 static void sec_bat_adc_ic_exit(void)
96 static int adc_read_type(struct sec_battery_info *battery, int channel)
100 switch (battery->pdata->temp_adc_type)
102 case SEC_BATTERY_ADC_TYPE_NONE :
103 adc = sec_bat_adc_none_read(channel);
105 case SEC_BATTERY_ADC_TYPE_AP :
106 adc = sec_bat_adc_ap_read(channel);
108 case SEC_BATTERY_ADC_TYPE_IC :
109 adc = sec_bat_adc_ic_read(channel);
111 case SEC_BATTERY_ADC_TYPE_NUM :
119 static void adc_init_type(struct platform_device *pdev,
120 struct sec_battery_info *battery)
122 switch (battery->pdata->temp_adc_type)
124 case SEC_BATTERY_ADC_TYPE_NONE :
125 sec_bat_adc_none_init(pdev);
127 case SEC_BATTERY_ADC_TYPE_AP :
128 sec_bat_adc_ap_init(pdev);
130 case SEC_BATTERY_ADC_TYPE_IC :
131 sec_bat_adc_ic_init(pdev);
133 case SEC_BATTERY_ADC_TYPE_NUM :
140 static void adc_exit_type(struct sec_battery_info *battery)
142 switch (battery->pdata->temp_adc_type)
144 case SEC_BATTERY_ADC_TYPE_NONE :
145 sec_bat_adc_none_exit();
147 case SEC_BATTERY_ADC_TYPE_AP :
148 sec_bat_adc_ap_exit();
150 case SEC_BATTERY_ADC_TYPE_IC :
151 sec_bat_adc_ic_exit();
153 case SEC_BATTERY_ADC_TYPE_NUM :
160 int adc_read(struct sec_battery_info *battery, int channel)
164 adc = adc_read_type(battery, channel);
166 dev_dbg(battery->dev, "[%s]adc = %d\n", __func__, adc);
171 void adc_init(struct platform_device *pdev, struct sec_battery_info *battery)
173 adc_init_type(pdev, battery);
176 void adc_exit(struct sec_battery_info *battery)
178 adc_exit_type(battery);