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