/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
/*
 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
 */

#ifndef __QBG_H__
#define __QBG_H__

#define MAX_FIFO_COUNT			36
#define QBG_MAX_STEP_CHG_ENTRIES	6

enum QBG_STATE {
	QBG_LPM,
	QBG_MPM,
	QBG_HPM,
	QBG_FAST_CHAR,
	QBG_PON_OCV,
	QBG_STATE_MAX,
};

enum QBG_SDAM_DATA_OFFSET {
	QBG_ACC0_OFFSET = 0,
	QBG_ACC1_OFFSET = 2,
	QBG_ACC2_OFFSET = 4,
	QBG_TBAT_OFFSET = 6,
	QBG_IBAT_OFFSET = 8,
	QBG_VREF_OFFSET = 10,
	QBG_DATA_TAG_OFFSET = 12,
	QBG_QG_STS_OFFSET,
	QBG_STS1_OFFSET,
	QBG_STS2_OFFSET,
	QBG_STS3_OFFSET,
	QBG_ONE_FIFO_LENGTH,
};

enum qbg {
	QBG_PARAM_SOC,
	QBG_PARAM_BATT_SOC,
	QBG_PARAM_SYS_SOC,
	QBG_PARAM_ESR,
	QBG_PARAM_OCV_UV,
	QBG_PARAM_MAX_LOAD_NOW,
	QBG_PARAM_MAX_LOAD_AVG,
	QBG_PARAM_HOLD_SOC_100PCT,
	QBG_PARAM_CHARGE_CYCLE_COUNT,
	QBG_PARAM_LEARNED_CAPACITY,
	QBG_PARAM_TTF_100MS,
	QBG_PARAM_TTE_100MS,
	QBG_PARAM_SOH,
	QBG_PARAM_TBAT,
	QBG_PARAM_SYS_SOC_HOLD_100PCT,
	QBG_PARAM_JEITA_COOL_THRESHOLD,
	QBG_PARAM_TOTAL_IMPEDANCE,
	QBG_PARAM_ESSENTIAL_PARAM_REVID,
	QBG_PARAM_FIFO_TIMESTAMP,
	QBG_PARAM_MAX,
};

struct qbg_essential_params {
	short int		msoc;
	short int		cutoff_soc;
	short int		full_soc;
	short int		x0;
	short int		x1;
	short int		x2;
	short int		soh_r;
	short int		soh_c;
	short int		theta0;
	short int		theta1;
	short int		theta2;
	short int		i1full;
	short int		i2full;
	short int		i1cutoff;
	short int		i2cutoff;
	short int		syssoc;
	int			discharge_cycle_count;
	int			charge_cycle_count;
	unsigned int		rtc_time;
	short int		batt_therm;
	unsigned short int	ocv;
} __attribute__ ((__packed__));

struct fifo_data {
	unsigned short int	v1;
	unsigned short int	v2;
	unsigned short int	i;
	unsigned short int	tbat;
	unsigned short int	ibat;
	unsigned short int	vref;
	char			data_tag;
	char			qg_sts;
	char			sts1;
	char			sts2;
	char			sts3;
} __attribute__ ((__packed__));

struct k_fifo_data {
	unsigned int	v1;
	unsigned int	v2;
	unsigned int	i;
	unsigned int	tbat;
	unsigned int	ibat;
	unsigned int	vref;
	unsigned int	data_tag;
	unsigned int	qg_sts;
	unsigned int	sts1;
	unsigned int	sts2;
	unsigned int	sts3;
} __attribute__ ((__packed__));

struct qbg_config {
	unsigned int	batt_id;
	unsigned int	pon_ocv;
	unsigned int	pon_ibat;
	unsigned int	pon_tbat;
	unsigned int	pon_soc;
	unsigned int	float_volt_uv;
	unsigned int	fastchg_curr_ma;
	unsigned int	vbat_cutoff_mv;
	unsigned int	ibat_cutoff_ma;
	unsigned int	vph_min_mv;
	unsigned int	iterm_ma;
	unsigned int	rconn_mohm;
	unsigned long	current_time;
	unsigned int	sdam_batt_id;
	unsigned int	essential_param_revid;
	unsigned long	sample_time_us[QBG_STATE_MAX];
} __attribute__ ((__packed__));

struct qbg_param {
	unsigned int			data;
	_Bool				valid;
};

struct qbg_kernel_data {
	unsigned int			seq_no;
	unsigned int			fifo_time;
	unsigned int			fifo_count;
	struct k_fifo_data		fifo[MAX_FIFO_COUNT];
	struct qbg_param		param[QBG_PARAM_MAX];
} __attribute__ ((__packed__));

struct qbg_user_data {
	struct qbg_param		param[QBG_PARAM_MAX];
} __attribute__ ((__packed__));

struct range_data {
	int		low_threshold;
	int		high_threshold;
	unsigned int	value;
} __attribute__ ((__packed__));

struct ranges {
	struct		range_data data[QBG_MAX_STEP_CHG_ENTRIES];
	unsigned char	range_count;
	_Bool		valid;
} __attribute__((__packed__));

struct qbg_step_chg_jeita_params {
	int		jeita_full_fv_10nv;
	int		jeita_full_iterm_10na;
	int		jeita_warm_adc_value;
	int		jeita_cool_adc_value;
	int		battery_beta;
	int		battery_therm_kohm;
	struct ranges	step_fcc_cfg;
	struct ranges	jeita_fcc_cfg;
	struct ranges	jeita_fv_cfg;
	unsigned char	ttf_calc_mode;
} __attribute__ ((__packed__));

/*  IOCTLs to read & write QBG config and essential params */
#define QBGIOCXCFG	_IOR('B', 0x01, struct qbg_config)
#define QBGIOCXEPR	_IOR('B', 0x02, struct qbg_essential_params)
#define QBGIOCXEPW	_IOWR('B', 0x03, struct qbg_essential_params)
#define QBGIOCXSTEPCHGCFG \
		_IOWR('B', 0x04, struct qbg_step_chg_jeita_params)

#endif
