@@ -965,6 +965,9 @@ static void vc4_hdmi_encoder_post_crtc_powerdown(struct drm_encoder *encoder,
965
965
HDMI_READ (HDMI_VID_CTL ) & ~VC4_HD_VID_CTL_ENABLE );
966
966
967
967
clk_disable_unprepare (vc4_hdmi -> pixel_bvb_clock );
968
+ clk_request_done (vc4_hdmi -> bvb_req );
969
+ clk_disable_unprepare (vc4_hdmi -> hsm_clock );
970
+ clk_request_done (vc4_hdmi -> hsm_req );
968
971
clk_disable_unprepare (vc4_hdmi -> pixel_clock );
969
972
970
973
ret = pm_runtime_put (& vc4_hdmi -> pdev -> dev );
@@ -1269,9 +1272,9 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
1269
1272
* pixel clock, but HSM ends up being the limiting factor.
1270
1273
*/
1271
1274
hsm_rate = max_t (unsigned long , 120000000 , (pixel_rate / 100 ) * 101 );
1272
- ret = clk_set_min_rate (vc4_hdmi -> hsm_clock , hsm_rate );
1273
- if (ret ) {
1274
- DRM_ERROR ("Failed to set HSM clock rate: %d \n" , ret );
1275
+ vc4_hdmi -> hsm_req = clk_request_start (vc4_hdmi -> hsm_clock , hsm_rate );
1276
+ if (IS_ERR ( vc4_hdmi -> hsm_req ) ) {
1277
+ DRM_ERROR ("Failed to set HSM clock rate: %ld \n" , PTR_ERR ( vc4_hdmi -> hsm_req ) );
1275
1278
return ;
1276
1279
}
1277
1280
@@ -1281,17 +1284,22 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
1281
1284
* FIXME: When the pixel freq is 594MHz (4k60), this needs to be setup
1282
1285
* at 300MHz.
1283
1286
*/
1284
- ret = clk_set_min_rate (vc4_hdmi -> pixel_bvb_clock ,
1285
- (hsm_rate > VC4_HSM_MID_CLOCK ? 150000000 : 75000000 ));
1286
- if (ret ) {
1287
- DRM_ERROR ("Failed to set pixel bvb clock rate: %d\n" , ret );
1287
+ vc4_hdmi -> bvb_req = clk_request_start (vc4_hdmi -> pixel_bvb_clock ,
1288
+ (hsm_rate > VC4_HSM_MID_CLOCK ? 150000000 : 75000000 ));
1289
+ if (IS_ERR (vc4_hdmi -> bvb_req )) {
1290
+ DRM_ERROR ("Failed to set pixel bvb clock rate: %ld\n" , PTR_ERR (vc4_hdmi -> bvb_req ));
1291
+ clk_request_done (vc4_hdmi -> hsm_req );
1292
+ clk_disable_unprepare (vc4_hdmi -> hsm_clock );
1288
1293
clk_disable_unprepare (vc4_hdmi -> pixel_clock );
1289
1294
return ;
1290
1295
}
1291
1296
1292
1297
ret = clk_prepare_enable (vc4_hdmi -> pixel_bvb_clock );
1293
1298
if (ret ) {
1294
1299
DRM_ERROR ("Failed to turn on pixel bvb clock: %d\n" , ret );
1300
+ clk_request_done (vc4_hdmi -> bvb_req );
1301
+ clk_request_done (vc4_hdmi -> hsm_req );
1302
+ clk_disable_unprepare (vc4_hdmi -> hsm_clock );
1295
1303
clk_disable_unprepare (vc4_hdmi -> pixel_clock );
1296
1304
return ;
1297
1305
}
0 commit comments