@@ -852,7 +852,9 @@ static void vc4_hdmi_encoder_post_crtc_powerdown(struct drm_encoder *encoder,
852
852
HDMI_READ (HDMI_VID_CTL ) & ~VC4_HD_VID_CTL_ENABLE );
853
853
854
854
clk_disable_unprepare (vc4_hdmi -> pixel_bvb_clock );
855
+ clk_request_done (vc4_hdmi -> bvb_req );
855
856
clk_disable_unprepare (vc4_hdmi -> hsm_clock );
857
+ clk_request_done (vc4_hdmi -> hsm_req );
856
858
clk_disable_unprepare (vc4_hdmi -> pixel_clock );
857
859
858
860
ret = pm_runtime_put (& vc4_hdmi -> pdev -> dev );
@@ -1157,9 +1159,9 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
1157
1159
* pixel clock, but HSM ends up being the limiting factor.
1158
1160
*/
1159
1161
hsm_rate = max_t (unsigned long , 120000000 , (pixel_rate / 100 ) * 101 );
1160
- ret = clk_set_min_rate (vc4_hdmi -> hsm_clock , hsm_rate );
1161
- if (ret ) {
1162
- DRM_ERROR ("Failed to set HSM clock rate: %d \n" , ret );
1162
+ vc4_hdmi -> hsm_req = clk_request_start (vc4_hdmi -> hsm_clock , hsm_rate );
1163
+ if (IS_ERR ( vc4_hdmi -> hsm_req ) ) {
1164
+ DRM_ERROR ("Failed to set HSM clock rate: %ld \n" , PTR_ERR ( vc4_hdmi -> hsm_req ) );
1163
1165
return ;
1164
1166
}
1165
1167
@@ -1176,10 +1178,11 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
1176
1178
* FIXME: When the pixel freq is 594MHz (4k60), this needs to be setup
1177
1179
* at 300MHz.
1178
1180
*/
1179
- ret = clk_set_min_rate (vc4_hdmi -> pixel_bvb_clock ,
1180
- (hsm_rate > VC4_HSM_MID_CLOCK ? 150000000 : 75000000 ));
1181
- if (ret ) {
1182
- DRM_ERROR ("Failed to set pixel bvb clock rate: %d\n" , ret );
1181
+ vc4_hdmi -> bvb_req = clk_request_start (vc4_hdmi -> pixel_bvb_clock ,
1182
+ (hsm_rate > VC4_HSM_MID_CLOCK ? 150000000 : 75000000 ));
1183
+ if (IS_ERR (vc4_hdmi -> bvb_req )) {
1184
+ DRM_ERROR ("Failed to set pixel bvb clock rate: %ld\n" , PTR_ERR (vc4_hdmi -> bvb_req ));
1185
+ clk_request_done (vc4_hdmi -> hsm_req );
1183
1186
clk_disable_unprepare (vc4_hdmi -> hsm_clock );
1184
1187
clk_disable_unprepare (vc4_hdmi -> pixel_clock );
1185
1188
return ;
@@ -1188,6 +1191,8 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
1188
1191
ret = clk_prepare_enable (vc4_hdmi -> pixel_bvb_clock );
1189
1192
if (ret ) {
1190
1193
DRM_ERROR ("Failed to turn on pixel bvb clock: %d\n" , ret );
1194
+ clk_request_done (vc4_hdmi -> bvb_req );
1195
+ clk_request_done (vc4_hdmi -> hsm_req );
1191
1196
clk_disable_unprepare (vc4_hdmi -> hsm_clock );
1192
1197
clk_disable_unprepare (vc4_hdmi -> pixel_clock );
1193
1198
return ;
0 commit comments