Explorar o código

disp: msm: Set the dsi panel type

Parse the DTS panel type settings. Consider the default
panel physical type as LCD. We need to set OLED in DTS if
the panel is an OLED type.

Change-Id: Ib53651ab3861e75bf061f38d60a2f6135c1f537d
Signed-off-by: Wenjun Zhang <[email protected]>
Signed-off-by: Yuan Zhao <[email protected]>
Yuan Zhao %!s(int64=6) %!d(string=hai) anos
pai
achega
bb2f60b35c
Modificáronse 2 ficheiros con 21 adicións e 0 borrados
  1. 9 0
      msm/dsi/dsi_panel.c
  2. 12 0
      msm/dsi/dsi_panel.h

+ 9 - 0
msm/dsi/dsi_panel.c

@@ -3212,6 +3212,7 @@ struct dsi_panel *dsi_panel_get(struct device *parent,
 {
 {
 	struct dsi_panel *panel;
 	struct dsi_panel *panel;
 	struct dsi_parser_utils *utils;
 	struct dsi_parser_utils *utils;
+	const char *panel_physical_type;
 	int rc = 0;
 	int rc = 0;
 
 
 	panel = kzalloc(sizeof(*panel), GFP_KERNEL);
 	panel = kzalloc(sizeof(*panel), GFP_KERNEL);
@@ -3230,6 +3231,14 @@ struct dsi_panel *dsi_panel_get(struct device *parent,
 	if (!panel->name)
 	if (!panel->name)
 		panel->name = DSI_PANEL_DEFAULT_LABEL;
 		panel->name = DSI_PANEL_DEFAULT_LABEL;
 
 
+	/*
+	 * Set panel type to LCD as default.
+	 */
+	panel->panel_type = DSI_DISPLAY_PANEL_TYPE_LCD;
+	panel_physical_type = utils->get_property(utils->data,
+				"qcom,mdss-dsi-panel-physical-type", NULL);
+	if (panel_physical_type && !strcmp(panel_physical_type, "oled"))
+		panel->panel_type = DSI_DISPLAY_PANEL_TYPE_OLED;
 	rc = dsi_panel_parse_host_config(panel);
 	rc = dsi_panel_parse_host_config(panel);
 	if (rc) {
 	if (rc) {
 		DSI_ERR("failed to parse host configuration, rc=%d\n",
 		DSI_ERR("failed to parse host configuration, rc=%d\n",

+ 12 - 0
msm/dsi/dsi_panel.h

@@ -62,6 +62,12 @@ enum dsi_dms_mode {
 	DSI_DMS_MODE_RES_SWITCH_IMMEDIATE,
 	DSI_DMS_MODE_RES_SWITCH_IMMEDIATE,
 };
 };
 
 
+enum dsi_panel_physical_type {
+	DSI_DISPLAY_PANEL_TYPE_LCD = 0,
+	DSI_DISPLAY_PANEL_TYPE_OLED,
+	DSI_DISPLAY_PANEL_TYPE_MAX,
+};
+
 struct dsi_dfps_capabilities {
 struct dsi_dfps_capabilities {
 	enum dsi_dfps_type type;
 	enum dsi_dfps_type type;
 	u32 min_refresh_rate;
 	u32 min_refresh_rate;
@@ -199,6 +205,7 @@ struct dsi_panel {
 
 
 	int panel_test_gpio;
 	int panel_test_gpio;
 	int power_mode;
 	int power_mode;
+	enum dsi_panel_physical_type panel_type;
 };
 };
 
 
 static inline bool dsi_panel_ulps_feature_enabled(struct dsi_panel *panel)
 static inline bool dsi_panel_ulps_feature_enabled(struct dsi_panel *panel)
@@ -221,6 +228,11 @@ static inline void dsi_panel_release_panel_lock(struct dsi_panel *panel)
 	mutex_unlock(&panel->panel_lock);
 	mutex_unlock(&panel->panel_lock);
 }
 }
 
 
+static inline bool dsi_panel_is_type_oled(struct dsi_panel *panel)
+{
+	return (panel->panel_type == DSI_DISPLAY_PANEL_TYPE_OLED);
+}
+
 struct dsi_panel *dsi_panel_get(struct device *parent,
 struct dsi_panel *dsi_panel_get(struct device *parent,
 				struct device_node *of_node,
 				struct device_node *of_node,
 				struct device_node *parser_node,
 				struct device_node *parser_node,