1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Fuel gauge driver for CellWise 2013 / 2015 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2012, RockChip 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Authors: xuhuicong <xhc@rock-chips.com> 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Based on rk30_adc_battery.c 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify 11*4882a593Smuzhiyun * it under the terms of the GNU General Public License version 2 as 12*4882a593Smuzhiyun * published by the Free Software Foundation. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun */ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #ifndef CW2015_BATTERY_H 17*4882a593Smuzhiyun #define CW2015_BATTERY_H 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define SIZE_BATINFO 64 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define CW2015_GPIO_HIGH 1 22*4882a593Smuzhiyun #define CW2015_GPIO_LOW 0 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define REG_VERSION 0x0 25*4882a593Smuzhiyun #define REG_VCELL 0x2 26*4882a593Smuzhiyun #define REG_SOC 0x4 27*4882a593Smuzhiyun #define REG_RRT_ALERT 0x6 28*4882a593Smuzhiyun #define REG_CONFIG 0x8 29*4882a593Smuzhiyun #define REG_MODE 0xA 30*4882a593Smuzhiyun #define REG_BATINFO 0x10 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #define MODE_SLEEP_MASK (0x3<<6) 33*4882a593Smuzhiyun #define MODE_SLEEP (0x3<<6) 34*4882a593Smuzhiyun #define MODE_NORMAL (0x0<<6) 35*4882a593Smuzhiyun #define MODE_QUICK_START (0x3<<4) 36*4882a593Smuzhiyun #define MODE_RESTART (0xf<<0) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #define CONFIG_UPDATE_FLG (0x1<<1) 39*4882a593Smuzhiyun #define ATHD (0x0<<3) 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define CW_I2C_SPEED 100000 42*4882a593Smuzhiyun #define BATTERY_UP_MAX_CHANGE (420 * 1000) 43*4882a593Smuzhiyun #define BATTERY_DOWN_MAX_CHANGE (120 * 1000) 44*4882a593Smuzhiyun #define BATTERY_DOWN_CHANGE 60 45*4882a593Smuzhiyun #define BATTERY_DOWN_MIN_CHANGE_RUN 30 46*4882a593Smuzhiyun #define BATTERY_DOWN_MIN_CHANGE_SLEEP 1800 47*4882a593Smuzhiyun #define BATTERY_JUMP_TO_ZERO (30 * 1000) 48*4882a593Smuzhiyun #define BATTERY_CAPACITY_ERROR (40 * 1000) 49*4882a593Smuzhiyun #define BATTERY_CHARGING_ZERO (1800 * 1000) 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #define DOUBLE_SERIES_BATTERY 0 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define CHARGING_ON 1 54*4882a593Smuzhiyun #define NO_CHARGING 0 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #define BATTERY_DOWN_MAX_CHANGE_RUN_AC_ONLINE 3600 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #define NO_STANDARD_AC_BIG_CHARGE_MODE 1 59*4882a593Smuzhiyun /* #define SYSTEM_SHUTDOWN_VOLTAGE 3400000 */ 60*4882a593Smuzhiyun #define BAT_LOW_INTERRUPT 1 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #define USB_CHARGER_MODE 1 63*4882a593Smuzhiyun #define AC_CHARGER_MODE 2 64*4882a593Smuzhiyun #define CW_QUICKSTART 0 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #define TIMER_MS_COUNTS 1000 67*4882a593Smuzhiyun #define DEFAULT_MONITOR_SEC 8 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* virtual params */ 70*4882a593Smuzhiyun #define VIRTUAL_CURRENT 1000 71*4882a593Smuzhiyun #define VIRTUAL_VOLTAGE 3888 72*4882a593Smuzhiyun #define VIRTUAL_SOC 66 73*4882a593Smuzhiyun #define VIRTUAL_PRESET 1 74*4882a593Smuzhiyun #define VIRTUAL_TEMPERATURE 188 75*4882a593Smuzhiyun #define VIRTUAL_TIME2EMPTY 60 76*4882a593Smuzhiyun #define VIRTUAL_STATUS POWER_SUPPLY_STATUS_CHARGING 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun enum bat_mode { 79*4882a593Smuzhiyun MODE_BATTARY = 0, 80*4882a593Smuzhiyun MODE_VIRTUAL, 81*4882a593Smuzhiyun }; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun struct cw_bat_platform_data { 84*4882a593Smuzhiyun int divider_res1; 85*4882a593Smuzhiyun int divider_res2; 86*4882a593Smuzhiyun u32 *cw_bat_config_info; 87*4882a593Smuzhiyun int design_capacity; 88*4882a593Smuzhiyun }; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun struct cw_battery { 91*4882a593Smuzhiyun struct i2c_client *client; 92*4882a593Smuzhiyun struct workqueue_struct *battery_workqueue; 93*4882a593Smuzhiyun struct delayed_work battery_delay_work; 94*4882a593Smuzhiyun struct cw_bat_platform_data plat_data; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun struct power_supply *rk_bat; 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun struct power_supply *chrg_usb_psy; 99*4882a593Smuzhiyun struct power_supply *chrg_ac_psy; 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #ifdef CONFIG_PM 102*4882a593Smuzhiyun struct timespec suspend_time_before; 103*4882a593Smuzhiyun struct timespec after; 104*4882a593Smuzhiyun int suspend_resume_mark; 105*4882a593Smuzhiyun #endif 106*4882a593Smuzhiyun int charger_mode; 107*4882a593Smuzhiyun int capacity; 108*4882a593Smuzhiyun int voltage; 109*4882a593Smuzhiyun int status; 110*4882a593Smuzhiyun int time_to_empty; 111*4882a593Smuzhiyun int alt; 112*4882a593Smuzhiyun u32 monitor_sec; 113*4882a593Smuzhiyun u32 bat_mode; 114*4882a593Smuzhiyun int bat_change; 115*4882a593Smuzhiyun bool dual_battery; 116*4882a593Smuzhiyun int charge_count; 117*4882a593Smuzhiyun }; 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun #endif 120