From 305b81cdf5d11c0ab16c42316cc1b0a18bc64f8c Mon Sep 17 00:00:00 2001 From: Konsta Date: Fri, 2 May 2025 13:39:37 +0300 Subject: [PATCH] light: support more backlight paths * I2C address for the panel regulator driver depends on the device and DSI port the display is connected on. Add more backlight paths to support different hardware configurations. Also add path for legacy rpi_backlight driver to make testing easier. --- light/Lights.cpp | 33 ++++++++++++++++----- light/android.hardware.light-service.rpi.rc | 8 +++++ sepolicy/genfs_contexts | 8 +++-- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/light/Lights.cpp b/light/Lights.cpp index f4e3d65..a1144bf 100644 --- a/light/Lights.cpp +++ b/light/Lights.cpp @@ -15,9 +15,12 @@ * limitations under the License. */ +#define LOG_TAG "android.hardware.light-service.rpi" + #include "Lights.h" #include +#include using ::android::base::ReadFileToString; using ::android::base::WriteStringToFile; @@ -26,8 +29,13 @@ namespace aidl::android::hardware::light { static const uint32_t defaultMaxBrightness = 255; -static const std::string backlightBrightnessPath = "/sys/class/backlight/11-0045/brightness"; -static const std::string backlightMaxBrightnessPath = "/sys/class/backlight/11-0045/max_brightness"; +static const std::string backlightBasePath = "/sys/class/backlight/"; + +static const std::string backlightPaths[] = { + "10-0045", + "11-0045", + "rpi_backlight", +}; static const std::vector availableLights = { {.id = (int)LightType::BACKLIGHT, .type = LightType::BACKLIGHT, .ordinal = 0} @@ -36,10 +44,15 @@ static const std::vector availableLights = { Lights::Lights() { maxBrightness = defaultMaxBrightness; - if (!access(backlightMaxBrightnessPath.c_str(), R_OK)) { - std::string maxBrightnessValue; - if (ReadFileToString(backlightMaxBrightnessPath, &maxBrightnessValue)) { - maxBrightness = std::stoi(maxBrightnessValue); + for (auto &path : backlightPaths) { + std::string backlightMaxBrightnessPath = backlightBasePath + path + "/max_brightness"; + if (!access(backlightMaxBrightnessPath.c_str(), R_OK)) { + std::string maxBrightnessValue; + if (ReadFileToString(backlightMaxBrightnessPath, &maxBrightnessValue)) { + maxBrightness = std::stoi(maxBrightnessValue); + LOG(INFO) << backlightMaxBrightnessPath << " = " << maxBrightnessValue; + break; + } } } } @@ -50,8 +63,12 @@ ndk::ScopedAStatus Lights::setLightState(int id, const HwLightState& state) { switch (light.type) { case LightType::BACKLIGHT: - if (!access(backlightBrightnessPath.c_str(), W_OK)) { - WriteStringToFile(brightness, backlightBrightnessPath); + for (auto &path : backlightPaths) { + std::string backlightBrightnessPath = backlightBasePath + path + "/brightness"; + if (!access(backlightBrightnessPath.c_str(), W_OK)) { + WriteStringToFile(brightness, backlightBrightnessPath); + break; + } } break; default: diff --git a/light/android.hardware.light-service.rpi.rc b/light/android.hardware.light-service.rpi.rc index 01917b7..6a8acc5 100644 --- a/light/android.hardware.light-service.rpi.rc +++ b/light/android.hardware.light-service.rpi.rc @@ -1,8 +1,16 @@ on early-boot + chown system system /sys/class/backlight/10-0045/brightness + chown system system /sys/class/backlight/10-0045/max_brightness chown system system /sys/class/backlight/11-0045/brightness chown system system /sys/class/backlight/11-0045/max_brightness + chown system system /sys/class/backlight/rpi_backlight/brightness + chown system system /sys/class/backlight/rpi_backlight/max_brightness + chmod 660 /sys/class/backlight/10-0045/brightness + chmod 440 /sys/class/backlight/10-0045/max_brightness chmod 660 /sys/class/backlight/11-0045/brightness chmod 440 /sys/class/backlight/11-0045/max_brightness + chmod 660 /sys/class/backlight/rpi_backlight/brightness + chmod 440 /sys/class/backlight/rpi_backlight/max_brightness service vendor.light-rpi /apex/com.android.hardware.light.rpi5/bin/hw/android.hardware.light-service.rpi class hal diff --git a/sepolicy/genfs_contexts b/sepolicy/genfs_contexts index e174d46..18605c9 100644 --- a/sepolicy/genfs_contexts +++ b/sepolicy/genfs_contexts @@ -7,8 +7,12 @@ genfscon sysfs /devices/platform/axi/1002000000.v3d u:object_r:sysfs_gpu:s0 genfscon sysfs /devices/platform/axi/axi:gpu u:object_r:sysfs_gpu:s0 # Lights -genfscon sysfs /class/backlight/11-0045/brightness u:object_r:sysfs_leds:s0 -genfscon sysfs /class/backlight/11-0045/max_brightness u:object_r:sysfs_leds:s0 +genfscon sysfs /class/backlight/10-0045/brightness u:object_r:sysfs_leds:s0 +genfscon sysfs /class/backlight/10-0045/max_brightness u:object_r:sysfs_leds:s0 +genfscon sysfs /class/backlight/11-0045/brightness u:object_r:sysfs_leds:s0 +genfscon sysfs /class/backlight/11-0045/max_brightness u:object_r:sysfs_leds:s0 +genfscon sysfs /class/backlight/rpi_backlight/brightness u:object_r:sysfs_leds:s0 +genfscon sysfs /class/backlight/rpi_backlight/max_brightness u:object_r:sysfs_leds:s0 # Serial number genfscon sysfs /firmware/devicetree/base/serial-number u:object_r:sysfs_dt_firmware_android:s0