drm: msm: add dsi swap feature support

This feature only works on top of dsi split mode. When
enabling it, DSI output will be swapped.

CRs-Fixed: 2266483
Change-Id: I84a10814e2bec5e229b2a734153e82cb5fac7e10
Signed-off-by: Guchun Chen <guchunc@codeaurora.org>
This commit is contained in:
Guchun Chen 2018-06-23 17:34:36 +08:00
parent 4926f1bce0
commit f1e4bd81e0
2 changed files with 18 additions and 0 deletions

View file

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

View file

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