// SPDX-License-Identifier: GPL-2.0
// BQ25980 Battery Charger Driver
// Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/
#include <linux/err.h>
#include <linux/i2c.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/gpio/consumer.h>
#include <linux/power_supply.h>
#include <linux/regmap.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include "bq25980_charger.h"
struct bq25980_state {
bool dischg;
bool ovp;
bool ocp;
bool wdt;
bool tflt;
bool online;
bool ce;
bool hiz;
bool bypass;
u32 vbat_adc;
u32 vsys_adc;
u32 ibat_adc;
};
enum bq25980_id {
BQ25980,
BQ25975,
BQ25960,
};
struct bq25980_chip_info {
int model_id;
const struct regmap_config *regmap_config;
int busocp_def;
int busocp_sc_max;
int busocp_byp_max;
int busocp_sc_min;
int busocp_byp_min;
int busovp_sc_def;
int busovp_byp_def;
int busovp_sc_step;
int busovp_sc_offset;
int busovp_byp_step;
int busovp_byp_offset;
int busovp_sc_min;
int busovp_sc_max;
int busovp_byp_min;
int busovp_byp_max;
int batovp_def;
int batovp_max;
int batovp_min;
int batovp_step;
int batovp_offset;
int batocp_def;
int batocp_max;
};
struct bq25980_init_data {
u32 ichg;
u32 bypass_ilim;
u32 sc_ilim;
u32 vreg;
u32 iterm;
u32 iprechg;
u32 bypass_vlim;
u32 sc_vlim;
u32 ichg_max;
u32 vreg_max;
};
struct bq25980_device {
struct i2c_client *client;
struct device *dev;
struct power_supply *charger;
struct power_supply *battery;
struct mutex lock;
struct regmap *regmap;
char model_name[I2C_NAME_SIZE];
struct bq25980_init_data init_data;
const struct bq25980_chip_info *chip_info;
struct bq25980_state state;
int watchdog_timer;
};
static struct reg_default bq25980_reg_defs[] = {
{BQ25980_BATOVP, 0x5A},
{BQ25980_BATOVP_ALM, 0x46},
{BQ25980_BATOCP, 0x51},
{BQ25980_BATOCP_ALM, 0x50},
{BQ25980_BATUCP_ALM, 0x28},
{BQ25980_CHRGR_CTRL_1, 0x0},
{BQ25980_BUSOVP, 0x26},
{BQ25980_BUSOVP_ALM, 0x22},
{BQ25980_BUSOCP, 0xD},
{BQ25980_BUSOCP_ALM, 0xC},
{BQ25980_TEMP_CONTROL, 0x30},
{BQ25980_TDIE_ALM, 0xC8},
{BQ25980_TSBUS_FLT, 0x15},
{BQ25980_TSBAT_FLG, 0x15},
{BQ25980_VAC_CONTROL, 0x0},
{BQ25980_CHRGR_CTRL_2, 0x0},
{BQ25980_CHRGR_CTRL_3, 0x20},
{BQ25980_CHRGR_CTRL_4, 0x1D},
{BQ25980_CHRGR_CTRL_5, 0x18},
{BQ25980_STAT1, 0x0},
{BQ25980_STAT2, 0x0},
{BQ25980_STAT3, 0x0},
{BQ25980_STAT4, 0x0},
{BQ25980_STAT5, 0x0}