/* * 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 #include #include #include #include #include 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 */