File Index
Files and directories
Sign in
FILE

adc-battery-helper.h

File preview with syntax highlighting.

linux-6.19.14/drivers/power/supply/adc-battery-helper.h C
 1/* SPDX-License-Identifier: GPL-2.0+ */
 2/*
 3 * Helper for batteries with accurate current and voltage measurement, but
 4 * without temperature measurement or without a "resistance-temp-table".
 5 * Copyright (c) 2021-2025 Hans de Goede <hansg@kernel.org>
 6 */
 7
 8#include <linux/mutex.h>
 9#include <linux/workqueue.h>
10
11#define ADC_BAT_HELPER_MOV_AVG_WINDOW_SIZE		8
12
13struct power_supply;
14struct gpio_desc;
15
16/*
17 * The adc battery helper code needs voltage- and current-now to be sampled as
18 * close to each other (in sample-time) as possible. A single getter function is
19 * used to allow the battery driver to handle this in the best way possible.
20 */
21typedef int (*adc_battery_helper_get_func)(struct power_supply *psy, int *volt, int *curr);
22
23struct adc_battery_helper {
24	struct power_supply *psy;
25	struct gpio_desc *charge_finished;
26	struct delayed_work work;
27	struct mutex lock;
28	adc_battery_helper_get_func get_voltage_and_current_now;
29	int ocv_uv[ADC_BAT_HELPER_MOV_AVG_WINDOW_SIZE];		/* micro-volt */
30	int intern_res_mohm[ADC_BAT_HELPER_MOV_AVG_WINDOW_SIZE]; /* milli-ohm */
31	int poll_count;
32	int ocv_avg_index;
33	int ocv_avg_uv;						/* micro-volt */
34	int intern_res_poll_count;
35	int intern_res_avg_index;
36	int intern_res_avg_mohm;				/* milli-ohm */
37	int volt_uv;						/* micro-volt */
38	int curr_ua;						/* micro-ampere */
39	int capacity;						/* percent */
40	int status;
41	bool supplied;
42};
43
44extern const enum power_supply_property adc_battery_helper_properties[];
45/* Must be const cannot be an external. Asserted in adc-battery-helper.c */
46#define ADC_HELPER_NUM_PROPERTIES 7
47
48int adc_battery_helper_init(struct adc_battery_helper *help, struct power_supply *psy,
49			    adc_battery_helper_get_func get_voltage_and_current_now,
50			    struct gpio_desc *charge_finished_gpio);
51/*
52 * The below functions can be directly used as power-supply / suspend-resume
53 * callbacks. They cast the power_supply_get_drvdata() / dev_get_drvdata() data
54 * directly to struct adc_battery_helper. Therefor struct adc_battery_helper
55 * MUST be the first member of the battery driver's data struct.
56 */
57int adc_battery_helper_get_property(struct power_supply *psy,
58				    enum power_supply_property psp,
59				    union power_supply_propval *val);
60void adc_battery_helper_external_power_changed(struct power_supply *psy);
61int adc_battery_helper_suspend(struct device *dev);
62int adc_battery_helper_resume(struct device *dev);
~/ Read-only file preview.