diff --git a/hidl/livedisplay/Android.bp b/hidl/livedisplay/Android.bp index 3fe7bd3..6cbba68 100644 --- a/hidl/livedisplay/Android.bp +++ b/hidl/livedisplay/Android.bp @@ -49,6 +49,7 @@ cc_binary { "vendor.lineage.livedisplay@2.1", ], header_libs: [ + "kernel_headers.oplus", "vendor.lineage.livedisplay@2.0-sdm-headers", "vendor.lineage.livedisplay@2.1-oplus-headers", ], diff --git a/hidl/livedisplay/AntiFlicker.cpp b/hidl/livedisplay/AntiFlicker.cpp index 9a94f61..ed84413 100644 --- a/hidl/livedisplay/AntiFlicker.cpp +++ b/hidl/livedisplay/AntiFlicker.cpp @@ -14,21 +14,9 @@ * limitations under the License. */ -#define LOG_TAG "AntiFlickerService" - -#include -#include +#include #include - -using ::android::base::ReadFileToString; -using ::android::base::Trim; -using ::android::base::WriteStringToFile; - -namespace { - -constexpr const char* kDcDimmingPath = "/sys/kernel/oplus_display/dimlayer_bl_en"; - -} // anonymous namespace +#include namespace vendor { namespace lineage { @@ -36,19 +24,16 @@ namespace livedisplay { namespace V2_1 { namespace implementation { +AntiFlicker::AntiFlicker() : mOplusDisplayFd(open("/dev/oplus_display", O_RDWR)) {} + Return AntiFlicker::isEnabled() { - std::string tmp; - int32_t contents = 0; - - if (ReadFileToString(kDcDimmingPath, &tmp)) { - contents = std::stoi(Trim(tmp)); - } - - return contents > 0; + unsigned int value; + return ioctl(mOplusDisplayFd, PANEL_IOCTL_GET_DIMLAYER_BL_EN, &value) == 0 && value > 0; } Return AntiFlicker::setEnabled(bool enabled) { - return WriteStringToFile(std::to_string(enabled), kDcDimmingPath, true); + unsigned int value = enabled; + return ioctl(mOplusDisplayFd, PANEL_IOCTL_SET_DIMLAYER_BL_EN, &value) == 0; } } // namespace implementation diff --git a/hidl/livedisplay/SunlightEnhancement.cpp b/hidl/livedisplay/SunlightEnhancement.cpp index 36fa67e..d4c6942 100644 --- a/hidl/livedisplay/SunlightEnhancement.cpp +++ b/hidl/livedisplay/SunlightEnhancement.cpp @@ -14,19 +14,9 @@ * limitations under the License. */ -#include -#include +#include #include - -using ::android::base::ReadFileToString; -using ::android::base::Trim; -using ::android::base::WriteStringToFile; - -namespace { - -constexpr const char* kHbmPath = "/sys/kernel/oplus_display/hbm"; - -} // anonymous namespace +#include namespace vendor { namespace lineage { @@ -34,19 +24,16 @@ namespace livedisplay { namespace V2_1 { namespace implementation { +SunlightEnhancement::SunlightEnhancement() : mOplusDisplayFd(open("/dev/oplus_display", O_RDWR)) {} + Return SunlightEnhancement::isEnabled() { - std::string tmp; - int32_t contents = 0; - - if (ReadFileToString(kHbmPath, &tmp)) { - contents = std::stoi(Trim(tmp)); - } - - return contents > 0; + unsigned int value; + return ioctl(mOplusDisplayFd, PANEL_IOCTL_GET_HBM, &value) == 0 && value > 0; } Return SunlightEnhancement::setEnabled(bool enabled) { - return WriteStringToFile(std::to_string(enabled), kHbmPath, true); + unsigned int value = enabled; + return ioctl(mOplusDisplayFd, PANEL_IOCTL_SET_HBM, &value) == 0; } } // namespace implementation diff --git a/hidl/livedisplay/include/livedisplay/oplus/AntiFlicker.h b/hidl/livedisplay/include/livedisplay/oplus/AntiFlicker.h index 1cc5e66..7ae910e 100644 --- a/hidl/livedisplay/include/livedisplay/oplus/AntiFlicker.h +++ b/hidl/livedisplay/include/livedisplay/oplus/AntiFlicker.h @@ -32,9 +32,14 @@ using ::android::hardware::Void; class AntiFlicker : public IAntiFlicker { public: + AntiFlicker(); + // Methods from ::vendor::lineage::livedisplay::V2_1::IAntiFlicker follow. Return isEnabled() override; Return setEnabled(bool enabled) override; + + private: + int mOplusDisplayFd; }; } // namespace implementation diff --git a/hidl/livedisplay/include/livedisplay/oplus/SunlightEnhancement.h b/hidl/livedisplay/include/livedisplay/oplus/SunlightEnhancement.h index 5076b7b..6cbc0f8 100644 --- a/hidl/livedisplay/include/livedisplay/oplus/SunlightEnhancement.h +++ b/hidl/livedisplay/include/livedisplay/oplus/SunlightEnhancement.h @@ -32,9 +32,14 @@ using ::android::hardware::Void; class SunlightEnhancement : public ISunlightEnhancement { public: + SunlightEnhancement(); + // Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow. Return isEnabled() override; Return setEnabled(bool enabled) override; + + private: + int mOplusDisplayFd; }; } // namespace implementation diff --git a/kernel-headers/include/oplus/oplus_display_panel.h b/kernel-headers/include/oplus/oplus_display_panel.h index 7e3b204..3f26f18 100644 --- a/kernel-headers/include/oplus/oplus_display_panel.h +++ b/kernel-headers/include/oplus/oplus_display_panel.h @@ -20,5 +20,9 @@ #define OPLUS_PANEL_IOCTL_BASE 'o' +#define PANEL_IOCTL_SET_HBM _IOW(OPLUS_PANEL_IOCTL_BASE, 0x0F, unsigned int) +#define PANEL_IOCTL_GET_HBM _IOWR(OPLUS_PANEL_IOCTL_BASE, 0x10, unsigned int) #define PANEL_IOCTL_SET_DIMLAYER_HBM _IOW(OPLUS_PANEL_IOCTL_BASE, 0x1F, unsigned int) +#define PANEL_IOCTL_SET_DIMLAYER_BL_EN _IOW(OPLUS_PANEL_IOCTL_BASE, 0x21, unsigned int) +#define PANEL_IOCTL_GET_DIMLAYER_BL_EN _IOWR(OPLUS_PANEL_IOCTL_BASE, 0x22, unsigned int) #define PANEL_IOCTL_SET_FP_PRESS _IOW(OPLUS_PANEL_IOCTL_BASE, 0x29, unsigned int) diff --git a/sepolicy/qti/vendor/hal_lineage_livedisplay_qti.te b/sepolicy/qti/vendor/hal_lineage_livedisplay_qti.te index 25e83e8..9e5bebb 100644 --- a/sepolicy/qti/vendor/hal_lineage_livedisplay_qti.te +++ b/sepolicy/qti/vendor/hal_lineage_livedisplay_qti.te @@ -1 +1 @@ -rw_dir_file(hal_lineage_livedisplay_qti, vendor_sysfs_graphics) +allow hal_lineage_livedisplay_qti graphics_device:chr_file rw_file_perms;