diff options
Diffstat (limited to 'include/linux/battery/sec_battery.h')
-rw-r--r-- | include/linux/battery/sec_battery.h | 267 |
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 */ |