diff --git a/aidl/Android.bp b/aidl/Android.bp
new file mode 100644
index 0000000..63b07f2
--- /dev/null
+++ b/aidl/Android.bp
@@ -0,0 +1,46 @@
+cc_defaults {
+    name: "android.hardware.health-service.qti-defaults",
+    relative_install_path: "hw",
+    vintf_fragments: ["android.hardware.health-service.qti.xml"],
+    vendor: true,
+    recovery_available: true,
+
+    defaults: [
+        "libhealth_aidl_impl_user",
+    ],
+
+    include_dirs: [
+        "system/core/healthd",
+        "system/core/healthd/include",
+        "system/core/healthd/include_charger"
+    ],
+
+    static_libs: [
+        "libhealth_aidl_impl",
+    ],
+
+    srcs: [
+        "main.cpp",
+    ],
+
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+}
+
+cc_binary {
+    name: "android.hardware.health-service.qti",
+    vendor: true,
+    defaults: ["android.hardware.health-service.qti-defaults"],
+    init_rc: ["android.hardware.health-service.qti.rc"],
+    overrides: ["charger"],
+}
+
+cc_binary {
+    name: "android.hardware.health-service.qti_recovery",
+    vendor: true,
+    defaults: ["android.hardware.health-service.qti-defaults"],
+    init_rc: ["android.hardware.health-service.qti_recovery.rc"],
+    overrides: ["charger.recovery"],
+}
diff --git a/aidl/android.hardware.health-service.qti.rc b/aidl/android.hardware.health-service.qti.rc
new file mode 100644
index 0000000..a3b434a
--- /dev/null
+++ b/aidl/android.hardware.health-service.qti.rc
@@ -0,0 +1,14 @@
+service vendor.health-default /vendor/bin/hw/android.hardware.health-service.qti
+    class hal
+    user system
+    group system
+    capabilities WAKE_ALARM BLOCK_SUSPEND
+    file /dev/kmsg w
+
+service vendor.charger /vendor/bin/hw/android.hardware.health-service.qti --charger
+    class charger
+    seclabel u:r:charger_vendor:s0
+    user system
+    group system wakelock input graphics
+    capabilities SYS_BOOT WAKE_ALARM BLOCK_SUSPEND
+    file /dev/kmsg w
diff --git a/aidl/android.hardware.health-service.qti.xml b/aidl/android.hardware.health-service.qti.xml
new file mode 100644
index 0000000..df9c7ac
--- /dev/null
+++ b/aidl/android.hardware.health-service.qti.xml
@@ -0,0 +1,12 @@
+<!--
+  Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+  SPDX-License-Identifier: BSD-3-Clause-Clear
+-->
+
+<manifest version="1.0" type="device">
+    <hal format="aidl">
+        <name>android.hardware.health</name>
+        <version>1</version>
+        <fqname>IHealth/default</fqname>
+    </hal>
+</manifest>
diff --git a/aidl/android.hardware.health-service.qti_recovery.rc b/aidl/android.hardware.health-service.qti_recovery.rc
new file mode 100644
index 0000000..f9a007a
--- /dev/null
+++ b/aidl/android.hardware.health-service.qti_recovery.rc
@@ -0,0 +1,7 @@
+service vendor.health-recovery /system/bin/hw/android.hardware.health-service.qti_recovery
+    class hal
+    seclabel u:r:hal_health_default:s0
+    user system
+    group system
+    capabilities WAKE_ALARM BLOCK_SUSPEND
+    file /dev/kmsg w
diff --git a/aidl/main.cpp b/aidl/main.cpp
new file mode 100644
index 0000000..943a537
--- /dev/null
+++ b/aidl/main.cpp
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+
+#define LOG_TAG "android.hardware.health-service.qti"
+
+#include <android-base/logging.h>
+#include <android/binder_interface_utils.h>
+#include <health/utils.h>
+#include <health-impl/ChargerUtils.h>
+#include <health-impl/Health.h>
+#include <cutils/klog.h>
+
+using aidl::android::hardware::health::HalHealthLoop;
+using aidl::android::hardware::health::Health;
+
+#if !CHARGER_FORCE_NO_UI
+using aidl::android::hardware::health::charger::ChargerCallback;
+using aidl::android::hardware::health::charger::ChargerModeMain;
+#endif
+
+static constexpr const char* gInstanceName = "default";
+static constexpr std::string_view gChargerArg{"--charger"};
+
+constexpr char ucsiPSYName[]{"ucsi-source-psy-soc:qcom,pmic_glink:qcom,ucsi1"};
+
+#define RETRY_COUNT    100
+
+void qti_healthd_board_init(struct healthd_config *hc)
+{
+    int fd;
+    unsigned char retries = RETRY_COUNT;
+    int ret = 0;
+    unsigned char buf;
+
+    hc->ignorePowerSupplyNames.push_back(android::String8(ucsiPSYName));
+retry:
+    if (!retries) {
+        KLOG_ERROR(LOG_TAG, "Cannot open battery/capacity, fd=%d\n", fd);
+        return;
+    }
+
+    fd = open("/sys/class/power_supply/battery/capacity", 0440);
+    if (fd >= 0) {
+        KLOG_INFO(LOG_TAG, "opened battery/capacity after %d retries\n", RETRY_COUNT - retries);
+        while (retries) {
+            ret = read(fd, &buf, 1);
+            if(ret >= 0) {
+                KLOG_INFO(LOG_TAG, "Read Batt Capacity after %d retries ret : %d\n", RETRY_COUNT - retries, ret);
+                close(fd);
+                return;
+            }
+
+            retries--;
+            usleep(100000);
+        }
+
+        KLOG_ERROR(LOG_TAG, "Failed to read Battery Capacity ret=%d\n", ret);
+        close(fd);
+        return;
+    }
+
+    retries--;
+    usleep(100000);
+    goto retry;
+}
+
+int main(int argc, char** argv) {
+#ifdef __ANDROID_RECOVERY__
+    android::base::InitLogging(argv, android::base::KernelLogger);
+#endif
+    auto config = std::make_unique<healthd_config>();
+    qti_healthd_board_init(config.get());
+    ::android::hardware::health::InitHealthdConfig(config.get());
+    auto binder = ndk::SharedRefBase::make<Health>(gInstanceName, std::move(config));
+
+    if (argc >= 2 && argv[1] == gChargerArg) {
+#if !CHARGER_FORCE_NO_UI
+        KLOG_INFO(LOG_TAG, "Starting charger mode with UI.");
+        return ChargerModeMain(binder, std::make_shared<ChargerCallback>(binder));
+#endif
+        KLOG_INFO(LOG_TAG, "Starting charger mode without UI.");
+    } else {
+        KLOG_INFO(LOG_TAG, "Starting health HAL.");
+    }
+
+    auto hal_health_loop = std::make_shared<HalHealthLoop>(binder, binder);
+    return hal_health_loop->StartLoop();
+}
diff --git a/health-vendor-product.mk b/health-vendor-product.mk
new file mode 100644
index 0000000..d488b82
--- /dev/null
+++ b/health-vendor-product.mk
@@ -0,0 +1,2 @@
+PRODUCT_PACKAGES += android.hardware.health@2.1-impl-qti
+PRODUCT_PACKAGES += android.hardware.health@2.1-service
