Merge "lights/sdm: Add support for new brightness node"
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
cfa399d5ac
@@ -61,6 +61,9 @@ char const*const BLUE_LED_FILE
|
||||
char const*const LCD_FILE
|
||||
= "/sys/class/leds/lcd-backlight/brightness";
|
||||
|
||||
char const*const LCD_FILE2
|
||||
= "/sys/class/backlight/panel0-backlight/brightness";
|
||||
|
||||
char const*const BUTTON_FILE
|
||||
= "/sys/class/leds/button-backlight/brightness";
|
||||
|
||||
@@ -151,7 +154,11 @@ set_light_backlight(struct light_device_t* dev,
|
||||
g_last_backlight_mode = state->brightnessMode;
|
||||
|
||||
if (!err) {
|
||||
err = write_int(LCD_FILE, brightness);
|
||||
if (!access(LCD_FILE, F_OK)) {
|
||||
err = write_int(LCD_FILE, brightness);
|
||||
} else {
|
||||
err = write_int(LCD_FILE2, brightness);
|
||||
}
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&g_lock);
|
||||
|
||||
@@ -284,15 +284,12 @@ void HWDeviceDRM::GetHWDisplayPortAndMode() {
|
||||
|
||||
void HWDeviceDRM::GetHWPanelMaxBrightness() {
|
||||
char brightness[kMaxStringLength] = {0};
|
||||
char kMaxBrightnessNode[64] = {0};
|
||||
|
||||
snprintf(kMaxBrightnessNode, sizeof(kMaxBrightnessNode), "%s",
|
||||
"/sys/class/leds/lcd-backlight/max_brightness");
|
||||
string kMaxBrightnessNode = "/sys/class/backlight/panel0-backlight/max_brightness";
|
||||
|
||||
hw_panel_info_.panel_max_brightness = 255;
|
||||
int fd = Sys::open_(kMaxBrightnessNode, O_RDONLY);
|
||||
int fd = Sys::open_(kMaxBrightnessNode.c_str(), O_RDONLY);
|
||||
if (fd < 0) {
|
||||
DLOGW("Failed to open max brightness node = %s, error = %s", kMaxBrightnessNode,
|
||||
DLOGW("Failed to open max brightness node = %s, error = %s", kMaxBrightnessNode.c_str(),
|
||||
strerror(errno));
|
||||
return;
|
||||
}
|
||||
@@ -646,7 +643,57 @@ DisplayError HWDeviceDRM::SetRefreshRate(uint32_t refresh_rate) {
|
||||
}
|
||||
|
||||
DisplayError HWDeviceDRM::SetPanelBrightness(int level) {
|
||||
return kErrorNotSupported;
|
||||
DisplayError err = kErrorNone;
|
||||
char buffer[kMaxSysfsCommandLength] = {0};
|
||||
|
||||
DLOGV_IF(kTagDriverConfig, "Set brightness level to %d", level);
|
||||
int fd = Sys::open_(kBrightnessNode, O_RDWR);
|
||||
if (fd < 0) {
|
||||
DLOGV_IF(kTagDriverConfig, "Failed to open node = %s, error = %s ", kBrightnessNode,
|
||||
strerror(errno));
|
||||
return kErrorFileDescriptor;
|
||||
}
|
||||
|
||||
int32_t bytes = snprintf(buffer, kMaxSysfsCommandLength, "%d\n", level);
|
||||
ssize_t ret = Sys::pwrite_(fd, buffer, static_cast<size_t>(bytes), 0);
|
||||
if (ret <= 0) {
|
||||
DLOGV_IF(kTagDriverConfig, "Failed to write to node = %s, error = %s ", kBrightnessNode,
|
||||
strerror(errno));
|
||||
err = kErrorHardware;
|
||||
}
|
||||
|
||||
Sys::close_(fd);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
DisplayError HWDeviceDRM::GetPanelBrightness(int *level) {
|
||||
DisplayError err = kErrorNone;
|
||||
char brightness[kMaxStringLength] = {0};
|
||||
|
||||
if (!level) {
|
||||
DLOGV_IF(kTagDriverConfig, "Invalid input, null pointer.");
|
||||
return kErrorParameters;
|
||||
}
|
||||
|
||||
int fd = Sys::open_(kBrightnessNode, O_RDWR);
|
||||
if (fd < 0) {
|
||||
DLOGV_IF(kTagDriverConfig, "Failed to open brightness node = %s, error = %s", kBrightnessNode,
|
||||
strerror(errno));
|
||||
return kErrorFileDescriptor;
|
||||
}
|
||||
|
||||
if (Sys::pread_(fd, brightness, sizeof(brightness), 0) > 0) {
|
||||
*level = atoi(brightness);
|
||||
DLOGV_IF(kTagDriverConfig, "Brightness level = %d", *level);
|
||||
} else {
|
||||
DLOGV_IF(kTagDriverConfig, "Failed to read panel brightness");
|
||||
err = kErrorHardware;
|
||||
}
|
||||
|
||||
Sys::close_(fd);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
DisplayError HWDeviceDRM::CachePanelBrightness(int level) {
|
||||
@@ -669,10 +716,6 @@ DisplayError HWDeviceDRM::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level)
|
||||
return kErrorNotSupported;
|
||||
}
|
||||
|
||||
DisplayError HWDeviceDRM::GetPanelBrightness(int *level) {
|
||||
return kErrorNotSupported;
|
||||
}
|
||||
|
||||
DisplayError HWDeviceDRM::SetS3DMode(HWS3DMode s3d_mode) {
|
||||
return kErrorNotSupported;
|
||||
}
|
||||
|
||||
@@ -97,6 +97,7 @@ class HWDeviceDRM : public HWInterface {
|
||||
|
||||
static const int kMaxStringLength = 1024;
|
||||
static const int kNumPhysicalDisplays = 2;
|
||||
static const int kMaxSysfsCommandLength = 12;
|
||||
|
||||
DisplayError SetFormat(const LayerBufferFormat &source, uint32_t *target);
|
||||
DisplayError SetStride(HWDeviceType device_type, LayerBufferFormat format, uint32_t width,
|
||||
@@ -131,6 +132,7 @@ class HWDeviceDRM : public HWInterface {
|
||||
bool default_mode_ = false;
|
||||
sde_drm::DRMConnectorInfo connector_info_ = {};
|
||||
std::string interface_str_ = "DSI";
|
||||
const char *kBrightnessNode = "/sys/class/backlight/panel0-backlight/brightness";
|
||||
};
|
||||
|
||||
} // namespace sdm
|
||||
|
||||
Reference in New Issue
Block a user