Init the google-modules/bms codebase

Porting driver/power/supply/google/* from
s-dev-gs-pixel-4.19 branch. The last commit ID is
c030bdb806ef12bfed9d3f33ed0a783cbff269d5

Bug: 160835098
Change-Id: I14a6204dcd9cefa3aecad825e8dfeb8d8c97e61e
Signed-off-by: Ken Tsou <[email protected]>
diff --git a/max1730x.h b/max1730x.h
new file mode 100644
index 0000000..fd2a0e4
--- /dev/null
+++ b/max1730x.h
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2019 Google, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef MAX1730X_H_
+#define MAX1730X_H_
+
+#include <linux/device.h>
+#include <linux/regmap.h>
+#include "max1720x.h"
+
+#define MAX1730X_N_OF_HISTORY_PAGES 100
+
+#define MAX1730X_GAUGE_PASS1	0x404
+#define MAX1730X_NVPRTTH1_CHARGING	0x0008
+#define MAX1730X_NPROTCFG_PASS1		0x6EA3
+#define MAX1730X_NPROTCFG_PASS2		0x0A04
+
+enum max1730x_register {
+	MAX1730X_MAXMINVOLT = 0x08,
+	MAX1730X_MAXMINTEMP = 0x09,
+	MAX1730X_MAXMINCURR = 0x0A,
+	MAX1730X_CONFIG = 0x0B,
+	MAX1730X_FULLCAPREP = 0x10,
+	MAX1730X_VCELL = 0x1A,
+	MAX1730X_TEMP = 0x1B,
+	MAX1730X_CURRENT = 0x1C,
+	MAX1730X_AVGCURRENT = 0x1D,
+	MAX1730X_MIXCAP = 0x2B,
+	MAX1730X_FULLCAP = 0x35,
+	MAX1730X_LEARNCFG = 0xA1,
+	MAX1730X_MAXPEAKPWR = 0xA4,
+	MAX1730X_SUSPEAKPWR = 0xA5,
+	MAX1730X_PACKRESISTANCE = 0xA6,
+	MAX1730X_SYSRESISTANCE = 0xA7,
+	MAX1730X_MINSYSVOLTAGE = 0xA8,
+	MAX1730X_MPPCURRENT = 0xA9,
+	MAX1730X_SPPCURRENT = 0xAA,
+	MAX1730X_CONFIG2 = 0xAB,
+	MAX1730X_IALRTTH = 0xAC,
+	MAX1730X_MINVOLT = 0xAD,
+	MAX1730X_MINCURR = 0xAE,
+	MAX1730X_NVPRTTH1BAK = 0xD6,
+	MAX1730X_NPROTCFG = 0xD7,
+
+};
+
+enum max1730x_nvram {
+	MAX1730X_NVRAM_START 	= 0x80,
+	MAX1730X_NMANFCTRNAME0	= 0xCC,
+	MAX1730X_NMANFCTRNAME1	= 0xCD,
+	MAX1730X_NVPRTTH1 	= 0xD0,
+	MAX1730X_NDPLIMIT	= 0xE0,
+	MAX1730X_NSCOCVLIM	= 0xE1,
+
+	MAX1730X_NVRAM_END 	= 0xEF,
+	MAX1730X_HISTORY_START 	= 0xF0,
+	MAX1730X_HISTORY_WRITE_STATUS_START = 0xF2,
+	MAX1730X_HISTORY_VALID_STATUS_END = 0xFB,
+	MAX1730X_HISTORY_WRITE_STATUS_END = 0xFE,
+	MAX1730X_HISTORY_END	= 0xFF,
+};
+
+enum max1730x_command_bits {
+	MAX1730X_COMMAND_FUEL_GAUGE_RESET = 0x8000,
+	MAX1730X_READ_HISTORY_CMD_BASE = 0xE22E,
+	MAX1730X_COMMAND_HISTORY_RECALL_WRITE_0 = 0xE29C,
+	MAX1730X_COMMAND_HISTORY_RECALL_VALID_0 = 0xE29C,
+	MAX1730X_COMMAND_HISTORY_RECALL_VALID_1 = 0xE29D,
+};
+
+#define MAX1730X_HISTORY_PAGE_SIZE \
+	(MAX1730X_HISTORY_END - MAX1730X_HISTORY_START + 1)
+
+#define MAX1730X_N_OF_HISTORY_FLAGS_REG \
+	(MAX1730X_HISTORY_END - \
+		MAX1730X_HISTORY_END + 1 + \
+		MAX1730X_HISTORY_VALID_STATUS_END - \
+		MAX1730X_HISTORY_START + 1)
+
+/** ------------------------------------------------------------------------ */
+
+static bool max1730x_is_reg(struct device *dev, unsigned int reg)
+{
+	switch (reg) {
+	case MAX1720X_COMMAND:
+	case MAX1720X_COMMSTAT:
+	case MAX1720X_LOCK:
+	case MAX1720X_ODSCTH:
+	case MAX1720X_ODSCCFG:
+	case MAX1720X_VFOCV:
+	case MAX1720X_VFSOC:
+	case 0x00 ... 0x4F:
+	case 0xA0 ... 0xAE:
+	case 0xB0 ... 0xDF:
+	case 0xF0:
+	case 0xF5:
+		return true;
+	}
+
+	return false;
+}
+
+static const struct regmap_config max1730x_regmap_cfg = {
+	.reg_bits = 8,
+	.val_bits = 16,
+	.val_format_endian = REGMAP_ENDIAN_NATIVE,
+	.max_register = MAX1720X_VFSOC,
+	.readable_reg = max1730x_is_reg,
+	.volatile_reg = max1730x_is_reg,
+};
+
+static bool max1730x_is_nvram_reg(struct device *dev, unsigned int reg)
+{
+	return (reg >= MAX1730X_NVRAM_START &&
+		reg <= MAX1730X_HISTORY_END);
+}
+
+const struct regmap_config max1730x_regmap_nvram_cfg = {
+	.reg_bits = 8,
+	.val_bits = 16,
+	.val_format_endian = REGMAP_ENDIAN_NATIVE,
+	.max_register = MAX1730X_HISTORY_END,
+	.readable_reg = max1730x_is_nvram_reg,
+	.volatile_reg = max1730x_is_nvram_reg,
+};
+
+/** ------------------------------------------------------------------------ */
+
+/* see b/119416045 for layout */
+static const struct max17x0x_reg max1730x[] = {
+	[MAX17X0X_TAG_avgc] = { ATOM_INIT_REG16(MAX1730X_AVGCURRENT)},
+	[MAX17X0X_TAG_cnfg] = { ATOM_INIT_REG16(MAX1730X_CONFIG)},
+	[MAX17X0X_TAG_mmdv] = { ATOM_INIT_REG16(MAX1730X_MAXMINVOLT)},
+	[MAX17X0X_TAG_vcel] = { ATOM_INIT_REG16(MAX1730X_VCELL)},
+	[MAX17X0X_TAG_temp] = { ATOM_INIT_REG16(MAX1730X_TEMP)},
+	[MAX17X0X_TAG_curr] = { ATOM_INIT_REG16(MAX1730X_CURRENT)},
+	[MAX17X0X_TAG_mcap] = { ATOM_INIT_REG16(MAX1730X_MIXCAP)},
+	[MAX17X0X_TAG_avgr] = { ATOM_INIT_REG16(MAX1730X_NMANFCTRNAME1) },
+	[MAX17X0X_TAG_vfsoc] = { ATOM_INIT_REG16(MAX1720X_VFSOC)},
+	[MAX17X0X_TAG_vfocv] = { ATOM_INIT_REG16(MAX1720X_VFOCV)},
+
+	[MAX17X0X_TAG_BCNT] = { ATOM_INIT_MAP(0x8e, 0x8f, 0x9d, 0x9e, 0x9f,
+					      0xb2, 0xb4, 0xb6, 0xc7, 0xe2)},
+	[MAX17X0X_TAG_SNUM] = { ATOM_INIT_MAP(0xce, 0xe6, 0xe7, 0xe8, 0xe9,
+					      0xea, 0xeb, 0xec, 0xed, 0xee,
+					      0xef) },
+
+	[MAX17X0X_TAG_HSTY] = { ATOM_INIT_SET(0xf0, 0xf2, 0xfb, 0xfe, 0xff) },
+	[MAX17X0X_TAG_BCEA] = { ATOM_INIT_SET(MAX1730X_NMANFCTRNAME0,
+					      MAX1730X_NDPLIMIT,
+					      MAX1730X_NSCOCVLIM) },
+	[MAX17X0X_TAG_rset] = { ATOM_INIT_SET16(MAX1730X_CONFIG2,
+					MAX1730X_COMMAND_FUEL_GAUGE_RESET,
+					700)},
+	[MAX17X0X_TAG_BRES] = { ATOM_INIT_SET(MAX1730X_NMANFCTRNAME1,
+					      MAX1730X_NMANFCTRNAME0) },
+};
+
+#endif
\ No newline at end of file