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