// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once namespace bsp::battery_charger { constexpr inline auto BATTERY_CHARGER_I2C_ADDR = 0xD2 >> 1; constexpr inline auto FUEL_GAUGE_I2C_ADDR = 0x6C >> 1; constexpr inline auto TOP_CONTROLLER_I2C_ADDR = 0xCC >> 1; enum class Registers { TOP_CONTROLL_PMIC_ID_REG = 0x20, TOP_CONTROLL_PMIC_VER_REG = 0x21, TOP_CONTROLL_IRQ_SRC_REG = 0x22, TOP_CONTROLL_IRQ_MASK_REG = 0x23, SYSTEM_IRQ_REG = 0x24, STATUS_REG = 0x00, VALRT_Th_REG = 0x01, TALRT_Th_REG = 0x02, SALRT_Th_REG = 0x03, AtRate_REG = 0x04, RepCap_REG = 0x05, RepSOC_REG = 0x06, Age_REG = 0x07, TEMP_REG = 0x08, VCELL_REG = 0x09, Current_REG = 0x0A, AvgCurrent_REG = 0x0B, QResidual_REG = 0x0C, MixSOC_REG = 0x0D, AvSOC_REG = 0x0E, MixCap_REG = 0x0F, FullCAP_REG = 0x10, TTE_REG = 0x11, QRtable00_REG = 0x12, FullSOCthr_REG = 0x13, RSLOW_REG = 0x14, AvgTA_REG = 0x16, Cycles_REG = 0x17, DesignCap_REG = 0x18, AvgVCELL_REG = 0x19, MaxMinTemp_REG = 0x1A, MaxMinVolt_REG = 0x1B, MaxMinCurr_REG = 0x1C, CONFIG_REG = 0x1D, CONFIG2_REG = 0xBB, ICHGTERM_REG = 0x1E, AvCap_REG = 0x1F, TTF_REG = 0x20, DevName_REG = 0x21, QRtable10_REG = 0x22, FullCAPNom_REG = 0x23, TempNom_REG = 0x24, TempLim_REG = 0x25, AIN0_REG = 0x27, LearnCFG_REG = 0x28, FilterCFG_REG = 0x29, RelaxCFG_REG = 0x2A, MiscCFG_REG = 0x2B, TGAIN_REG = 0x2C, TOFF_REG = 0x2D, CGAIN_REG = 0x2E, COFF_REG = 0x2F, QRtable20_REG = 0x32, AtTTF_REG = 0x33, FullCapRep_REG = 0x35, lavgEmpty_REG = 0x36, FCTC_REG = 0x37, RCOMP0_REG = 0x38, TempCo_REG = 0x39, VEmpty_REG = 0x3A, TIMER_REG = 0x3E, SHDNTIMER_REG = 0x3F, CURVE = 0xb9, QRtable30_REG = 0x42, dQ_acc_REG = 0x45, dP_acc_REG = 0x46, ConvgCfg_REG = 0x49, VFRemCap_REG = 0x4A, QH_REG = 0x4D, CHG_INT_REG = 0xB0, CHG_INT_MASK = 0xB1, CHG_INT_OK = 0xB2, CHG_DETAILS_00 = 0xB3, CHG_DETAILS_01 = 0xB4, CHG_DETAILS_02 = 0xB5, CHG_CNFG_00 = 0xB7, CHG_CNFG_01 = 0xB8, CHG_CNFG_02 = 0xB9, CHG_CNFG_03 = 0xBA, CHG_CNFG_04 = 0xBB, CHG_CNFG_05 = 0xBC, CHG_CNFG_06 = 0xBD, CHG_CNFG_07 = 0xBE, CHG_CNFG_09 = 0xC0, CHG_CNFG_10 = 0xC1, CHG_CNFG_11 = 0xC2, CHG_CNFG_12 = 0xC3 }; // STATUS register bits enum STATUS { Inm = (1 << 0), POR = (1 << 1), SPR_2 = (1 << 2), BST = (1 << 3), Isysmx = (1 << 4), SPR_5 = (1 << 5), ThmHot = (1 << 6), dSOCi = (1 << 7), Vmn = (1 << 8), Tmn = (1 << 9), Smn = (1 << 10), Bi = (1 << 11), Vmx = (1 << 12), Tmx = (1 << 13), Smx = (1 << 14), Br = (1 << 15), }; /// CHG_INT register enum class CHG_INT { BYP_I = (1 << 0), RSVD_I = (1 << 1), BATP_I = (1 << 2), BAT_I = (1 << 3), CHG_I = (1 << 4), WCIN_I = (1 << 5), CHGIN_I = (1 << 6), AICL_I = (1 << 7), }; enum class CHG_MASK { BYP_M = (1 << 0), RSVD_M = (1 << 1), BATP_M = (1 << 2), BAT_M = (1 << 3), CHG_M = (1 << 4), WCIN_M = (1 << 5), CHGIN_M = (1 << 6), AICL_M = (1 << 7) }; /// CHG_DETAILS_01 register enum class CHG_DETAILS_01 { CHARGER_PREQUALIFICATION = 0x00, CHARGER_CC = 0x01, CHARGER_CV = 0x02, CHARGER_TOPOFF = 0x03, CHARGER_DONE = 0x04, CHARGER_TIMER_FAULT = 0x06, CHARGER_BATTERY_DETECT = 0x07, CHARGER_OFF = 0x08, }; // CHG_CNFG_09 register enum class USBCurrentLimit { lim500mA = 0x0F, lim1000mA = 0x1E, }; // CHG_CNFG_02 register enum class ChargeCurrentLimit { lim300mA = 0x06, /// est. 0.2C of battery lim450mA = 0x09, /// default lim1600mA = 0x20, /// 1C of battery }; enum class ChargeTerminationVoltage { mV4100 = 0x12, /// 4.1V mV4350 = 0x1D, /// 4.35V nominal battery voltage }; // CONFIG register bits enum class CONFIG { Ber = 1 << 0, Bei = 1 << 1, Aen = 1 << 2, FTHRM = 1 << 3, ETHRM = 1 << 4, SPR_5 = 1 << 5, I2CSH = 1 << 6, SHDN = 1 << 7, Tex = 1 << 8, Ten = 1 << 9, AINSH = 1 << 10, SPR_11 = 1 << 11, Vs = 1 << 12, Ts = 1 << 13, Ss = 1 << 14, SPR_15 = 1 << 15 }; // CONFIG2 register bits enum class CONFIG2 { ISysNCurr = 1 << 0, OCVQen = 1 << 4, LdMdl = 1 << 5, TAlrtEn = 1 << 6, dSOCen = 1 << 7, ThmHotAlrtEn = 1 << 8, ThmHotEn = 1 << 9, FCThmHot = 1 << 10, SPR = 1 << 11 }; } // namespace bsp::battery_charger