diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index b19894f5bc..cbae1267d7 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -3212,6 +3212,7 @@ struct dsi_panel *dsi_panel_get(struct device *parent, { struct dsi_panel *panel; struct dsi_parser_utils *utils; + const char *panel_physical_type; int rc = 0; panel = kzalloc(sizeof(*panel), GFP_KERNEL); @@ -3230,6 +3231,14 @@ struct dsi_panel *dsi_panel_get(struct device *parent, if (!panel->name) 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); if (rc) { DSI_ERR("failed to parse host configuration, rc=%d\n", diff --git a/msm/dsi/dsi_panel.h b/msm/dsi/dsi_panel.h index 2c1d62ece4..f5a38bcc7d 100644 --- a/msm/dsi/dsi_panel.h +++ b/msm/dsi/dsi_panel.h @@ -62,6 +62,12 @@ enum dsi_dms_mode { 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 { enum dsi_dfps_type type; u32 min_refresh_rate; @@ -199,6 +205,7 @@ struct dsi_panel { int panel_test_gpio; int power_mode; + enum dsi_panel_physical_type panel_type; }; 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); } +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 device_node *of_node, struct device_node *parser_node,