aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/battery/sec_battery.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/battery/sec_battery.h')
-rw-r--r--include/linux/battery/sec_battery.h267
1 files changed, 267 insertions, 0 deletions
diff --git a/include/linux/battery/sec_battery.h b/include/linux/battery/sec_battery.h
new file mode 100644
index 0000000..70a5c50
--- /dev/null
+++ b/include/linux/battery/sec_battery.h
@@ -0,0 +1,267 @@
+/*
+ * sec_battery.h
+ * Samsung Mobile Battery Header
+ *
+ *
+ * Copyright (C) 2012 Samsung Electronics, Inc.
+ *
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef __SEC_BATTERY_H
+#define __SEC_BATTERY_H __FILE__
+
+#include <linux/battery/sec_charging_common.h>
+#include <linux/android_alarm.h>
+#include <linux/wakelock.h>
+#include <linux/workqueue.h>
+#include <linux/proc_fs.h>
+#include <linux/jiffies.h>
+
+static enum power_supply_property sec_battery_props[] = {
+ POWER_SUPPLY_PROP_STATUS,
+ POWER_SUPPLY_PROP_CHARGE_TYPE,
+ POWER_SUPPLY_PROP_HEALTH,
+ POWER_SUPPLY_PROP_PRESENT,
+ POWER_SUPPLY_PROP_ONLINE,
+ POWER_SUPPLY_PROP_TECHNOLOGY,
+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
+ POWER_SUPPLY_PROP_CURRENT_NOW,
+ POWER_SUPPLY_PROP_CURRENT_AVG,
+ POWER_SUPPLY_PROP_CAPACITY,
+ POWER_SUPPLY_PROP_TEMP,
+ POWER_SUPPLY_PROP_TEMP_AMBIENT,
+};
+
+static enum power_supply_property sec_power_props[] = {
+ POWER_SUPPLY_PROP_ONLINE,
+};
+
+#define ADC_CH_COUNT 10
+#define ADC_SAMPLE_COUNT 10
+
+struct adc_sample_info {
+ unsigned int cnt;
+ int total_adc;
+ int average_adc;
+ int adc_arr[ADC_SAMPLE_COUNT];
+ int index;
+};
+
+struct sec_battery_info {
+ struct device *dev;
+ sec_battery_platform_data_t *pdata;
+ /* power supply used in Android */
+ struct power_supply psy_bat;
+ struct power_supply psy_usb;
+ struct power_supply psy_ac;
+ unsigned int irq;
+
+ int status;
+ int health;
+ bool present;
+
+ int voltage_now; /* cell voltage (mV) */
+ int voltage_avg; /* average voltage (mV) */
+ int voltage_ocv; /* open circuit voltage (mV) */
+ int current_now; /* current (mA) */
+ int current_avg; /* average current (mA) */
+ int current_adc;
+
+ unsigned int capacity; /* SOC (%) */
+
+ struct mutex adclock;
+ struct adc_sample_info adc_sample[ADC_CH_COUNT];
+
+ /* keep awake until monitor is done */
+ struct wake_lock monitor_wake_lock;
+ struct workqueue_struct *monitor_wqueue;
+ struct work_struct monitor_work;
+ unsigned int polling_count;
+ unsigned int polling_time;
+ bool polling_in_sleep;
+ bool polling_short;
+
+ struct delayed_work polling_work;
+ struct alarm polling_alarm;
+ ktime_t last_poll_time;
+
+ /* event set */
+ unsigned int event;
+ unsigned int event_wait;
+ struct alarm event_termination_alarm;
+ ktime_t last_event_time;
+
+ /* battery check */
+ unsigned int check_count;
+ /* ADC check */
+ unsigned int check_adc_count;
+ unsigned int check_adc_value;
+
+ /* time check */
+ unsigned long charging_start_time;
+ unsigned long charging_passed_time;
+ unsigned long charging_next_time;
+
+ /* temperature check */
+ int temperature; /* battery temperature */
+ int temper_amb; /* target temperature */
+
+ int temp_adc;
+
+ int temp_high_threshold;
+ int temp_high_recovery;
+ int temp_low_threshold;
+ int temp_low_recovery;
+
+ unsigned int temp_high_cnt;
+ unsigned int temp_low_cnt;
+ unsigned int temp_recover_cnt;
+
+ /* charging */
+ unsigned int charging_mode;
+ int cable_type;
+ int extended_cable_type;
+ struct wake_lock cable_wake_lock;
+ struct work_struct cable_work;
+ struct wake_lock vbus_wake_lock;
+ unsigned int full_check_cnt;
+ unsigned int recharge_check_cnt;
+
+ /* test mode */
+ bool test_activated;
+ bool factory_mode;
+};
+
+static char *supply_list[] = {
+ "battery",
+};
+
+ssize_t sec_bat_show_attrs(struct device *dev,
+ struct device_attribute *attr, char *buf);
+
+ssize_t sec_bat_store_attrs(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count);
+
+#define SEC_BATTERY_ATTR(_name) \
+{ \
+ .attr = {.name = #_name, .mode = 0664}, \
+ .show = sec_bat_show_attrs, \
+ .store = sec_bat_store_attrs, \
+}
+
+/* event check */
+#define EVENT_NONE (0)
+#define EVENT_2G_CALL (0x1 << 0)
+#define EVENT_3G_CALL (0x1 << 1)
+#define EVENT_MUSIC (0x1 << 2)
+#define EVENT_VIDEO (0x1 << 3)
+#define EVENT_BROWSER (0x1 << 4)
+#define EVENT_HOTSPOT (0x1 << 5)
+#define EVENT_CAMERA (0x1 << 6)
+#define EVENT_CAMCORDER (0x1 << 7)
+#define EVENT_DATA_CALL (0x1 << 8)
+#define EVENT_WIFI (0x1 << 9)
+#define EVENT_WIBRO (0x1 << 10)
+#define EVENT_LTE (0x1 << 11)
+
+static struct device_attribute sec_battery_attrs[] = {
+ SEC_BATTERY_ATTR(batt_reset_soc),
+ SEC_BATTERY_ATTR(batt_read_raw_soc),
+ SEC_BATTERY_ATTR(batt_read_adj_soc),
+ SEC_BATTERY_ATTR(batt_type),
+ SEC_BATTERY_ATTR(batt_vfocv),
+ SEC_BATTERY_ATTR(batt_vol_adc),
+ SEC_BATTERY_ATTR(batt_vol_adc_cal),
+ SEC_BATTERY_ATTR(batt_vol_aver),
+ SEC_BATTERY_ATTR(batt_vol_adc_aver),
+ SEC_BATTERY_ATTR(batt_temp_adc),
+ SEC_BATTERY_ATTR(batt_temp_aver),
+ SEC_BATTERY_ATTR(batt_temp_adc_aver),
+ SEC_BATTERY_ATTR(batt_vf_adc),
+
+ SEC_BATTERY_ATTR(batt_lp_charging),
+ SEC_BATTERY_ATTR(siop_activated),
+ SEC_BATTERY_ATTR(batt_charging_source),
+ SEC_BATTERY_ATTR(fg_reg_dump),
+ SEC_BATTERY_ATTR(fg_reset_cap),
+ SEC_BATTERY_ATTR(fg_capacity),
+ SEC_BATTERY_ATTR(auth),
+ SEC_BATTERY_ATTR(chg_current_adc),
+ SEC_BATTERY_ATTR(wc_adc),
+ SEC_BATTERY_ATTR(wc_status),
+ SEC_BATTERY_ATTR(factory_mode),
+ SEC_BATTERY_ATTR(update),
+ SEC_BATTERY_ATTR(test_mode),
+
+ SEC_BATTERY_ATTR(2g_call),
+ SEC_BATTERY_ATTR(3g_call),
+ SEC_BATTERY_ATTR(music),
+ SEC_BATTERY_ATTR(video),
+ SEC_BATTERY_ATTR(browser),
+ SEC_BATTERY_ATTR(hotspot),
+ SEC_BATTERY_ATTR(camera),
+ SEC_BATTERY_ATTR(camcorger),
+ SEC_BATTERY_ATTR(data_call),
+ SEC_BATTERY_ATTR(wifi),
+ SEC_BATTERY_ATTR(wibro),
+ SEC_BATTERY_ATTR(lte),
+ SEC_BATTERY_ATTR(event),
+};
+
+enum {
+ BATT_RESET_SOC = 0,
+ BATT_READ_RAW_SOC,
+ BATT_READ_ADJ_SOC,
+ BATT_TYPE,
+ BATT_VFOCV,
+ BATT_VOL_ADC,
+ BATT_VOL_ADC_CAL,
+ BATT_VOL_AVER,
+ BATT_VOL_ADC_AVER,
+ BATT_TEMP_ADC,
+ BATT_TEMP_AVER,
+ BATT_TEMP_ADC_AVER,
+ BATT_VF_ADC,
+
+ BATT_LP_CHARGING,
+ SIOP_ACTIVATED,
+ BATT_CHARGING_SOURCE,
+ FG_REG_DUMP,
+ FG_RESET_CAP,
+ FG_CAPACITY,
+ AUTH,
+ CHG_CURRENT_ADC,
+ WC_ADC,
+ WC_STATUS,
+ FACTORY_MODE,
+ UPDATE,
+ TEST_MODE,
+
+ BATT_EVENT_2G_CALL,
+ BATT_EVENT_3G_CALL,
+ BATT_EVENT_MUSIC,
+ BATT_EVENT_VIDEO,
+ BATT_EVENT_BROWSER,
+ BATT_EVENT_HOTSPOT,
+ BATT_EVENT_CAMERA,
+ BATT_EVENT_CAMCORDER,
+ BATT_EVENT_DATA_CALL,
+ BATT_EVENT_WIFI,
+ BATT_EVENT_WIBRO,
+ BATT_EVENT_LTE,
+ BATT_EVENT,
+};
+
+#endif /* __SEC_BATTERY_H */