Skip to content

Commit 261a45f

Browse files
yueshuck_zhang
authored andcommitted
drm: bridge/dw_hdmi: add dw hdmi2.0 and 4k@50hz/60hz support
The change adds support hdmi2.0 and 4k@50hz/60hz output. Change-Id: Iacfc59a311d0e16abc91b1b138b2fc8baaf65dd1 Signed-off-by: Nickey Yang <nickey.yang@rock-chips.com>
1 parent b0ad847 commit 261a45f

1 file changed

Lines changed: 21 additions & 8 deletions

File tree

drivers/gpu/drm/bridge/dw-hdmi.c

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,9 +1122,12 @@ static int hdmi_phy_configure(struct dw_hdmi *hdmi, unsigned char prep,
11221122
dw_hdmi_phy_gen2_pddq(hdmi, 1);
11231123

11241124
/* Control for TMDS Bit Period/TMDS Clock-Period Ratio */
1125-
if(mpll_config->mpixelclock > 340000000 && hdmi->connector.scdc_present){
1125+
if(hdmi->connector.scdc_present) {
11261126
drm_scdc_readb(hdmi->ddc, SCDC_TMDS_CONFIG, &tmds_cfg);
1127-
tmds_cfg |= 2;
1127+
if(mpll_config->mpixelclock > 340000000)
1128+
tmds_cfg |= 2;
1129+
else
1130+
tmds_cfg &= 0x1;
11281131
drm_scdc_writeb(hdmi->ddc, SCDC_TMDS_CONFIG, tmds_cfg);
11291132
}
11301133

@@ -1155,6 +1158,9 @@ static int hdmi_phy_configure(struct dw_hdmi *hdmi, unsigned char prep,
11551158
/* REMOVE CLK TERM */
11561159
hdmi_phy_i2c_write(hdmi, 0x8000, 0x05); /* CKCALCTRL */
11571160

1161+
if(mpll_config->mpixelclock > 340000000)
1162+
msleep(100);
1163+
11581164
dw_hdmi_phy_enable_powerdown(hdmi, false);
11591165

11601166
/* toggle TMDS enable */
@@ -1345,7 +1351,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
13451351
/* Set up HDMI_FC_INVIDCONF */
13461352
inv_val = (hdmi->hdmi_data.hdcp_enable ?
13471353
HDMI_FC_INVIDCONF_HDCP_KEEPOUT_ACTIVE :
1348-
HDMI_FC_INVIDCONF_HDCP_KEEPOUT_INACTIVE);
1354+
HDMI_FC_INVIDCONF_HDCP_KEEPOUT_ACTIVE);
13491355

13501356
inv_val |= mode->flags & DRM_MODE_FLAG_PVSYNC ?
13511357
HDMI_FC_INVIDCONF_VSYNC_IN_POLARITY_ACTIVE_HIGH :
@@ -1393,12 +1399,19 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
13931399
}
13941400

13951401
/* Scrambling Control */
1396-
if(vmode->mpixelclock > 297000000 && hdmi->connector.supports_scramble){
1397-
drm_scdc_readb(hdmi->ddc, SCDC_SINK_VERSION, &bytes);
1398-
drm_scdc_writeb(hdmi->ddc, SCDC_SOURCE_VERSION, 1);
1399-
drm_scdc_writeb(hdmi->ddc, SCDC_TMDS_CONFIG, 1);
1402+
if (vmode->mpixelclock > 340000000) {
1403+
drm_scdc_readb(& hdmi->i2c->adap, SCDC_SINK_VERSION, &bytes);
1404+
drm_scdc_writeb(& hdmi->i2c->adap, SCDC_SOURCE_VERSION, bytes);
1405+
drm_scdc_writeb(& hdmi->i2c->adap, SCDC_TMDS_CONFIG, 1);
1406+
mdelay(100);
1407+
hdmi_writeb(hdmi, (u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ, HDMI_MC_SWRSTZ);
1408+
hdmi_writeb(hdmi, 1, HDMI_FC_SCRAMBLER_CTRL);
1409+
}
1410+
else {
1411+
hdmi_writeb(hdmi, 0, HDMI_FC_SCRAMBLER_CTRL);
14001412
hdmi_writeb(hdmi, (u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ, HDMI_MC_SWRSTZ);
1401-
hdmi_writeb(hdmi, HDMI_FC_SCRAMBLER_CTRL_EN, HDMI_FC_SCRAMBLER_CTRL);
1413+
drm_scdc_writeb(& hdmi->i2c->adap, SCDC_TMDS_CONFIG, 0);
1414+
mdelay(100);
14021415
}
14031416

14041417
/* Set up horizontal active pixel width */

0 commit comments

Comments
 (0)