diff options
Diffstat (limited to 'drivers/gpu/drm/msm/dsi')
| -rw-r--r-- | drivers/gpu/drm/msm/dsi/dsi_manager.c | 11 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/dsi/phy/dsi_phy.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/dsi/pll/dsi_pll_28nm.c | 4 | 
4 files changed, 18 insertions, 11 deletions
| diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index 104115d112eb..4b363bd7ddff 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -336,7 +336,7 @@ static int dsi_mgr_connector_get_modes(struct drm_connector *connector)  	return num;  } -static int dsi_mgr_connector_mode_valid(struct drm_connector *connector, +static enum drm_mode_status dsi_mgr_connector_mode_valid(struct drm_connector *connector,  				struct drm_display_mode *mode)  {  	int id = dsi_mgr_connector_get_id(connector); @@ -506,6 +506,7 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge)  	struct msm_dsi *msm_dsi1 = dsi_mgr_get_dsi(DSI_1);  	struct mipi_dsi_host *host = msm_dsi->host;  	struct drm_panel *panel = msm_dsi->panel; +	struct msm_dsi_pll *src_pll;  	bool is_dual_dsi = IS_DUAL_DSI();  	int ret; @@ -539,6 +540,10 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge)  								id, ret);  	} +	/* Save PLL status if it is a clock source */ +	src_pll = msm_dsi_phy_get_pll(msm_dsi->phy); +	msm_dsi_pll_save_state(src_pll); +  	ret = msm_dsi_host_power_off(host);  	if (ret)  		pr_err("%s: host %d power off failed,%d\n", __func__, id, ret); @@ -684,7 +689,7 @@ struct drm_bridge *msm_dsi_manager_bridge_init(u8 id)  	bridge = &dsi_bridge->base;  	bridge->funcs = &dsi_mgr_bridge_funcs; -	ret = drm_bridge_attach(encoder, bridge, NULL); +	ret = drm_bridge_attach(encoder, bridge, NULL, 0);  	if (ret)  		goto fail; @@ -713,7 +718,7 @@ struct drm_connector *msm_dsi_manager_ext_bridge_init(u8 id)  	encoder = msm_dsi->encoder;  	/* link the internal dsi bridge to the external bridge */ -	drm_bridge_attach(encoder, ext_bridge, int_bridge); +	drm_bridge_attach(encoder, ext_bridge, int_bridge, 0);  	/*  	 * we need the drm_connector created by the external bridge diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c index b0cfa67d2a57..f509ebd77500 100644 --- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c +++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c @@ -724,10 +724,6 @@ void msm_dsi_phy_disable(struct msm_dsi_phy *phy)  	if (!phy || !phy->cfg->ops.disable)  		return; -	/* Save PLL status if it is a clock source */ -	if (phy->usecase != MSM_DSI_PHY_SLAVE) -		msm_dsi_pll_save_state(phy->pll); -  	phy->cfg->ops.disable(phy);  	dsi_phy_regulator_disable(phy); diff --git a/drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c b/drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c index 8f6100db90ed..6ac04fc303f5 100644 --- a/drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c +++ b/drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c @@ -411,6 +411,12 @@ static int dsi_pll_10nm_vco_prepare(struct clk_hw *hw)  	if (pll_10nm->slave)  		dsi_pll_enable_pll_bias(pll_10nm->slave); +	rc = dsi_pll_10nm_vco_set_rate(hw,pll_10nm->vco_current_rate, 0); +	if (rc) { +		pr_err("vco_set_rate failed, rc=%d\n", rc); +		return rc; +	} +  	/* Start PLL */  	pll_write(pll_10nm->phy_cmn_mmio + REG_DSI_10nm_PHY_CMN_PLL_CNTRL,  		  0x01); @@ -751,9 +757,9 @@ static int pll_10nm_register(struct dsi_pll_10nm *pll_10nm)  	snprintf(parent4, 32, "dsi%d_pll_post_out_div_clk", pll_10nm->id);  	hw = clk_hw_register_mux(dev, clk_name, -				 (const char *[]){ +				 ((const char *[]){  				 parent, parent2, parent3, parent4 -				 }, 4, 0, pll_10nm->phy_cmn_mmio + +				 }), 4, 0, pll_10nm->phy_cmn_mmio +  				 REG_DSI_10nm_PHY_CMN_CLK_CFG1,  				 0, 2, 0, NULL);  	if (IS_ERR(hw)) { diff --git a/drivers/gpu/drm/msm/dsi/pll/dsi_pll_28nm.c b/drivers/gpu/drm/msm/dsi/pll/dsi_pll_28nm.c index 8c99e01ae332..6dffd7f4a99b 100644 --- a/drivers/gpu/drm/msm/dsi/pll/dsi_pll_28nm.c +++ b/drivers/gpu/drm/msm/dsi/pll/dsi_pll_28nm.c @@ -554,9 +554,9 @@ static int pll_28nm_register(struct dsi_pll_28nm *pll_28nm)  	snprintf(parent1, 32, "dsi%dvco_clk", pll_28nm->id);  	snprintf(parent2, 32, "dsi%dindirect_path_div2_clk", pll_28nm->id);  	clks[num++] = clk_register_mux(dev, clk_name, -			(const char *[]){ +			((const char *[]){  				parent1, parent2 -			}, 2, CLK_SET_RATE_PARENT, pll_28nm->mmio + +			}), 2, CLK_SET_RATE_PARENT, pll_28nm->mmio +  			REG_DSI_28nm_PHY_PLL_VREG_CFG, 1, 1, 0, NULL);  	snprintf(clk_name, 32, "dsi%dpllbyte", pll_28nm->id); |