#include <linux/mutex.h>
#include <linux/workqueue.h>
#define ADC_BAT_HELPER_MOV_AVG_WINDOW_SIZE 8
struct power_supply;
struct gpio_desc;
typedef int (*adc_battery_helper_get_func)(struct power_supply *psy, int *volt, int *curr);
struct adc_battery_helper {
struct power_supply *psy;
struct gpio_desc *charge_finished;
struct delayed_work work;
struct mutex lock;
adc_battery_helper_get_func get_voltage_and_current_now;
int ocv_uv[ADC_BAT_HELPER_MOV_AVG_WINDOW_SIZE];
int intern_res_mohm[ADC_BAT_HELPER_MOV_AVG_WINDOW_SIZE];
int poll_count;
int ocv_avg_index;
int ocv_avg_uv;
int intern_res_poll_count;
int intern_res_avg_index;
int intern_res_avg_mohm;
int volt_uv;
int curr_ua;
int capacity;
int status;
bool supplied;
};
extern const enum power_supply_property adc_battery_helper_properties[];
#define ADC_HELPER_NUM_PROPERTIES 7
int adc_battery_helper_init(struct adc_battery_helper *help, struct power_supply *psy,
adc_battery_helper_get_func get_voltage_and_current_now,
struct gpio_desc *charge_finished_gpio);
int adc_battery_helper_get_property(struct power_supply *psy,
enum power_supply_property psp,
union power_supply_propval *val);
void adc_battery_helper_external_power_changed(struct power_supply *psy);
int adc_battery_helper_suspend(struct device *dev);
int adc_battery_helper_resume(struct device *dev);