Merge "lights/sdm: Add support for new brightness node"

This commit is contained in:
Linux Build Service Account
2017-03-16 12:11:16 -07:00
committed by Gerrit - the friendly Code Review server
3 changed files with 64 additions and 12 deletions

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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