diff options
author | Junzhi Zhao <junzhi.zhao@mediatek.com> | 2016-09-28 23:02:14 -0400 |
---|---|---|
committer | CK Hu <ck.hu@mediatek.com> | 2016-10-18 21:06:53 -0400 |
commit | 968253bd7caae5621f6806dd5055353fe33d366e (patch) | |
tree | a313fd0de8b8edcb38ddc97c0ecb19c61f4dd0a9 | |
parent | d542b7c473f0eb34455974d66ea93653b3eb40ce (diff) |
drm/mediatek: enhance the HDMI driving current
In order to improve 4K resolution performance,
we have to enhance the HDMI driving current
when clock rate is greater than 165MHz.
Signed-off-by: Junzhi Zhao <junzhi.zhao@mediatek.com>
Signed-off-by: Bibby Hsieh <bibby.hsieh@mediatek.com>
-rw-r--r-- | drivers/gpu/drm/mediatek/mtk_mt8173_hdmi_phy.c | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/drivers/gpu/drm/mediatek/mtk_mt8173_hdmi_phy.c b/drivers/gpu/drm/mediatek/mtk_mt8173_hdmi_phy.c index 8a24754b440f..51cb9cfb6646 100644 --- a/drivers/gpu/drm/mediatek/mtk_mt8173_hdmi_phy.c +++ b/drivers/gpu/drm/mediatek/mtk_mt8173_hdmi_phy.c | |||
@@ -265,6 +265,9 @@ static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate, | |||
265 | struct mtk_hdmi_phy *hdmi_phy = to_mtk_hdmi_phy(hw); | 265 | struct mtk_hdmi_phy *hdmi_phy = to_mtk_hdmi_phy(hw); |
266 | unsigned int pre_div; | 266 | unsigned int pre_div; |
267 | unsigned int div; | 267 | unsigned int div; |
268 | unsigned int pre_ibias; | ||
269 | unsigned int hdmi_ibias; | ||
270 | unsigned int imp_en; | ||
268 | 271 | ||
269 | dev_dbg(hdmi_phy->dev, "%s: %lu Hz, parent: %lu Hz\n", __func__, | 272 | dev_dbg(hdmi_phy->dev, "%s: %lu Hz, parent: %lu Hz\n", __func__, |
270 | rate, parent_rate); | 273 | rate, parent_rate); |
@@ -298,18 +301,31 @@ static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate, | |||
298 | (0x1 << PLL_BR_SHIFT), | 301 | (0x1 << PLL_BR_SHIFT), |
299 | RG_HDMITX_PLL_BP | RG_HDMITX_PLL_BC | | 302 | RG_HDMITX_PLL_BP | RG_HDMITX_PLL_BC | |
300 | RG_HDMITX_PLL_BR); | 303 | RG_HDMITX_PLL_BR); |
301 | mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON3, RG_HDMITX_PRD_IMP_EN); | 304 | if (rate < 165000000) { |
305 | mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON3, | ||
306 | RG_HDMITX_PRD_IMP_EN); | ||
307 | pre_ibias = 0x3; | ||
308 | imp_en = 0x0; | ||
309 | hdmi_ibias = hdmi_phy->ibias; | ||
310 | } else { | ||
311 | mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON3, | ||
312 | RG_HDMITX_PRD_IMP_EN); | ||
313 | pre_ibias = 0x6; | ||
314 | imp_en = 0xf; | ||
315 | hdmi_ibias = hdmi_phy->ibias_up; | ||
316 | } | ||
302 | mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON4, | 317 | mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON4, |
303 | (0x3 << PRD_IBIAS_CLK_SHIFT) | | 318 | (pre_ibias << PRD_IBIAS_CLK_SHIFT) | |
304 | (0x3 << PRD_IBIAS_D2_SHIFT) | | 319 | (pre_ibias << PRD_IBIAS_D2_SHIFT) | |
305 | (0x3 << PRD_IBIAS_D1_SHIFT) | | 320 | (pre_ibias << PRD_IBIAS_D1_SHIFT) | |
306 | (0x3 << PRD_IBIAS_D0_SHIFT), | 321 | (pre_ibias << PRD_IBIAS_D0_SHIFT), |
307 | RG_HDMITX_PRD_IBIAS_CLK | | 322 | RG_HDMITX_PRD_IBIAS_CLK | |
308 | RG_HDMITX_PRD_IBIAS_D2 | | 323 | RG_HDMITX_PRD_IBIAS_D2 | |
309 | RG_HDMITX_PRD_IBIAS_D1 | | 324 | RG_HDMITX_PRD_IBIAS_D1 | |
310 | RG_HDMITX_PRD_IBIAS_D0); | 325 | RG_HDMITX_PRD_IBIAS_D0); |
311 | mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON3, | 326 | mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON3, |
312 | (0x0 << DRV_IMP_EN_SHIFT), RG_HDMITX_DRV_IMP_EN); | 327 | (imp_en << DRV_IMP_EN_SHIFT), |
328 | RG_HDMITX_DRV_IMP_EN); | ||
313 | mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON6, | 329 | mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON6, |
314 | (hdmi_phy->drv_imp_clk << DRV_IMP_CLK_SHIFT) | | 330 | (hdmi_phy->drv_imp_clk << DRV_IMP_CLK_SHIFT) | |
315 | (hdmi_phy->drv_imp_d2 << DRV_IMP_D2_SHIFT) | | 331 | (hdmi_phy->drv_imp_d2 << DRV_IMP_D2_SHIFT) | |
@@ -318,12 +334,14 @@ static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate, | |||
318 | RG_HDMITX_DRV_IMP_CLK | RG_HDMITX_DRV_IMP_D2 | | 334 | RG_HDMITX_DRV_IMP_CLK | RG_HDMITX_DRV_IMP_D2 | |
319 | RG_HDMITX_DRV_IMP_D1 | RG_HDMITX_DRV_IMP_D0); | 335 | RG_HDMITX_DRV_IMP_D1 | RG_HDMITX_DRV_IMP_D0); |
320 | mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON5, | 336 | mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON5, |
321 | (hdmi_phy->ibias << DRV_IBIAS_CLK_SHIFT) | | 337 | (hdmi_ibias << DRV_IBIAS_CLK_SHIFT) | |
322 | (hdmi_phy->ibias << DRV_IBIAS_D2_SHIFT) | | 338 | (hdmi_ibias << DRV_IBIAS_D2_SHIFT) | |
323 | (hdmi_phy->ibias << DRV_IBIAS_D1_SHIFT) | | 339 | (hdmi_ibias << DRV_IBIAS_D1_SHIFT) | |
324 | (hdmi_phy->ibias << DRV_IBIAS_D0_SHIFT), | 340 | (hdmi_ibias << DRV_IBIAS_D0_SHIFT), |
325 | RG_HDMITX_DRV_IBIAS_CLK | RG_HDMITX_DRV_IBIAS_D2 | | 341 | RG_HDMITX_DRV_IBIAS_CLK | |
326 | RG_HDMITX_DRV_IBIAS_D1 | RG_HDMITX_DRV_IBIAS_D0); | 342 | RG_HDMITX_DRV_IBIAS_D2 | |
343 | RG_HDMITX_DRV_IBIAS_D1 | | ||
344 | RG_HDMITX_DRV_IBIAS_D0); | ||
327 | return 0; | 345 | return 0; |
328 | } | 346 | } |
329 | 347 | ||