/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2021 The Linux Foundation. All rights reserved.
 * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
 */

#ifndef __QBG_BATTERY_PROFILE_H__
#define __QBG_BATTERY_PROFILE_H__

#define is_between(left, right, value) \
		(((left) >= (right) && (left) >= (value) \
			&& (value) >= (right)) \
		|| ((left) <= (right) && (left) <= (value) \
			&& (value) <= (right)))

enum ttf_calc_mode {
	TTF_MODE_VBAT_STEP_CHG = 0,
	TTF_MODE_OCV_STEP_CHG,
	TTF_MODE_SOC_STEP_CHG,
};

struct battery_data_table0 {
	int	soc_length;
	int	ocv_length;
	int	*soc;
	int	*ocv;
};

/**
 * struct qbg_battery_data - Structure for QBG battery data
 * @dev_no:		Device number for QBG battery char device
 * @profile_node:	Pointer to devicetree node handle of profile
 * @battery_class:	Pointer to battery class
 * @battery_device:	Pointer to battery class device
 * @battery_cdev:	QBG battery char device
 * @bp:			QBG battery configuration
 * @bp_charge_tables:	Charge tables in QBG battery profile
 * @bp_discharge_tables:	Discharge tables in QBG battery profile
 * @table0:		Two tables for PON OCV to SOC mapping
 * @num_ctables:	Number of charge tables
 * @num_dtables:	Number of discharge tables
 */

struct qbg_battery_data {
	dev_t				dev_no;
	struct device_node		*profile_node;
	struct class			*battery_class;
	struct device			*battery_device;
	struct cdev			battery_cdev;
	struct battery_config		bp;
	struct battery_data_table	**bp_charge_tables;
	struct battery_data_table	**bp_discharge_tables;
	struct battery_data_table0	table0[2];
	int				num_ctables;
	int				num_dtables;
};

int qbg_batterydata_init(struct device_node *node,
	struct qbg_battery_data *battery);
void qbg_batterydata_exit(struct qbg_battery_data *battery);
int qbg_lookup_soc_ocv(struct qbg_battery_data *battery, int *pon_soc, int ocv, bool charging);
#endif /* __QBG_BATTERY_PROFILE_H__ */
