Snap for 12365243 from 67c2ed4d426cf2113e46745d60caca105be840a9 to android13-gs-pixel-5.10-24Q4-release
Change-Id: I30b69a0e95b53a2141f3aaf62bc9c7fc7a18a94b
Signed-off-by: Coastguard Worker <[email protected]>
diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power
index 5aa0e50..83e1739 100644
--- a/Documentation/ABI/testing/sysfs-class-power
+++ b/Documentation/ABI/testing/sysfs-class-power
@@ -16,4 +16,25 @@
Write 0 to disable this feature.
Access: Read/Write
- Valid values: Represented as int
\ No newline at end of file
+ Valid values: Represented as int
+
+What: /sys/class/power_supply/maxfg/registers_dump
+Date: Sep 2024
+Contact: "Spade Lee" <[email protected]>
+Description:
+ Read to dump fuel gauge registers
+Users: Dumpstate
+
+What: /sys/class/power_supply/maxfg_base/registers_dump
+Date: Sep 2024
+Contact: "Spade Lee" <[email protected]>
+Description:
+ Read to dump base fuel gauge registers
+Users: Dumpstate
+
+What: /sys/class/power_supply/maxfg_secondary/registers_dump
+Date: Sep 2024
+Contact: "Spade Lee" <[email protected]>
+Description:
+ Read to dump secondary fuel gauge registers
+Users: Dumpstate
diff --git a/max1720x_battery.c b/max1720x_battery.c
index 4eb0d93..7ed22c7 100644
--- a/max1720x_battery.c
+++ b/max1720x_battery.c
@@ -4467,6 +4467,67 @@
* break;
*/
+static ssize_t registers_dump_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct power_supply *psy = container_of(dev, struct power_supply, dev);
+ struct max1720x_chip *chip = power_supply_get_drvdata(psy);
+ u32 reg_address, data;
+ int ret = 0, offset = 0;
+
+ if (!chip->regmap.regmap) {
+ dev_err(dev, "Failed to read, no regmap\n");
+ return -EIO;
+ }
+
+ for (reg_address = 0; reg_address <= 0xFF; reg_address++) {
+ if (!max1720x_is_reg(dev, reg_address))
+ continue;
+
+ ret = regmap_read(chip->regmap.regmap, reg_address, &data);
+ if (ret < 0)
+ continue;
+
+ ret = sysfs_emit_at(buf, offset, "%02x: %04x\n", reg_address, data);
+ if (!ret) {
+ dev_err(dev, "[%s]: Not all registers printed. last:%x\n", __func__,
+ reg_address - 1);
+ break;
+ }
+ offset += ret;
+ }
+
+ if (!chip->regmap_nvram.regmap)
+ return offset;
+
+ ret = sysfs_emit_at(buf, offset, "\nnvram:\n");
+ if (!ret)
+ return offset;
+
+ offset += ret;
+
+ for (reg_address = 0; reg_address <= 0xFF; reg_address++) {
+ if (!max1720x_is_nvram_reg(dev, reg_address))
+ continue;
+
+ ret = regmap_read(chip->regmap_nvram.regmap, reg_address, &data);
+ if (ret < 0)
+ continue;
+
+ ret = sysfs_emit_at(buf, offset, "%02x: %04x\n", reg_address, data);
+ if (!ret) {
+ dev_err(dev, "[%s]: Not all registers printed. last:%x\n", __func__,
+ reg_address - 1);
+ break;
+ }
+ offset += ret;
+ }
+
+ return offset;
+}
+
+static DEVICE_ATTR_RO(registers_dump);
+
static ssize_t act_impedance_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count) {
@@ -4517,6 +4578,11 @@
if (ret)
dev_err(&chip->psy->dev, "Failed to create fix_cycle_count\n");
+ /* registers */
+ ret = device_create_file(&chip->psy->dev, &dev_attr_registers_dump);
+ if (ret)
+ dev_err(&chip->psy->dev, "Failed to create registers_dump\n");
+
de = debugfs_create_dir(chip->max1720x_psy_desc.name, 0);
if (IS_ERR_OR_NULL(de))
return -ENOENT;