Commit 6183606d authored by Dmitry Baryshkov's avatar Dmitry Baryshkov Committed by Rob Clark

drm/msm/dsi: rename dual DSI to bonded DSI

We are preparing to support two independent DSI hosts in the DSI/DPU
code. To remove possible confusion (as both configurations can be
referenced as dual DSI) let's rename old "dual DSI" (two DSI hosts
driving single device, with clocks being locked) to "bonded DSI".
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: default avatarAbhinav Kumar <abhinavk@codeaurora.org>
Link: https://lore.kernel.org/r/20210717124016.316020-2-dmitry.baryshkov@linaro.orgReviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
[DB: add one extra hunk added by one previous patches]
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
parent 5e2a72d4
...@@ -737,7 +737,7 @@ struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev, ...@@ -737,7 +737,7 @@ struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev,
} }
/* /*
* In Dual DSI case, CTL0 and CTL1 are always assigned to two DSI * In bonded DSI case, CTL0 and CTL1 are always assigned to two DSI
* interfaces to support single FLUSH feature (Flush CTL0 and CTL1 when * interfaces to support single FLUSH feature (Flush CTL0 and CTL1 when
* only write into CTL0's FLUSH register) to keep two DSI pipes in sync. * only write into CTL0's FLUSH register) to keep two DSI pipes in sync.
* Single FLUSH is supported from hw rev v3.0. * Single FLUSH is supported from hw rev v3.0.
......
...@@ -110,7 +110,7 @@ int msm_dsi_host_enable(struct mipi_dsi_host *host); ...@@ -110,7 +110,7 @@ int msm_dsi_host_enable(struct mipi_dsi_host *host);
int msm_dsi_host_disable(struct mipi_dsi_host *host); int msm_dsi_host_disable(struct mipi_dsi_host *host);
int msm_dsi_host_power_on(struct mipi_dsi_host *host, int msm_dsi_host_power_on(struct mipi_dsi_host *host,
struct msm_dsi_phy_shared_timings *phy_shared_timings, struct msm_dsi_phy_shared_timings *phy_shared_timings,
bool is_dual_dsi); bool is_bonded_dsi);
int msm_dsi_host_power_off(struct mipi_dsi_host *host); int msm_dsi_host_power_off(struct mipi_dsi_host *host);
int msm_dsi_host_set_display_mode(struct mipi_dsi_host *host, int msm_dsi_host_set_display_mode(struct mipi_dsi_host *host,
const struct drm_display_mode *mode); const struct drm_display_mode *mode);
...@@ -124,7 +124,7 @@ int msm_dsi_host_set_src_pll(struct mipi_dsi_host *host, ...@@ -124,7 +124,7 @@ int msm_dsi_host_set_src_pll(struct mipi_dsi_host *host,
void msm_dsi_host_reset_phy(struct mipi_dsi_host *host); void msm_dsi_host_reset_phy(struct mipi_dsi_host *host);
void msm_dsi_host_get_phy_clk_req(struct mipi_dsi_host *host, void msm_dsi_host_get_phy_clk_req(struct mipi_dsi_host *host,
struct msm_dsi_phy_clk_request *clk_req, struct msm_dsi_phy_clk_request *clk_req,
bool is_dual_dsi); bool is_bonded_dsi);
void msm_dsi_host_destroy(struct mipi_dsi_host *host); void msm_dsi_host_destroy(struct mipi_dsi_host *host);
int msm_dsi_host_modeset_init(struct mipi_dsi_host *host, int msm_dsi_host_modeset_init(struct mipi_dsi_host *host,
struct drm_device *dev); struct drm_device *dev);
...@@ -146,8 +146,8 @@ int dsi_dma_base_get_6g(struct msm_dsi_host *msm_host, uint64_t *iova); ...@@ -146,8 +146,8 @@ int dsi_dma_base_get_6g(struct msm_dsi_host *msm_host, uint64_t *iova);
int dsi_dma_base_get_v2(struct msm_dsi_host *msm_host, uint64_t *iova); int dsi_dma_base_get_v2(struct msm_dsi_host *msm_host, uint64_t *iova);
int dsi_clk_init_v2(struct msm_dsi_host *msm_host); int dsi_clk_init_v2(struct msm_dsi_host *msm_host);
int dsi_clk_init_6g_v2(struct msm_dsi_host *msm_host); int dsi_clk_init_6g_v2(struct msm_dsi_host *msm_host);
int dsi_calc_clk_rate_v2(struct msm_dsi_host *msm_host, bool is_dual_dsi); int dsi_calc_clk_rate_v2(struct msm_dsi_host *msm_host, bool is_bonded_dsi);
int dsi_calc_clk_rate_6g(struct msm_dsi_host *msm_host, bool is_dual_dsi); int dsi_calc_clk_rate_6g(struct msm_dsi_host *msm_host, bool is_bonded_dsi);
void msm_dsi_host_snapshot(struct msm_disp_state *disp_state, struct mipi_dsi_host *host); void msm_dsi_host_snapshot(struct msm_disp_state *disp_state, struct mipi_dsi_host *host);
void msm_dsi_host_test_pattern_en(struct mipi_dsi_host *host); void msm_dsi_host_test_pattern_en(struct mipi_dsi_host *host);
......
...@@ -48,7 +48,7 @@ struct msm_dsi_host_cfg_ops { ...@@ -48,7 +48,7 @@ struct msm_dsi_host_cfg_ops {
void* (*tx_buf_get)(struct msm_dsi_host *msm_host); void* (*tx_buf_get)(struct msm_dsi_host *msm_host);
void (*tx_buf_put)(struct msm_dsi_host *msm_host); void (*tx_buf_put)(struct msm_dsi_host *msm_host);
int (*dma_base_get)(struct msm_dsi_host *msm_host, uint64_t *iova); int (*dma_base_get)(struct msm_dsi_host *msm_host, uint64_t *iova);
int (*calc_clk_rate)(struct msm_dsi_host *msm_host, bool is_dual_dsi); int (*calc_clk_rate)(struct msm_dsi_host *msm_host, bool is_bonded_dsi);
}; };
struct msm_dsi_cfg_handler { struct msm_dsi_cfg_handler {
......
...@@ -673,7 +673,7 @@ void dsi_link_clk_disable_v2(struct msm_dsi_host *msm_host) ...@@ -673,7 +673,7 @@ void dsi_link_clk_disable_v2(struct msm_dsi_host *msm_host)
clk_disable_unprepare(msm_host->byte_clk); clk_disable_unprepare(msm_host->byte_clk);
} }
static u32 dsi_get_pclk_rate(struct msm_dsi_host *msm_host, bool is_dual_dsi) static u32 dsi_get_pclk_rate(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
{ {
struct drm_display_mode *mode = msm_host->mode; struct drm_display_mode *mode = msm_host->mode;
u32 pclk_rate; u32 pclk_rate;
...@@ -681,22 +681,22 @@ static u32 dsi_get_pclk_rate(struct msm_dsi_host *msm_host, bool is_dual_dsi) ...@@ -681,22 +681,22 @@ static u32 dsi_get_pclk_rate(struct msm_dsi_host *msm_host, bool is_dual_dsi)
pclk_rate = mode->clock * 1000; pclk_rate = mode->clock * 1000;
/* /*
* For dual DSI mode, the current DRM mode has the complete width of the * For bonded DSI mode, the current DRM mode has the complete width of the
* panel. Since, the complete panel is driven by two DSI controllers, * panel. Since, the complete panel is driven by two DSI controllers,
* the clock rates have to be split between the two dsi controllers. * the clock rates have to be split between the two dsi controllers.
* Adjust the byte and pixel clock rates for each dsi host accordingly. * Adjust the byte and pixel clock rates for each dsi host accordingly.
*/ */
if (is_dual_dsi) if (is_bonded_dsi)
pclk_rate /= 2; pclk_rate /= 2;
return pclk_rate; return pclk_rate;
} }
static void dsi_calc_pclk(struct msm_dsi_host *msm_host, bool is_dual_dsi) static void dsi_calc_pclk(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
{ {
u8 lanes = msm_host->lanes; u8 lanes = msm_host->lanes;
u32 bpp = dsi_get_bpp(msm_host->format); u32 bpp = dsi_get_bpp(msm_host->format);
u32 pclk_rate = dsi_get_pclk_rate(msm_host, is_dual_dsi); u32 pclk_rate = dsi_get_pclk_rate(msm_host, is_bonded_dsi);
u64 pclk_bpp = (u64)pclk_rate * bpp; u64 pclk_bpp = (u64)pclk_rate * bpp;
if (lanes == 0) { if (lanes == 0) {
...@@ -718,28 +718,28 @@ static void dsi_calc_pclk(struct msm_dsi_host *msm_host, bool is_dual_dsi) ...@@ -718,28 +718,28 @@ static void dsi_calc_pclk(struct msm_dsi_host *msm_host, bool is_dual_dsi)
} }
int dsi_calc_clk_rate_6g(struct msm_dsi_host *msm_host, bool is_dual_dsi) int dsi_calc_clk_rate_6g(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
{ {
if (!msm_host->mode) { if (!msm_host->mode) {
pr_err("%s: mode not set\n", __func__); pr_err("%s: mode not set\n", __func__);
return -EINVAL; return -EINVAL;
} }
dsi_calc_pclk(msm_host, is_dual_dsi); dsi_calc_pclk(msm_host, is_bonded_dsi);
msm_host->esc_clk_rate = clk_get_rate(msm_host->esc_clk); msm_host->esc_clk_rate = clk_get_rate(msm_host->esc_clk);
return 0; return 0;
} }
int dsi_calc_clk_rate_v2(struct msm_dsi_host *msm_host, bool is_dual_dsi) int dsi_calc_clk_rate_v2(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
{ {
u32 bpp = dsi_get_bpp(msm_host->format); u32 bpp = dsi_get_bpp(msm_host->format);
u64 pclk_bpp; u64 pclk_bpp;
unsigned int esc_mhz, esc_div; unsigned int esc_mhz, esc_div;
unsigned long byte_mhz; unsigned long byte_mhz;
dsi_calc_pclk(msm_host, is_dual_dsi); dsi_calc_pclk(msm_host, is_bonded_dsi);
pclk_bpp = (u64)dsi_get_pclk_rate(msm_host, is_dual_dsi) * bpp; pclk_bpp = (u64)dsi_get_pclk_rate(msm_host, is_bonded_dsi) * bpp;
do_div(pclk_bpp, 8); do_div(pclk_bpp, 8);
msm_host->src_clk_rate = pclk_bpp; msm_host->src_clk_rate = pclk_bpp;
...@@ -939,7 +939,7 @@ static void dsi_ctrl_config(struct msm_dsi_host *msm_host, bool enable, ...@@ -939,7 +939,7 @@ static void dsi_ctrl_config(struct msm_dsi_host *msm_host, bool enable,
dsi_write(msm_host, REG_DSI_CPHY_MODE_CTRL, BIT(0)); dsi_write(msm_host, REG_DSI_CPHY_MODE_CTRL, BIT(0));
} }
static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_dual_dsi) static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
{ {
struct drm_display_mode *mode = msm_host->mode; struct drm_display_mode *mode = msm_host->mode;
u32 hs_start = 0, vs_start = 0; /* take sync start as 0 */ u32 hs_start = 0, vs_start = 0; /* take sync start as 0 */
...@@ -957,13 +957,13 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_dual_dsi) ...@@ -957,13 +957,13 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_dual_dsi)
DBG(""); DBG("");
/* /*
* For dual DSI mode, the current DRM mode has * For bonded DSI mode, the current DRM mode has
* the complete width of the panel. Since, the complete * the complete width of the panel. Since, the complete
* panel is driven by two DSI controllers, the horizontal * panel is driven by two DSI controllers, the horizontal
* timings have to be split between the two dsi controllers. * timings have to be split between the two dsi controllers.
* Adjust the DSI host timing values accordingly. * Adjust the DSI host timing values accordingly.
*/ */
if (is_dual_dsi) { if (is_bonded_dsi) {
h_total /= 2; h_total /= 2;
hs_end /= 2; hs_end /= 2;
ha_start /= 2; ha_start /= 2;
...@@ -2288,13 +2288,13 @@ void msm_dsi_host_reset_phy(struct mipi_dsi_host *host) ...@@ -2288,13 +2288,13 @@ void msm_dsi_host_reset_phy(struct mipi_dsi_host *host)
void msm_dsi_host_get_phy_clk_req(struct mipi_dsi_host *host, void msm_dsi_host_get_phy_clk_req(struct mipi_dsi_host *host,
struct msm_dsi_phy_clk_request *clk_req, struct msm_dsi_phy_clk_request *clk_req,
bool is_dual_dsi) bool is_bonded_dsi)
{ {
struct msm_dsi_host *msm_host = to_msm_dsi_host(host); struct msm_dsi_host *msm_host = to_msm_dsi_host(host);
const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd; const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd;
int ret; int ret;
ret = cfg_hnd->ops->calc_clk_rate(msm_host, is_dual_dsi); ret = cfg_hnd->ops->calc_clk_rate(msm_host, is_bonded_dsi);
if (ret) { if (ret) {
pr_err("%s: unable to calc clk rate, %d\n", __func__, ret); pr_err("%s: unable to calc clk rate, %d\n", __func__, ret);
return; return;
...@@ -2364,7 +2364,7 @@ static void msm_dsi_sfpb_config(struct msm_dsi_host *msm_host, bool enable) ...@@ -2364,7 +2364,7 @@ static void msm_dsi_sfpb_config(struct msm_dsi_host *msm_host, bool enable)
int msm_dsi_host_power_on(struct mipi_dsi_host *host, int msm_dsi_host_power_on(struct mipi_dsi_host *host,
struct msm_dsi_phy_shared_timings *phy_shared_timings, struct msm_dsi_phy_shared_timings *phy_shared_timings,
bool is_dual_dsi) bool is_bonded_dsi)
{ {
struct msm_dsi_host *msm_host = to_msm_dsi_host(host); struct msm_dsi_host *msm_host = to_msm_dsi_host(host);
const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd; const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd;
...@@ -2402,7 +2402,7 @@ int msm_dsi_host_power_on(struct mipi_dsi_host *host, ...@@ -2402,7 +2402,7 @@ int msm_dsi_host_power_on(struct mipi_dsi_host *host,
goto fail_disable_clk; goto fail_disable_clk;
} }
dsi_timing_setup(msm_host, is_dual_dsi); dsi_timing_setup(msm_host, is_bonded_dsi);
dsi_sw_reset(msm_host); dsi_sw_reset(msm_host);
dsi_ctrl_config(msm_host, true, phy_shared_timings); dsi_ctrl_config(msm_host, true, phy_shared_timings);
......
...@@ -21,14 +21,14 @@ ...@@ -21,14 +21,14 @@
struct msm_dsi_manager { struct msm_dsi_manager {
struct msm_dsi *dsi[DSI_MAX]; struct msm_dsi *dsi[DSI_MAX];
bool is_dual_dsi; bool is_bonded_dsi;
bool is_sync_needed; bool is_sync_needed;
int master_dsi_link_id; int master_dsi_link_id;
}; };
static struct msm_dsi_manager msm_dsim_glb; static struct msm_dsi_manager msm_dsim_glb;
#define IS_DUAL_DSI() (msm_dsim_glb.is_dual_dsi) #define IS_BONDED_DSI() (msm_dsim_glb.is_bonded_dsi)
#define IS_SYNC_NEEDED() (msm_dsim_glb.is_sync_needed) #define IS_SYNC_NEEDED() (msm_dsim_glb.is_sync_needed)
#define IS_MASTER_DSI_LINK(id) (msm_dsim_glb.master_dsi_link_id == id) #define IS_MASTER_DSI_LINK(id) (msm_dsim_glb.master_dsi_link_id == id)
...@@ -42,18 +42,17 @@ static inline struct msm_dsi *dsi_mgr_get_other_dsi(int id) ...@@ -42,18 +42,17 @@ static inline struct msm_dsi *dsi_mgr_get_other_dsi(int id)
return msm_dsim_glb.dsi[(id + 1) % DSI_MAX]; return msm_dsim_glb.dsi[(id + 1) % DSI_MAX];
} }
static int dsi_mgr_parse_dual_dsi(struct device_node *np, int id) static int dsi_mgr_parse_of(struct device_node *np, int id)
{ {
struct msm_dsi_manager *msm_dsim = &msm_dsim_glb; struct msm_dsi_manager *msm_dsim = &msm_dsim_glb;
/* We assume 2 dsi nodes have the same information of dual-dsi and /* We assume 2 dsi nodes have the same information of bonded dsi and
* sync-mode, and only one node specifies master in case of dual mode. * sync-mode, and only one node specifies master in case of bonded mode.
*/ */
if (!msm_dsim->is_dual_dsi) if (!msm_dsim->is_bonded_dsi)
msm_dsim->is_dual_dsi = of_property_read_bool( msm_dsim->is_bonded_dsi = of_property_read_bool(np, "qcom,dual-dsi-mode");
np, "qcom,dual-dsi-mode");
if (msm_dsim->is_dual_dsi) { if (msm_dsim->is_bonded_dsi) {
if (of_property_read_bool(np, "qcom,master-dsi")) if (of_property_read_bool(np, "qcom,master-dsi"))
msm_dsim->master_dsi_link_id = id; msm_dsim->master_dsi_link_id = id;
if (!msm_dsim->is_sync_needed) if (!msm_dsim->is_sync_needed)
...@@ -72,7 +71,7 @@ static int dsi_mgr_setup_components(int id) ...@@ -72,7 +71,7 @@ static int dsi_mgr_setup_components(int id)
struct msm_dsi *clk_slave_dsi = dsi_mgr_get_dsi(DSI_CLOCK_SLAVE); struct msm_dsi *clk_slave_dsi = dsi_mgr_get_dsi(DSI_CLOCK_SLAVE);
int ret; int ret;
if (!IS_DUAL_DSI()) { if (!IS_BONDED_DSI()) {
ret = msm_dsi_host_register(msm_dsi->host, true); ret = msm_dsi_host_register(msm_dsi->host, true);
if (ret) if (ret)
return ret; return ret;
...@@ -100,7 +99,7 @@ static int dsi_mgr_setup_components(int id) ...@@ -100,7 +99,7 @@ static int dsi_mgr_setup_components(int id)
if (ret) if (ret)
return ret; return ret;
/* PLL0 is to drive both 2 DSI link clocks in Dual DSI mode. */ /* PLL0 is to drive both 2 DSI link clocks in bonded DSI mode. */
msm_dsi_phy_set_usecase(clk_master_dsi->phy, msm_dsi_phy_set_usecase(clk_master_dsi->phy,
MSM_DSI_PHY_MASTER); MSM_DSI_PHY_MASTER);
msm_dsi_phy_set_usecase(clk_slave_dsi->phy, msm_dsi_phy_set_usecase(clk_slave_dsi->phy,
...@@ -119,9 +118,9 @@ static int enable_phy(struct msm_dsi *msm_dsi, ...@@ -119,9 +118,9 @@ static int enable_phy(struct msm_dsi *msm_dsi,
{ {
struct msm_dsi_phy_clk_request clk_req; struct msm_dsi_phy_clk_request clk_req;
int ret; int ret;
bool is_dual_dsi = IS_DUAL_DSI(); bool is_bonded_dsi = IS_BONDED_DSI();
msm_dsi_host_get_phy_clk_req(msm_dsi->host, &clk_req, is_dual_dsi); msm_dsi_host_get_phy_clk_req(msm_dsi->host, &clk_req, is_bonded_dsi);
ret = msm_dsi_phy_enable(msm_dsi->phy, &clk_req, shared_timings); ret = msm_dsi_phy_enable(msm_dsi->phy, &clk_req, shared_timings);
...@@ -137,12 +136,12 @@ dsi_mgr_phy_enable(int id, ...@@ -137,12 +136,12 @@ dsi_mgr_phy_enable(int id,
struct msm_dsi *sdsi = dsi_mgr_get_dsi(DSI_CLOCK_SLAVE); struct msm_dsi *sdsi = dsi_mgr_get_dsi(DSI_CLOCK_SLAVE);
int ret; int ret;
/* In case of dual DSI, some registers in PHY1 have been programmed /* In case of bonded DSI, some registers in PHY1 have been programmed
* during PLL0 clock's set_rate. The PHY1 reset called by host1 here * during PLL0 clock's set_rate. The PHY1 reset called by host1 here
* will silently reset those PHY1 registers. Therefore we need to reset * will silently reset those PHY1 registers. Therefore we need to reset
* and enable both PHYs before any PLL clock operation. * and enable both PHYs before any PLL clock operation.
*/ */
if (IS_DUAL_DSI() && mdsi && sdsi) { if (IS_BONDED_DSI() && mdsi && sdsi) {
if (!mdsi->phy_enabled && !sdsi->phy_enabled) { if (!mdsi->phy_enabled && !sdsi->phy_enabled) {
msm_dsi_host_reset_phy(mdsi->host); msm_dsi_host_reset_phy(mdsi->host);
msm_dsi_host_reset_phy(sdsi->host); msm_dsi_host_reset_phy(sdsi->host);
...@@ -177,11 +176,11 @@ static void dsi_mgr_phy_disable(int id) ...@@ -177,11 +176,11 @@ static void dsi_mgr_phy_disable(int id)
struct msm_dsi *sdsi = dsi_mgr_get_dsi(DSI_CLOCK_SLAVE); struct msm_dsi *sdsi = dsi_mgr_get_dsi(DSI_CLOCK_SLAVE);
/* disable DSI phy /* disable DSI phy
* In dual-dsi configuration, the phy should be disabled for the * In bonded dsi configuration, the phy should be disabled for the
* first controller only when the second controller is disabled. * first controller only when the second controller is disabled.
*/ */
msm_dsi->phy_enabled = false; msm_dsi->phy_enabled = false;
if (IS_DUAL_DSI() && mdsi && sdsi) { if (IS_BONDED_DSI() && mdsi && sdsi) {
if (!mdsi->phy_enabled && !sdsi->phy_enabled) { if (!mdsi->phy_enabled && !sdsi->phy_enabled) {
msm_dsi_phy_disable(sdsi->phy); msm_dsi_phy_disable(sdsi->phy);
msm_dsi_phy_disable(mdsi->phy); msm_dsi_phy_disable(mdsi->phy);
...@@ -243,7 +242,7 @@ static int msm_dsi_manager_panel_init(struct drm_connector *conn, u8 id) ...@@ -243,7 +242,7 @@ static int msm_dsi_manager_panel_init(struct drm_connector *conn, u8 id)
struct msm_dsi *master_dsi, *slave_dsi; struct msm_dsi *master_dsi, *slave_dsi;
struct drm_panel *panel; struct drm_panel *panel;
if (IS_DUAL_DSI() && !IS_MASTER_DSI_LINK(id)) { if (IS_BONDED_DSI() && !IS_MASTER_DSI_LINK(id)) {
master_dsi = other_dsi; master_dsi = other_dsi;
slave_dsi = msm_dsi; slave_dsi = msm_dsi;
} else { } else {
...@@ -252,7 +251,7 @@ static int msm_dsi_manager_panel_init(struct drm_connector *conn, u8 id) ...@@ -252,7 +251,7 @@ static int msm_dsi_manager_panel_init(struct drm_connector *conn, u8 id)
} }
/* /*
* There is only 1 panel in the global panel list for dual DSI mode. * There is only 1 panel in the global panel list for bonded DSI mode.
* Therefore slave dsi should get the drm_panel instance from master * Therefore slave dsi should get the drm_panel instance from master
* dsi. * dsi.
*/ */
...@@ -263,14 +262,14 @@ static int msm_dsi_manager_panel_init(struct drm_connector *conn, u8 id) ...@@ -263,14 +262,14 @@ static int msm_dsi_manager_panel_init(struct drm_connector *conn, u8 id)
return PTR_ERR(panel); return PTR_ERR(panel);
} }
if (!panel || !IS_DUAL_DSI()) if (!panel || !IS_BONDED_DSI())
goto out; goto out;
drm_object_attach_property(&conn->base, drm_object_attach_property(&conn->base,
conn->dev->mode_config.tile_property, 0); conn->dev->mode_config.tile_property, 0);
/* /*
* Set split display info to kms once dual DSI panel is connected to * Set split display info to kms once bonded DSI panel is connected to
* both hosts. * both hosts.
*/ */
if (other_dsi && other_dsi->panel && kms->funcs->set_split_display) { if (other_dsi && other_dsi->panel && kms->funcs->set_split_display) {
...@@ -316,7 +315,7 @@ static int dsi_mgr_connector_get_modes(struct drm_connector *connector) ...@@ -316,7 +315,7 @@ static int dsi_mgr_connector_get_modes(struct drm_connector *connector)
return 0; return 0;
/* /*
* In dual DSI mode, we have one connector that can be * In bonded DSI mode, we have one connector that can be
* attached to the drm_panel. * attached to the drm_panel.
*/ */
num = drm_panel_get_modes(panel, connector); num = drm_panel_get_modes(panel, connector);
...@@ -365,30 +364,30 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge) ...@@ -365,30 +364,30 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge)
struct mipi_dsi_host *host = msm_dsi->host; struct mipi_dsi_host *host = msm_dsi->host;
struct drm_panel *panel = msm_dsi->panel; struct drm_panel *panel = msm_dsi->panel;
struct msm_dsi_phy_shared_timings phy_shared_timings[DSI_MAX]; struct msm_dsi_phy_shared_timings phy_shared_timings[DSI_MAX];
bool is_dual_dsi = IS_DUAL_DSI(); bool is_bonded_dsi = IS_BONDED_DSI();
int ret; int ret;
DBG("id=%d", id); DBG("id=%d", id);
if (!msm_dsi_device_connected(msm_dsi)) if (!msm_dsi_device_connected(msm_dsi))
return; return;
/* Do nothing with the host if it is slave-DSI in case of dual DSI */ /* Do nothing with the host if it is slave-DSI in case of bonded DSI */
if (is_dual_dsi && !IS_MASTER_DSI_LINK(id)) if (is_bonded_dsi && !IS_MASTER_DSI_LINK(id))
return; return;
ret = dsi_mgr_phy_enable(id, phy_shared_timings); ret = dsi_mgr_phy_enable(id, phy_shared_timings);
if (ret) if (ret)
goto phy_en_fail; goto phy_en_fail;
ret = msm_dsi_host_power_on(host, &phy_shared_timings[id], is_dual_dsi); ret = msm_dsi_host_power_on(host, &phy_shared_timings[id], is_bonded_dsi);
if (ret) { if (ret) {
pr_err("%s: power on host %d failed, %d\n", __func__, id, ret); pr_err("%s: power on host %d failed, %d\n", __func__, id, ret);
goto host_on_fail; goto host_on_fail;
} }
if (is_dual_dsi && msm_dsi1) { if (is_bonded_dsi && msm_dsi1) {
ret = msm_dsi_host_power_on(msm_dsi1->host, ret = msm_dsi_host_power_on(msm_dsi1->host,
&phy_shared_timings[DSI_1], is_dual_dsi); &phy_shared_timings[DSI_1], is_bonded_dsi);
if (ret) { if (ret) {
pr_err("%s: power on host1 failed, %d\n", pr_err("%s: power on host1 failed, %d\n",
__func__, ret); __func__, ret);
...@@ -414,7 +413,7 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge) ...@@ -414,7 +413,7 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge)
goto host_en_fail; goto host_en_fail;
} }
if (is_dual_dsi && msm_dsi1) { if (is_bonded_dsi && msm_dsi1) {
ret = msm_dsi_host_enable(msm_dsi1->host); ret = msm_dsi_host_enable(msm_dsi1->host);
if (ret) { if (ret) {
pr_err("%s: enable host1 failed, %d\n", __func__, ret); pr_err("%s: enable host1 failed, %d\n", __func__, ret);
...@@ -430,7 +429,7 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge) ...@@ -430,7 +429,7 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge)
if (panel) if (panel)
drm_panel_unprepare(panel); drm_panel_unprepare(panel);
panel_prep_fail: panel_prep_fail:
if (is_dual_dsi && msm_dsi1) if (is_bonded_dsi && msm_dsi1)
msm_dsi_host_power_off(msm_dsi1->host); msm_dsi_host_power_off(msm_dsi1->host);
host1_on_fail: host1_on_fail:
msm_dsi_host_power_off(host); msm_dsi_host_power_off(host);
...@@ -448,7 +447,7 @@ void msm_dsi_manager_tpg_enable(void) ...@@ -448,7 +447,7 @@ void msm_dsi_manager_tpg_enable(void)
/* if dual dsi, trigger tpg on master first then slave */ /* if dual dsi, trigger tpg on master first then slave */
if (m_dsi) { if (m_dsi) {
msm_dsi_host_test_pattern_en(m_dsi->host); msm_dsi_host_test_pattern_en(m_dsi->host);
if (IS_DUAL_DSI() && s_dsi) if (IS_BONDED_DSI() && s_dsi)
msm_dsi_host_test_pattern_en(s_dsi->host); msm_dsi_host_test_pattern_en(s_dsi->host);
} }
} }
...@@ -458,15 +457,15 @@ static void dsi_mgr_bridge_enable(struct drm_bridge *bridge) ...@@ -458,15 +457,15 @@ static void dsi_mgr_bridge_enable(struct drm_bridge *bridge)
int id = dsi_mgr_bridge_get_id(bridge); int id = dsi_mgr_bridge_get_id(bridge);
struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id); struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);
struct drm_panel *panel = msm_dsi->panel; struct drm_panel *panel = msm_dsi->panel;
bool is_dual_dsi = IS_DUAL_DSI(); bool is_bonded_dsi = IS_BONDED_DSI();
int ret; int ret;
DBG("id=%d", id); DBG("id=%d", id);
if (!msm_dsi_device_connected(msm_dsi)) if (!msm_dsi_device_connected(msm_dsi))
return; return;
/* Do nothing with the host if it is slave-DSI in case of dual DSI */ /* Do nothing with the host if it is slave-DSI in case of bonded DSI */
if (is_dual_dsi && !IS_MASTER_DSI_LINK(id)) if (is_bonded_dsi && !IS_MASTER_DSI_LINK(id))
return; return;
if (panel) { if (panel) {
...@@ -483,15 +482,15 @@ static void dsi_mgr_bridge_disable(struct drm_bridge *bridge) ...@@ -483,15 +482,15 @@ static void dsi_mgr_bridge_disable(struct drm_bridge *bridge)
int id = dsi_mgr_bridge_get_id(bridge); int id = dsi_mgr_bridge_get_id(bridge);
struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id); struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);
struct drm_panel *panel = msm_dsi->panel; struct drm_panel *panel = msm_dsi->panel;
bool is_dual_dsi = IS_DUAL_DSI(); bool is_bonded_dsi = IS_BONDED_DSI();
int ret; int ret;
DBG("id=%d", id); DBG("id=%d", id);
if (!msm_dsi_device_connected(msm_dsi)) if (!msm_dsi_device_connected(msm_dsi))
return; return;
/* Do nothing with the host if it is slave-DSI in case of dual DSI */ /* Do nothing with the host if it is slave-DSI in case of bonded DSI */
if (is_dual_dsi && !IS_MASTER_DSI_LINK(id)) if (is_bonded_dsi && !IS_MASTER_DSI_LINK(id))
return; return;
if (panel) { if (panel) {
...@@ -509,7 +508,7 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge) ...@@ -509,7 +508,7 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge)
struct msm_dsi *msm_dsi1 = dsi_mgr_get_dsi(DSI_1); struct msm_dsi *msm_dsi1 = dsi_mgr_get_dsi(DSI_1);
struct mipi_dsi_host *host = msm_dsi->host; struct mipi_dsi_host *host = msm_dsi->host;
struct drm_panel *panel = msm_dsi->panel; struct drm_panel *panel = msm_dsi->panel;
bool is_dual_dsi = IS_DUAL_DSI(); bool is_bonded_dsi = IS_BONDED_DSI();
int ret; int ret;
DBG("id=%d", id); DBG("id=%d", id);
...@@ -518,18 +517,18 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge) ...@@ -518,18 +517,18 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge)
return; return;
/* /*
* Do nothing with the host if it is slave-DSI in case of dual DSI. * Do nothing with the host if it is slave-DSI in case of bonded DSI.
* It is safe to call dsi_mgr_phy_disable() here because a single PHY * It is safe to call dsi_mgr_phy_disable() here because a single PHY
* won't be diabled until both PHYs request disable. * won't be diabled until both PHYs request disable.
*/ */
if (is_dual_dsi && !IS_MASTER_DSI_LINK(id)) if (is_bonded_dsi && !IS_MASTER_DSI_LINK(id))
goto disable_phy; goto disable_phy;
ret = msm_dsi_host_disable(host); ret = msm_dsi_host_disable(host);
if (ret) if (ret)
pr_err("%s: host %d disable failed, %d\n", __func__, id, ret); pr_err("%s: host %d disable failed, %d\n", __func__, id, ret);
if (is_dual_dsi && msm_dsi1) { if (is_bonded_dsi && msm_dsi1) {
ret = msm_dsi_host_disable(msm_dsi1->host); ret = msm_dsi_host_disable(msm_dsi1->host);
if (ret) if (ret)
pr_err("%s: host1 disable failed, %d\n", __func__, ret); pr_err("%s: host1 disable failed, %d\n", __func__, ret);
...@@ -549,7 +548,7 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge) ...@@ -549,7 +548,7 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge)
if (ret) if (ret)
pr_err("%s: host %d power off failed,%d\n", __func__, id, ret); pr_err("%s: host %d power off failed,%d\n", __func__, id, ret);
if (is_dual_dsi && msm_dsi1) { if (is_bonded_dsi && msm_dsi1) {
ret = msm_dsi_host_power_off(msm_dsi1->host); ret = msm_dsi_host_power_off(msm_dsi1->host);
if (ret) if (ret)
pr_err("%s: host1 power off failed, %d\n", pr_err("%s: host1 power off failed, %d\n",
...@@ -568,15 +567,15 @@ static void dsi_mgr_bridge_mode_set(struct drm_bridge *bridge, ...@@ -568,15 +567,15 @@ static void dsi_mgr_bridge_mode_set(struct drm_bridge *bridge,
struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id); struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);
struct msm_dsi *other_dsi = dsi_mgr_get_other_dsi(id); struct msm_dsi *other_dsi = dsi_mgr_get_other_dsi(id);
struct mipi_dsi_host *host = msm_dsi->host; struct mipi_dsi_host *host = msm_dsi->host;
bool is_dual_dsi = IS_DUAL_DSI(); bool is_bonded_dsi = IS_BONDED_DSI();
DBG("set mode: " DRM_MODE_FMT, DRM_MODE_ARG(mode)); DBG("set mode: " DRM_MODE_FMT, DRM_MODE_ARG(mode));
if (is_dual_dsi && !IS_MASTER_DSI_LINK(id)) if (is_bonded_dsi && !IS_MASTER_DSI_LINK(id))
return; return;
msm_dsi_host_set_display_mode(host, adjusted_mode); msm_dsi_host_set_display_mode(host, adjusted_mode);
if (is_dual_dsi && other_dsi) if (is_bonded_dsi && other_dsi)
msm_dsi_host_set_display_mode(other_dsi->host, adjusted_mode); msm_dsi_host_set_display_mode(other_dsi->host, adjusted_mode);
} }
...@@ -652,15 +651,15 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id) ...@@ -652,15 +651,15 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id)
bool msm_dsi_manager_validate_current_config(u8 id) bool msm_dsi_manager_validate_current_config(u8 id)
{ {
bool is_dual_dsi = IS_DUAL_DSI(); bool is_bonded_dsi = IS_BONDED_DSI();
/* /*
* For dual DSI, we only have one drm panel. For this * For bonded DSI, we only have one drm panel. For this
* use case, we register only one bridge/connector. * use case, we register only one bridge/connector.
* Skip bridge/connector initialisation if it is * Skip bridge/connector initialisation if it is
* slave-DSI for dual DSI configuration. * slave-DSI for bonded DSI configuration.
*/ */
if (is_dual_dsi && !IS_MASTER_DSI_LINK(id)) { if (is_bonded_dsi && !IS_MASTER_DSI_LINK(id)) {
DBG("Skip bridge registration for slave DSI->id: %d\n", id); DBG("Skip bridge registration for slave DSI->id: %d\n", id);
return false; return false;
} }
...@@ -752,7 +751,7 @@ int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg) ...@@ -752,7 +751,7 @@ int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg)
if (!msg->tx_buf || !msg->tx_len) if (!msg->tx_buf || !msg->tx_len)
return 0; return 0;
/* In dual master case, panel requires the same commands sent to /* In bonded master case, panel requires the same commands sent to
* both DSI links. Host issues the command trigger to both links * both DSI links. Host issues the command trigger to both links
* when DSI_1 calls the cmd transfer function, no matter it happens * when DSI_1 calls the cmd transfer function, no matter it happens
* before or after DSI_0 cmd transfer. * before or after DSI_0 cmd transfer.
...@@ -821,9 +820,9 @@ int msm_dsi_manager_register(struct msm_dsi *msm_dsi) ...@@ -821,9 +820,9 @@ int msm_dsi_manager_register(struct msm_dsi *msm_dsi)
msm_dsim->dsi[id] = msm_dsi; msm_dsim->dsi[id] = msm_dsi;
ret = dsi_mgr_parse_dual_dsi(msm_dsi->pdev->dev.of_node, id); ret = dsi_mgr_parse_of(msm_dsi->pdev->dev.of_node, id);
if (ret) { if (ret) {
pr_err("%s: failed to parse dual DSI info\n", __func__); pr_err("%s: failed to parse OF DSI info\n", __func__);
goto fail; goto fail;
} }
......
...@@ -84,7 +84,7 @@ struct dsi_pll_10nm { ...@@ -84,7 +84,7 @@ struct dsi_pll_10nm {
#define to_pll_10nm(x) container_of(x, struct dsi_pll_10nm, clk_hw) #define to_pll_10nm(x) container_of(x, struct dsi_pll_10nm, clk_hw)
/* /*
* Global list of private DSI PLL struct pointers. We need this for Dual DSI * Global list of private DSI PLL struct pointers. We need this for bonded DSI
* mode, where the master PLL's clk_ops needs access the slave's private data * mode, where the master PLL's clk_ops needs access the slave's private data
*/ */
static struct dsi_pll_10nm *pll_10nm_list[DSI_MAX]; static struct dsi_pll_10nm *pll_10nm_list[DSI_MAX];
......
...@@ -86,7 +86,7 @@ struct dsi_pll_14nm { ...@@ -86,7 +86,7 @@ struct dsi_pll_14nm {
/* /*
* Private struct for N1/N2 post-divider clocks. These clocks are similar to * Private struct for N1/N2 post-divider clocks. These clocks are similar to
* the generic clk_divider class of clocks. The only difference is that it * the generic clk_divider class of clocks. The only difference is that it
* also sets the slave DSI PLL's post-dividers if in Dual DSI mode * also sets the slave DSI PLL's post-dividers if in bonded DSI mode
*/ */
struct dsi_pll_14nm_postdiv { struct dsi_pll_14nm_postdiv {
struct clk_hw hw; struct clk_hw hw;
...@@ -102,7 +102,7 @@ struct dsi_pll_14nm_postdiv { ...@@ -102,7 +102,7 @@ struct dsi_pll_14nm_postdiv {
#define to_pll_14nm_postdiv(_hw) container_of(_hw, struct dsi_pll_14nm_postdiv, hw) #define to_pll_14nm_postdiv(_hw) container_of(_hw, struct dsi_pll_14nm_postdiv, hw)
/* /*
* Global list of private DSI PLL struct pointers. We need this for Dual DSI * Global list of private DSI PLL struct pointers. We need this for bonded DSI
* mode, where the master PLL's clk_ops needs access the slave's private data * mode, where the master PLL's clk_ops needs access the slave's private data
*/ */
static struct dsi_pll_14nm *pll_14nm_list[DSI_MAX]; static struct dsi_pll_14nm *pll_14nm_list[DSI_MAX];
...@@ -658,7 +658,7 @@ static int dsi_pll_14nm_postdiv_set_rate(struct clk_hw *hw, unsigned long rate, ...@@ -658,7 +658,7 @@ static int dsi_pll_14nm_postdiv_set_rate(struct clk_hw *hw, unsigned long rate,
val |= value << shift; val |= value << shift;
dsi_phy_write(base + REG_DSI_14nm_PHY_CMN_CLK_CFG0, val); dsi_phy_write(base + REG_DSI_14nm_PHY_CMN_CLK_CFG0, val);
/* If we're master in dual DSI mode, then the slave PLL's post-dividers /* If we're master in bonded DSI mode, then the slave PLL's post-dividers
* follow the master's post dividers * follow the master's post dividers
*/ */
if (pll_14nm->phy->usecase == MSM_DSI_PHY_MASTER) { if (pll_14nm->phy->usecase == MSM_DSI_PHY_MASTER) {
......
...@@ -83,7 +83,7 @@ struct dsi_pll_7nm { ...@@ -83,7 +83,7 @@ struct dsi_pll_7nm {
#define to_pll_7nm(x) container_of(x, struct dsi_pll_7nm, clk_hw) #define to_pll_7nm(x) container_of(x, struct dsi_pll_7nm, clk_hw)
/* /*
* Global list of private DSI PLL struct pointers. We need this for Dual DSI * Global list of private DSI PLL struct pointers. We need this for bonded DSI
* mode, where the master PLL's clk_ops needs access the slave's private data * mode, where the master PLL's clk_ops needs access the slave's private data
*/ */
static struct dsi_pll_7nm *pll_7nm_list[DSI_MAX]; static struct dsi_pll_7nm *pll_7nm_list[DSI_MAX];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment