diff --git a/aidl/camera/common/Android.bp b/aidl/camera/common/Android.bp
index 3a7c254..9df08fc 100644
--- a/aidl/camera/common/Android.bp
+++ b/aidl/camera/common/Android.bp
@@ -12,6 +12,7 @@
         "VendorTagDescriptor.cpp",
         "HandleImporter.cpp",
         "Exif.cpp",
+        "SamsungCameraModule.cpp",
         "SimpleThread.cpp",
     ],
     cflags: [
@@ -29,7 +30,7 @@
     ],
     include_dirs: ["system/media/private/camera/include"],
     header_libs: ["libhardware_headers.camera3_samsung"],
-    export_include_dirs: ["include"],
+    export_include_dirs: ["include", "include_samsung"],
     export_shared_lib_headers: ["libui"],
 }
 
diff --git a/aidl/camera/common/SamsungCameraModule.cpp b/aidl/camera/common/SamsungCameraModule.cpp
new file mode 100644
index 0000000..73f52fb
--- /dev/null
+++ b/aidl/camera/common/SamsungCameraModule.cpp
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2024 The LineageOS Project
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#define LOG_TAG "CamComm1.0-SamsungCamModule"
+#define ATRACE_TAG ATRACE_TAG_CAMERA
+
+#include <SamsungCameraModule.h>
+#include <cutils/trace.h>
+
+namespace android {
+namespace hardware {
+namespace camera {
+namespace common {
+namespace helper {
+
+SamsungCameraModule::SamsungCameraModule(camera_module_t* module)
+    : CameraModule(module), mModule(module) {}
+
+SamsungCameraModule::~SamsungCameraModule() {}
+
+bool SamsungCameraModule::isSetTorchModeStrengthSupported() {
+    return isSetTorchModeSupported() && mModule->set_torch_mode_strength != NULL;
+}
+
+int SamsungCameraModule::setTorchModeStrength(const char* camera_id, bool enable, int strength) {
+    int res = INVALID_OPERATION;
+    if (mModule->set_torch_mode_strength != NULL) {
+        ATRACE_BEGIN("camera_module->set_torch_mode_strength");
+        res = mModule->set_torch_mode_strength(camera_id, enable, strength);
+        ATRACE_END();
+    }
+    return res;
+}
+
+}  // namespace helper
+}  // namespace common
+}  // namespace camera
+}  // namespace hardware
+}  // namespace android
diff --git a/aidl/camera/common/include_samsung/SamsungCameraModule.h b/aidl/camera/common/include_samsung/SamsungCameraModule.h
new file mode 100644
index 0000000..2ada92f
--- /dev/null
+++ b/aidl/camera/common/include_samsung/SamsungCameraModule.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2024 The LineageOS Project
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#pragma once
+
+#include <CameraModule.h>
+
+namespace android {
+namespace hardware {
+namespace camera {
+namespace common {
+namespace helper {
+
+class SamsungCameraModule : public CameraModule {
+  public:
+    explicit SamsungCameraModule(camera_module_t* module);
+    virtual ~SamsungCameraModule();
+
+    bool isSetTorchModeStrengthSupported();
+    int setTorchModeStrength(const char* camera_id, bool enable, int strength);
+
+  private:
+    camera_module_t* mModule;
+};
+
+}  // namespace helper
+}  // namespace common
+}  // namespace camera
+}  // namespace hardware
+}  // namespace android
diff --git a/aidl/camera/device/CameraDevice.cpp b/aidl/camera/device/CameraDevice.cpp
index 96d7eed..65cba8d 100644
--- a/aidl/camera/device/CameraDevice.cpp
+++ b/aidl/camera/device/CameraDevice.cpp
@@ -20,7 +20,7 @@
 std::string CameraDevice::kDeviceVersion = "1.1";
 
 CameraDevice::CameraDevice(
-        sp<CameraModule> module, const std::string& cameraId,
+        sp<SamsungCameraModule> module, const std::string& cameraId,
         const SortedVector<std::pair<std::string, std::string>>& cameraDeviceNames)
     : mModule(module),
       mCameraId(cameraId),
@@ -65,8 +65,18 @@
         // Module 2.1+ codepath.
         struct camera_info info;
         int ret = mModule->getCameraInfo(mCameraIdInt, &info);
