summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/msm/dsi-staging/dsi_display.c15
-rw-r--r--drivers/gpu/drm/msm/dsi-staging/dsi_display.h3
2 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_display.c b/drivers/gpu/drm/msm/dsi-staging/dsi_display.c
index c468a6f5caa2..3cecb64e313f 100644
--- a/drivers/gpu/drm/msm/dsi-staging/dsi_display.c
+++ b/drivers/gpu/drm/msm/dsi-staging/dsi_display.c
@@ -1166,6 +1166,13 @@ static int dsi_display_parse_dt(struct dsi_display *display)
goto error;
}
+ /* Only read swap property in split case */
+ if (display->ctrl_count > 1) {
+ display->dsi_split_swap =
+ of_property_read_bool(display->pdev->dev.of_node,
+ "qcom,dsi-split-swap");
+ }
+
if (of_get_property(display->pdev->dev.of_node, "qcom,dsi-panel",
&size)) {
display->panel_count = size / sizeof(int);
@@ -2281,6 +2288,14 @@ int dsi_display_get_info(struct msm_display_info *info, void *disp)
for (i = 0; i < info->num_of_h_tiles; i++)
info->h_tile_instance[i] = display->ctrl[i].ctrl->index;
+ /*
+ * h_tile_instance[2] = {0, 1} means DSI0 left(master), DSI1 right
+ * h_tile_instance[2] = {1, 0} means DSI1 left(master), DSI0 right
+ * So in case of split case and swap property is set, swap two DSIs.
+ */
+ if (info->num_of_h_tiles > 1 && display->dsi_split_swap)
+ swap(info->h_tile_instance[0], info->h_tile_instance[1]);
+
info->is_connected = true;
info->width_mm = phy_props.panel_width_mm;
info->height_mm = phy_props.panel_height_mm;
diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_display.h b/drivers/gpu/drm/msm/dsi-staging/dsi_display.h
index 3723f19fd0e7..25b2d0c1ec53 100644
--- a/drivers/gpu/drm/msm/dsi-staging/dsi_display.h
+++ b/drivers/gpu/drm/msm/dsi-staging/dsi_display.h
@@ -121,6 +121,8 @@ struct dsi_display_clk_info {
* @bridge: Pointer to DRM bridge object.
* @cmd_engine_refcount: Reference count enforcing single instance of cmd eng
* @root: Debugfs root directory
+ * @cont_splash_enabled: Early splash status.
+ * @dsi_split_swap: Swap dsi output in split mode.
*/
struct dsi_display {
struct platform_device *pdev;
@@ -160,6 +162,7 @@ struct dsi_display {
struct dentry *root;
bool cont_splash_enabled;
+ bool dsi_split_swap;
};
int dsi_display_dev_probe(struct platform_device *pdev);