/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright 2021 Google, LLC
 *
 */

#ifndef MAX77779_CHARGER_H_
#define MAX77779_CHARGER_H_

#include <linux/gpio.h>

#include "max77779_usecase.h"

#define MAX77779_COP_SENSE_RESISTOR_VAL 2 /* 2mOhm */
#define MAX77779_COP_MAX_VALUE (0xffff * 1000 / MAX77779_COP_SENSE_RESISTOR_VAL)
#define MAX77779_COP_WARN_THRESHOLD 105 /* Percentage */
#define MAX77779_COP_MIN_DEBOUNCE_TIME_MS 16
#define MAX77779_CHG_NUM_IRQS 16

struct max77779_chgr_data {
	struct device *dev;

	/* Charger sub-IRQ routing for COP */
	struct irq_domain	*domain;
	uint32_t		mask;
	uint32_t		mask_u;  /* pending updates */
	uint32_t		trig_type;
	struct mutex 		irq_lock;

	struct power_supply *psy;
	struct power_supply *wcin_psy;
	struct power_supply *chgin_psy;

	struct power_supply *wlc_psy;
	struct power_supply *fg_psy;
	struct regmap *regmap;

	struct gvotable_election *mode_votable;
	struct max77779_usecase_data uc_data;
	struct delayed_work mode_rerun_work;

	struct gvotable_election *dc_icl_votable;
	struct gvotable_election *dc_suspend_votable;
	struct gvotable_election *wlc_spoof_votable;

	struct delayed_work cop_enable_work;
	uint32_t cop_warn;
	uint32_t cc_max;

	/* wcin inlim tracking */
	struct delayed_work wcin_inlim_work;
	uint32_t wcin_inlim_t;
	uint32_t wcin_inlim_flag;
	uint32_t wcin_inlim_headroom;
	uint32_t wcin_inlim_step;
	uint32_t wcin_soft_icl;
	uint32_t wcin_inlim_en;
	uint32_t dc_icl;
	struct mutex wcin_inlim_lock;

#if IS_ENABLED(CONFIG_GPIOLIB)
	struct gpio_chip gpio;
#endif

	bool charge_done;
	bool chgin_input_suspend;
	bool wcin_input_suspend;
	bool wlc_spoof;
	bool thm2_sts;

	int irq_gpio;
	int irq_int;
	bool disable_internal_irq_handler;

	struct device *pmic_dev;

	struct dentry *de;

	atomic_t insel_cnt;
	bool insel_clear;	/* when set, irq clears CHGINSEL_MASK */

	atomic_t early_topoff_cnt;

	struct mutex io_lock;
	struct mutex mode_callback_lock;
	struct mutex prot_lock;
	struct mutex reg_dump_lock;
	bool resume_complete;
	bool init_complete;
	struct wakeup_source *usecase_wake_lock;

	int fship_dtls;
	bool online;
	bool wden;

	/* Force to change FCCM mode during OTG at high battery voltage */
	bool otg_changed;

	/* debug interface, register to read or write */
	u32 debug_reg_address;

	int chg_term_voltage;
	int chg_term_volt_debounce;
};
int max77779_charger_init(struct max77779_chgr_data *data);
void max77779_charger_remove(struct max77779_chgr_data *data);
bool max77779_chg_is_reg(struct device *dev, unsigned int reg);
#if IS_ENABLED(CONFIG_PM)
int max77779_charger_pm_suspend(struct device *dev);
int max77779_charger_pm_resume(struct device *dev);
#endif
#endif
