Merge "sdm: HWDevice: Set correct HWDisplayMode" into dev-1.0
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index 2da6f00..ea62325 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -617,8 +617,8 @@
*mdp_flags |= MDP_LAYER_SOLID_FILL;
}
- if (hw_panel_info_.mode == kModeVideo && layer.flags.cursor && is_cursor_pipe_used) {
- // Only video mode panels support ASYNC layer updates
+ if (hw_panel_info_.mode != kModeCommand && layer.flags.cursor && is_cursor_pipe_used) {
+ // command mode panels does not support async position update
*mdp_flags |= MDP_LAYER_ASYNC;
}
}
@@ -674,7 +674,7 @@
DLOGE("PanelInfo pointer in invalid.");
return;
}
- char *string_buffer = new char[kMaxStringLength]();
+ char *string_buffer = reinterpret_cast<char*>(malloc(sizeof(char) * kMaxStringLength));
if (!string_buffer) {
DLOGE("Failed to allocated string_buffer memory");
return;
@@ -684,14 +684,13 @@
if (!fileptr) {
DLOGW("Failed to open msm_fb_panel_info node device node %d", device_node);
} else {
- char *line = string_buffer;
size_t len = kMaxStringLength;
- while ((Sys::getline_(&line, &len, fileptr)) != -1) {
+ while ((Sys::getline_(&string_buffer, &len, fileptr)) != -1) {
uint32_t token_count = 0;
const uint32_t max_count = 10;
char *tokens[max_count] = { NULL };
- if (!ParseLine(line, "=\n", tokens, max_count, &token_count)) {
+ if (!ParseLine(string_buffer, "=\n", tokens, max_count, &token_count)) {
if (!strncmp(tokens[0], "panel_name", strlen("panel_name"))) {
snprintf(panel_info->panel_name, sizeof(panel_info->panel_name), "%s", tokens[1]);
break;
@@ -700,7 +699,7 @@
}
Sys::fclose_(fileptr);
}
- delete[] string_buffer;
+ free(string_buffer);
}
void HWDevice::GetHWPanelInfoByNode(int device_node, HWPanelInfo *panel_info) {
@@ -754,81 +753,58 @@
}
}
Sys::fclose_(fileptr);
- panel_info->port = GetHWDisplayPort(device_node);
- panel_info->mode = GetHWDisplayMode(device_node);
+ GetHWDisplayPortAndMode(device_node, &panel_info->port, &panel_info->mode);
GetSplitInfo(device_node, panel_info);
GetHWPanelNameByNode(device_node, panel_info);
}
-HWDisplayPort HWDevice::GetHWDisplayPort(int device_node) {
- char stringbuffer[kMaxStringLength];
- HWDisplayPort port = kPortDefault;
+void HWDevice::GetHWDisplayPortAndMode(int device_node, HWDisplayPort *port, HWDisplayMode *mode) {
+ *port = kPortDefault;
+ *mode = kModeDefault;
+ char *stringbuffer = reinterpret_cast<char*>(malloc(sizeof(char) * kMaxStringLength));
+ if (!stringbuffer) {
+ DLOGE("Failed to allocated string_buffer memory");
+ return;
+ }
- snprintf(stringbuffer, sizeof(stringbuffer), "%s%d/msm_fb_type", fb_path_, device_node);
+ snprintf(stringbuffer, kMaxStringLength, "%s%d/msm_fb_type", fb_path_, device_node);
FILE *fileptr = Sys::fopen_(stringbuffer, "r");
if (!fileptr) {
DLOGW("File not found %s", stringbuffer);
- return port;
+ free(stringbuffer);
+ return;
}
- char *line = stringbuffer;
size_t len = kMaxStringLength;
- ssize_t read;
-
- read = Sys::getline_(&line, &len, fileptr);
+ ssize_t read = Sys::getline_(&stringbuffer, &len, fileptr);
if (read == -1) {
Sys::fclose_(fileptr);
- return port;
+ free(stringbuffer);
+ return;
}
- if ((strncmp(line, "mipi dsi cmd panel", strlen("mipi dsi cmd panel")) == 0)) {
- port = kPortDSI;
- } else if ((strncmp(line, "mipi dsi video panel", strlen("mipi dsi video panel")) == 0)) {
- port = kPortDSI;
- } else if ((strncmp(line, "lvds panel", strlen("lvds panel")) == 0)) {
- port = kPortLVDS;
- } else if ((strncmp(line, "edp panel", strlen("edp panel")) == 0)) {
- port = kPortEDP;
- } else if ((strncmp(line, "dtv panel", strlen("dtv panel")) == 0)) {
- port = kPortDTv;
- } else if ((strncmp(line, "writeback panel", strlen("writeback panel")) == 0)) {
- port = kPortWriteBack;
- } else {
- port = kPortDefault;
+ if ((strncmp(stringbuffer, "mipi dsi cmd panel", strlen("mipi dsi cmd panel")) == 0)) {
+ *port = kPortDSI;
+ *mode = kModeCommand;
+ } else if ((strncmp(stringbuffer, "mipi dsi video panel", strlen("mipi dsi video panel")) == 0)) {
+ *port = kPortDSI;
+ *mode = kModeVideo;
+ } else if ((strncmp(stringbuffer, "lvds panel", strlen("lvds panel")) == 0)) {
+ *port = kPortLVDS;
+ *mode = kModeVideo;
+ } else if ((strncmp(stringbuffer, "edp panel", strlen("edp panel")) == 0)) {
+ *port = kPortEDP;
+ *mode = kModeVideo;
+ } else if ((strncmp(stringbuffer, "dtv panel", strlen("dtv panel")) == 0)) {
+ *port = kPortDTv;
+ *mode = kModeVideo;
+ } else if ((strncmp(stringbuffer, "writeback panel", strlen("writeback panel")) == 0)) {
+ *port = kPortWriteBack;
+ *mode = kModeCommand;
}
Sys::fclose_(fileptr);
- return port;
-}
+ free(stringbuffer);
-HWDisplayMode HWDevice::GetHWDisplayMode(int device_node) {
- char stringbuffer[kMaxStringLength];
- HWDisplayMode mode = kModeDefault;
-
- snprintf(stringbuffer, sizeof(stringbuffer), "%s%d/msm_fb_type", fb_path_, device_node);
- FILE *fileptr = Sys::fopen_(stringbuffer, "r");
- if (!fileptr) {
- DLOGW("File not found %s", stringbuffer);
- return mode;
- }
-
- char *line = stringbuffer;
- size_t len = kMaxStringLength;
- ssize_t read;
-
- read = Sys::getline_(&line, &len, fileptr);
- if (read == -1) {
- Sys::fclose_(fileptr);
- return mode;
- }
- if ((strncmp(line, "mipi dsi cmd panel", strlen("mipi dsi cmd panel")) == 0)) {
- mode = kModeCommand;
- } else if ((strncmp(line, "mipi dsi video panel", strlen("mipi dsi video panel")) == 0)) {
- mode = kModeVideo;
- } else {
- mode = kModeDefault;
- }
- Sys::fclose_(fileptr);
-
- return mode;
+ return;
}
void HWDevice::GetSplitInfo(int device_node, HWPanelInfo *panel_info) {
diff --git a/sdm/libs/core/fb/hw_device.h b/sdm/libs/core/fb/hw_device.h
index 61c20ac..3f6737f 100644
--- a/sdm/libs/core/fb/hw_device.h
+++ b/sdm/libs/core/fb/hw_device.h
@@ -101,8 +101,7 @@
void PopulateHWPanelInfo();
void GetHWPanelInfoByNode(int device_node, HWPanelInfo *panel_info);
void GetHWPanelNameByNode(int device_node, HWPanelInfo *panel_info);
- HWDisplayPort GetHWDisplayPort(int device_node);
- HWDisplayMode GetHWDisplayMode(int device_node);
+ void GetHWDisplayPortAndMode(int device_node, HWDisplayPort *port, HWDisplayMode *mode);
void GetSplitInfo(int device_node, HWPanelInfo *panel_info);
int ParseLine(char *input, char *tokens[], const uint32_t max_token, uint32_t *count);
int ParseLine(char *input, const char *delim, char *tokens[],