diff --git a/dumpstate/dump_power.cpp b/dumpstate/dump_power.cpp
index ba96a0c..79ed4cc 100644
--- a/dumpstate/dump_power.cpp
+++ b/dumpstate/dump_power.cpp
@@ -44,9 +44,19 @@
     return 0;
 }
 bool isValidFile(const char *file) {
-    if (!access(file, R_OK)) {
-        return false;
+    FILE *fp = fopen(file, "r");
+    if (fp != NULL) {
+        fclose(fp);
+        return true;
     }
+    return false;
+}
+bool isValidDir(const char *directory) {
+    DIR *dir = opendir(directory);
+    if (dir == NULL)
+        return false;
+
+    closedir(dir);
     return true;
 }
 bool isUserBuild() {
@@ -123,8 +133,8 @@
             {"Power supply property gcpm", "/sys/class/power_supply/gcpm/uevent"},
             {"Power supply property gcpm_pps", "/sys/class/power_supply/gcpm_pps/uevent"},
             {"Power supply property main-charger", "/sys/class/power_supply/main-charger/uevent"},
-            {"Power supply property dc-mains", "/sys/class/power_supply/dc-mains/uevent"},
-            {"Power supply property tcpm", "/sys/class/power_supply/tcpm-source-psy-8-0025/uevent"},
+            {"Power supply property pca9486-mains", "/sys/class/power_supply/pca9486-mains/uevent"},
+            {"Power supply property tcpm", "/sys/class/power_supply/tcpm-source-psy-i2c-max77759tcpc/uevent"},
             {"Power supply property usb", "/sys/class/power_supply/usb/uevent"},
             {"Power supply property wireless", "/sys/class/power_supply/wireless/uevent"},
     };
@@ -137,12 +147,15 @@
     const char *maxfg [][2] = {
             {"Power supply property maxfg", "/sys/class/power_supply/maxfg/uevent"},
             {"m5_state", "/sys/class/power_supply/maxfg/m5_model_state"},
+            {"maxfg registers", "/sys/class/power_supply/maxfg/registers_dump"},
             {"maxfg", "/dev/logbuffer_maxfg"},
             {"maxfg", "/dev/logbuffer_maxfg_monitor"},
     };
     const char *maxfgFlip [][2] = {
             {"Power supply property maxfg_base", "/sys/class/power_supply/maxfg_base/uevent"},
             {"Power supply property maxfg_flip", "/sys/class/power_supply/maxfg_flip/uevent"},
+            {"maxfg_base registers", "/sys/class/power_supply/maxfg_base/registers_dump"},
+            {"maxfg_secondary registers", "/sys/class/power_supply/maxfg_secondary/registers_dump"},
             {"m5_state", "/sys/class/power_supply/maxfg_base/m5_model_state"},
             {"maxfg_base", "/dev/logbuffer_maxfg_base"},
             {"maxfg_flip", "/dev/logbuffer_maxfg_flip"},
@@ -152,7 +165,7 @@
     const char *maxfgHistoryName = "Maxim FG History";
     const char *maxfgHistoryDir = "/dev/maxfg_history";
     std::string content;
-    if (isValidFile(maxfgLoc)) {
+    if (isValidDir(maxfgLoc)) {
         for (const auto &row : maxfg) {
             dumpFileContent(row[0], row[1]);
         }
@@ -231,19 +244,10 @@
         dumpFileContent(row[0], row[1]);
     }
 }
-void dumpWc68() {
-    const char* wc68Title = "WC68";
-    const char* wc68File = "/dev/logbuffer_wc68";
-    dumpFileContent(wc68Title, wc68File);
-}
-void dumpLn8411() {
-    const char* ln8411Title = "LN8411";
-    const char* ln8411File = "/dev/logbuffer_ln8411";
-    dumpFileContent(ln8411Title, ln8411File);
-}
 void dumpBatteryHealth() {
     const char* batteryHealth [][2] {
             {"Battery Health", "/sys/class/power_supply/battery/health_index_stats"},
+            {"Battery Health SoC Residency", "/sys/class/power_supply/battery/swelling_data"},
             {"BMS", "/dev/logbuffer_ssoc"},
             {"TTF", "/dev/logbuffer_ttf"},
             {"TTF details", "/sys/class/power_supply/battery/ttf_details"},
@@ -282,7 +286,7 @@
         sort(files.begin(), files.end());
         for (auto &file : files) {
             fileLocation = std::string(config[1]) + std::string(file);
-            if (!android::base::ReadFileToString(fileLocation, &content)) {
+            if (!android::base::ReadFileToString(fileLocation, &content) || content.empty()) {
                 content = "\n";
             }
             printf("%s: %s", file.c_str(), content.c_str());
@@ -292,15 +296,113 @@
         files.clear();
     }
 }
+void printValuesOfDirectory(const char *directory, std::string debugfs, const char *strMatch) {
+    std::vector<std::string> files;
+    auto info = directory;
+    std::string content;
+    struct dirent *entry;
+    DIR *dir = opendir(debugfs.c_str());
+    if (dir == NULL)
+        return;
+
+    printTitle((debugfs + std::string(strMatch) + "/" + std::string(info)).c_str());
+    while ((entry = readdir(dir)) != NULL)
+        if (std::string(entry->d_name).find(strMatch) != std::string::npos)
+            files.push_back(entry->d_name);
+    closedir(dir);
+
+    sort(files.begin(), files.end());
+
+    for (auto &file : files) {
+        std::string fileDirectory = debugfs + file;
+        std::string fileLocation = fileDirectory + "/" + std::string(info);
+        if (!android::base::ReadFileToString(fileLocation, &content)) {
+            content = "\n";
+        }
+
+        printf("%s:\n%s", fileDirectory.c_str(), content.c_str());
+
+        if (content.back() != '\n')
+            printf("\n");
+    }
+    files.clear();
+}
+void dumpChg() {
+    const std::string pmic_bus = "/sys/devices/platform/10cb0000.hsi2c/i2c-11/11-0066";
+    const char* chg_reg_dump_file = "/sys/class/power_supply/main-charger/device/registers_dump";
+    const std::string chg_name_cmd = "/sys/class/power_supply/main-charger/device/name";
+    const std::string pmic_name_cmd = pmic_bus + "/name";
+    const std::string pmic_reg_dump_file = pmic_bus + "/registers_dump";
+    const std::string reg_dump_str = " registers dump";
+    const char* chgConfig [][2] {
+        {"DC_registers dump", "/sys/class/power_supply/pca9468-mains/device/registers_dump"},
+    };
+    std::string chg_name;
+    std::string pmic_name;
+
+    printf("\n");
+
+    int ret = android::base::ReadFileToString(chg_name_cmd, &chg_name);
+    if (ret && !chg_name.empty()) {
+        chg_name.erase(chg_name.length() - 1); // remove new line
+        const std::string chg_reg_dump_title = chg_name + reg_dump_str;
+
+        /* CHG reg dump */
+        dumpFileContent(chg_reg_dump_title.c_str(), chg_reg_dump_file);
+    }
+
+    ret = android::base::ReadFileToString(pmic_name_cmd, &pmic_name);
+    if (ret && !pmic_name.empty()) {
+        pmic_name.erase(pmic_name.length() - 1); // remove new line
+        const std::string pmic_reg_dump_title = pmic_name + reg_dump_str;
+
+        /* PMIC reg dump */
+        dumpFileContent(pmic_reg_dump_title.c_str(), pmic_reg_dump_file.c_str());
+    }
+
+    for (auto &config : chgConfig) {
+        dumpFileContent(config[0], config[1]);
+    }
+}
+void dumpChgUserDebug() {
+    const std::string debugfs = "/d/";
+    const char *maxFgDir = "/d/maxfg";
+    const char *maxFgStrMatch = "maxfg";
+    const char *maxFg77779StrMatch = "max77779fg";
+    const char *chgTblName = "Charging table dump";
+    const char *chgTblDir = "/d/google_battery/chg_raw_profile";
+
+    const char *maxFgInfo [] {
+            "fg_model",
+            "algo_ver",
+            "model_ok",
+    };
+
+    const char *max77779FgInfo [] {
+            "fg_model",
+            "algo_ver",
+            "model_ok",
+    };
+
+    if (isUserBuild())
+        return;
+
+    dumpFileContent(chgTblName, chgTblDir);
+
+    if (isValidDir(maxFgDir)) {
+        for (auto & directory : maxFgInfo) {
+            printValuesOfDirectory(directory, debugfs, maxFgStrMatch);
+        }
+    } else {
+        for (auto & directory : max77779FgInfo) {
+            printValuesOfDirectory(directory, debugfs, maxFg77779StrMatch);
+        }
+    }
+}
 void dumpBatteryEeprom() {
     const char *title = "Battery EEPROM";
     const char *files[] {
-            "/sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom",
-            "/sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom",
-            "/sys/devices/platform/10da0000.hsi2c/i2c-6/6-0050/eeprom",
-            "/sys/devices/platform/10da0000.hsi2c/i2c-7/7-0050/eeprom",
-            "/sys/devices/platform/10c90000.hsi2c/i2c-7/7-0050/eeprom",
-            "/sys/devices/platform/10c90000.hsi2c/i2c-6/6-0050/eeprom",
+            "/sys/devices/platform/10970000.hsi2c/i2c-8/8-0050/eeprom",
     };
     std::string result;
     std::string xxdCmd;
@@ -326,7 +428,7 @@
     std::string content;
     struct dirent *entry;
     dumpFileContent(chgStatsTitle, chgStatsLocation);
-    if (!isUserBuild())
+    if (isUserBuild())
         return;
     for (auto &stat : chargerStats) {
         DIR *dir = opendir(stat[1]);
@@ -371,7 +473,7 @@
     std::string content;
     std::vector<std::string> files;
     int ret;
-    if (!isUserBuild())
+    if (isUserBuild())
         return;
     ret = getFilesInDir(directory, &files);
     if (ret < 0)
@@ -659,10 +761,10 @@
     dumpLogBufferTcpm();
     dumpTcpc();
     dumpPdEngine();
-    dumpWc68();
-    dumpLn8411();
     dumpBatteryHealth();
     dumpBatteryDefend();
+    dumpChg();
+    dumpChgUserDebug();
     dumpBatteryEeprom();
     dumpChargerStats();
     dumpWlcLogs();
