@@ -969,6 +969,9 @@ static void vc4_hdmi_encoder_post_crtc_powerdown(struct drm_encoder *encoder,
969
969
vc4_hdmi -> variant -> phy_disable (vc4_hdmi );
970
970
971
971
clk_disable_unprepare (vc4_hdmi -> pixel_bvb_clock );
972
+ clk_request_done (vc4_hdmi -> bvb_req );
973
+ clk_disable_unprepare (vc4_hdmi -> hsm_clock );
974
+ clk_request_done (vc4_hdmi -> hsm_req );
972
975
clk_disable_unprepare (vc4_hdmi -> pixel_clock );
973
976
974
977
ret = pm_runtime_put (& vc4_hdmi -> pdev -> dev );
@@ -1258,9 +1261,9 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
1258
1261
* pixel clock, but HSM ends up being the limiting factor.
1259
1262
*/
1260
1263
hsm_rate = max_t (unsigned long , 120000000 , (pixel_rate / 100 ) * 101 );
1261
- ret = clk_set_min_rate (vc4_hdmi -> hsm_clock , hsm_rate );
1262
- if (ret ) {
1263
- DRM_ERROR ("Failed to set HSM clock rate: %d \n" , ret );
1264
+ vc4_hdmi -> hsm_req = clk_request_start (vc4_hdmi -> hsm_clock , hsm_rate );
1265
+ if (IS_ERR ( vc4_hdmi -> hsm_req ) ) {
1266
+ DRM_ERROR ("Failed to set HSM clock rate: %ld \n" , PTR_ERR ( vc4_hdmi -> hsm_req ) );
1264
1267
return ;
1265
1268
}
1266
1269
@@ -1273,16 +1276,21 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
1273
1276
else
1274
1277
bvb_rate = 75000000 ;
1275
1278
1276
- ret = clk_set_min_rate (vc4_hdmi -> pixel_bvb_clock , bvb_rate );
1277
- if (ret ) {
1278
- DRM_ERROR ("Failed to set pixel bvb clock rate: %d\n" , ret );
1279
+ vc4_hdmi -> bvb_req = clk_request_start (vc4_hdmi -> pixel_bvb_clock , bvb_rate );
1280
+ if (IS_ERR (vc4_hdmi -> bvb_req )) {
1281
+ DRM_ERROR ("Failed to set pixel bvb clock rate: %ld\n" , PTR_ERR (vc4_hdmi -> bvb_req ));
1282
+ clk_request_done (vc4_hdmi -> hsm_req );
1283
+ clk_disable_unprepare (vc4_hdmi -> hsm_clock );
1279
1284
clk_disable_unprepare (vc4_hdmi -> pixel_clock );
1280
1285
return ;
1281
1286
}
1282
1287
1283
1288
ret = clk_prepare_enable (vc4_hdmi -> pixel_bvb_clock );
1284
1289
if (ret ) {
1285
1290
DRM_ERROR ("Failed to turn on pixel bvb clock: %d\n" , ret );
1291
+ clk_request_done (vc4_hdmi -> bvb_req );
1292
+ clk_request_done (vc4_hdmi -> hsm_req );
1293
+ clk_disable_unprepare (vc4_hdmi -> hsm_clock );
1286
1294
clk_disable_unprepare (vc4_hdmi -> pixel_clock );
1287
1295
return ;
1288
1296
}
0 commit comments