-        if (ret == OK) {
-            convertToAidl(info.static_camera_characteristics, _aidl_return);
+        if (ret == OK && info.static_camera_characteristics != NULL) {
+            common::helper::CameraMetadata metadata = (camera_metadata_t*)info.static_camera_characteristics;
+            camera_metadata_entry_t entry = metadata.find(ANDROID_FLASH_INFO_AVAILABLE);
+            if (entry.count > 0 && *entry.data.u8 != 0 && mModule->isSetTorchModeStrengthSupported()) {
+                // Samsung always has 5 supported torch strength levels
+                int32_t defaultTorchStrength = 1;
+                int32_t torchStrengthLevels = 5;
+                metadata.update(ANDROID_FLASH_INFO_STRENGTH_DEFAULT_LEVEL, &defaultTorchStrength, 1);
+                metadata.update(ANDROID_FLASH_INFO_STRENGTH_MAXIMUM_LEVEL, &torchStrengthLevels, 1);
+            }
+
+            convertToAidl(metadata.release(), _aidl_return);
         } else {
             ALOGE("%s: get camera info failed!", __FUNCTION__);
             status = Status::INTERNAL_ERROR;
@@ -347,16 +357,36 @@
     Status status = initStatus();
     if (status == Status::OK) {
         status = getAidlStatus(mModule->setTorchMode(mCameraId.c_str(), in_on));
+        if (status == Status::OK) {
+            mTorchStrengthLevel = 1;
+        }
     }
     return fromStatus(status);
 }
 
-ndk::ScopedAStatus CameraDevice::turnOnTorchWithStrengthLevel(int32_t) {
-    return fromStatus(Status::OPERATION_NOT_SUPPORTED);
+ndk::ScopedAStatus CameraDevice::turnOnTorchWithStrengthLevel(int32_t in_torchStrength) {
+    if (!mModule->isSetTorchModeStrengthSupported()) {
+        return fromStatus(Status::OPERATION_NOT_SUPPORTED);
+    }
+
+    Status status = initStatus();
+    if (status == Status::OK) {
+        status = getAidlStatus(
+                mModule->setTorchModeStrength(mCameraId.c_str(), true, in_torchStrength));
+        if (status == Status::OK) {
+            mTorchStrengthLevel = in_torchStrength;
+        }
+    }
+    return fromStatus(status);
 }
 
-ndk::ScopedAStatus CameraDevice::getTorchStrengthLevel(int32_t*) {
-    return fromStatus(Status::OPERATION_NOT_SUPPORTED);
+ndk::ScopedAStatus CameraDevice::getTorchStrengthLevel(int32_t* _aidl_return) {
+    if (!mModule->isSetTorchModeSupported()) {
+        return fromStatus(Status::OPERATION_NOT_SUPPORTED);
+    }
+
+    *_aidl_return = mTorchStrengthLevel;
+    return fromStatus(Status::OK);
 }
 
 std::shared_ptr<CameraDeviceSession> CameraDevice::createSession(
diff --git a/aidl/camera/device/CameraDevice.h b/aidl/camera/device/CameraDevice.h
index a41c496..61f4e8c 100644
--- a/aidl/camera/device/CameraDevice.h
+++ b/aidl/camera/device/CameraDevice.h
@@ -8,7 +8,7 @@
 
 #include "CameraDeviceSession.h"
 
-#include <CameraModule.h>
+#include <SamsungCameraModule.h>
 #include <aidl/android/hardware/camera/common/Status.h>
 #include <aidl/android/hardware/camera/device/BnCameraDevice.h>
 
@@ -26,7 +26,7 @@
 using ::aidl::android::hardware::camera::device::ICameraDeviceSession;
 using ::aidl::android::hardware::camera::device::ICameraInjectionSession;
 using ::aidl::android::hardware::camera::device::StreamConfiguration;
-using ::android::hardware::camera::common::helper::CameraModule;
+using ::android::hardware::camera::common::helper::SamsungCameraModule;
 
 class CameraDevice : public BnCameraDevice {
   public:
@@ -35,7 +35,7 @@
     // be multiple CameraDevice trying to access the same physical camera.  Also, provider will have
     // to keep track of all CameraDevice objects in order to notify CameraDevice when the underlying
     // camera is detached.
-    CameraDevice(sp<CameraModule> module, const std::string& cameraId,
+    CameraDevice(sp<SamsungCameraModule> module, const std::string& cameraId,
                  const SortedVector<std::pair<std::string, std::string>>& cameraDeviceNames);
     virtual ~CameraDevice();
 
@@ -70,7 +70,7 @@
             camera3_device_t*, const camera_metadata_t* deviceInfo,
             const std::shared_ptr<ICameraDeviceCallback>&);
 
-    const sp<CameraModule> mModule;
+    const sp<SamsungCameraModule> mModule;
     const std::string mCameraId;
     // const after ctor
     int mCameraIdInt;
@@ -79,6 +79,7 @@
     // Set by provider (when external camera is connected/disconnected)
     bool mDisconnected;
     std::weak_ptr<CameraDeviceSession> mSession{};
+    int32_t mTorchStrengthLevel = 1;
 
     const SortedVector<std::pair<std::string, std::string>>& mCameraDeviceNames;
 
diff --git a/aidl/camera/device/CameraDeviceSession.cpp b/aidl/camera/device/CameraDeviceSession.cpp
index df79f28..157b6fa 100644
--- a/aidl/camera/device/CameraDeviceSession.cpp
+++ b/aidl/camera/device/CameraDeviceSession.cpp
@@ -9,7 +9,7 @@
 
 #include "CameraDeviceSession.h"
 
-#include <CameraModule.h>
+#include <SamsungCameraModule.h>
 #include <aidl/android/hardware/camera/device/ErrorMsg.h>
 #include <aidl/android/hardware/camera/device/ShutterMsg.h>
 #include <aidlcommonsupport/NativeHandle.h>
@@ -28,7 +28,7 @@
 using ::aidl::android::hardware::camera::device::ShutterMsg;
 using ::aidl::android::hardware::camera::device::StreamType;
 using ::aidl::android::hardware::graphics::common::BufferUsage;
-using ::android::hardware::camera::common::helper::CameraModule;
+using ::android::hardware::camera::common::helper::SamsungCameraModule;
 
 // Size of request metadata fast message queue. Change to 0 to always use hwbinder buffer.
 static constexpr int32_t CAMERA_REQUEST_METADATA_QUEUE_SIZE = 1 << 20 /* 1MB */;
@@ -78,7 +78,7 @@
         mDerivePostRawSensKey = true;
     }
 
-    (void)CameraModule::isLogicalMultiCamera(mDeviceInfo, &mPhysicalCameraIds);
+    (void)SamsungCameraModule::isLogicalMultiCamera(mDeviceInfo, &mPhysicalCameraIds);
 
     mInitFail = initialize();
 }
diff --git a/aidl/camera/libhardware_headers/include/hardware/camera_common.h b/aidl/camera/libhardware_headers/include/hardware/camera_common.h
index dc0ad25..882773d 100644
--- a/aidl/camera/libhardware_headers/include/hardware/camera_common.h
+++ b/aidl/camera/libhardware_headers/include/hardware/camera_common.h
@@ -1241,6 +1241,14 @@
      */
     void (*notify_device_state_change)(uint64_t deviceState);
 
+    /**
+     * set_torch_mode_strength:
+     *
+     * Same as set_torch_mode but with support for specifying the strength level.
+     *
+     */
+    int (*set_torch_mode_strength)(const char* camera_id, bool enabled, int32_t strength);
+
     /* reserved for future use */
     void* reserved[2];
 } camera_module_t;
diff --git a/aidl/camera/provider/CameraProvider.cpp b/aidl/camera/provider/CameraProvider.cpp
index 329c34b..f81e253 100644
--- a/aidl/camera/provider/CameraProvider.cpp
+++ b/aidl/camera/provider/CameraProvider.cpp
@@ -189,7 +189,7 @@
         return true;
     }
 
-    mModule = new CameraModule(rawModule);
+    mModule = new SamsungCameraModule(rawModule);
     err = mModule->init();
     if (err != OK) {
         ALOGE("Could not initialize camera HAL module: %d (%s)", err, strerror(-err));
diff --git a/aidl/camera/provider/CameraProvider.h b/aidl/camera/provider/CameraProvider.h
index 411b331..9fe9004 100644
--- a/aidl/camera/provider/CameraProvider.h
+++ b/aidl/camera/provider/CameraProvider.h
@@ -6,7 +6,7 @@
 
 #pragma once
 
-#include <CameraModule.h>
+#include <SamsungCameraModule.h>
 #include <VendorTagDescriptor.h>
 #include <aidl/android/hardware/camera/device/ICameraDevice.h>
 #include <aidl/android/hardware/camera/provider/BnCameraProvider.h>
@@ -26,7 +26,7 @@
 using ::aidl::android::hardware::camera::provider::CameraIdAndStreamCombination;
 using ::aidl::android::hardware::camera::provider::ConcurrentCameraIdCombination;
 using ::aidl::android::hardware::camera::provider::ICameraProviderCallback;
-using ::android::hardware::camera::common::helper::CameraModule;
+using ::android::hardware::camera::common::helper::SamsungCameraModule;
 
 class CameraProvider : public BnCameraProvider, protected camera_module_callbacks_t {
   public:
@@ -54,7 +54,7 @@
     Mutex mCbLock;
     std::shared_ptr<ICameraProviderCallback> mCallbacks = nullptr;
 
-    sp<CameraModule> mModule;
+    sp<SamsungCameraModule> mModule;
 
     int mNumberOfLegacyCameras;
     std::map<std::string, camera_device_status_t> mCameraStatusMap;  // camera id -> status
