@@ -374,6 +374,7 @@ static const struct of_device_id vop_driver_dt_match[] = {
374374 .data = & rk3288_vop },
375375 {},
376376};
377+ MODULE_DEVICE_TABLE (of , vop_driver_dt_match );
377378
378379static inline void vop_writel (struct vop * vop , uint32_t offset , uint32_t v )
379380{
@@ -959,8 +960,8 @@ static int vop_update_plane_event(struct drm_plane *plane,
959960 val = (dest .y2 - dest .y1 - 1 ) << 16 ;
960961 val |= (dest .x2 - dest .x1 - 1 ) & 0xffff ;
961962 VOP_WIN_SET (vop , win , dsp_info , val );
962- val = ( dsp_sty - 1 ) << 16 ;
963- val |= ( dsp_stx - 1 ) & 0xffff ;
963+ val = dsp_sty << 16 ;
964+ val |= dsp_stx & 0xffff ;
964965 VOP_WIN_SET (vop , win , dsp_st , val );
965966 VOP_WIN_SET (vop , win , rb_swap , rb_swap );
966967
@@ -1289,7 +1290,7 @@ static void vop_win_state_complete(struct vop_win *vop_win,
12891290
12901291 if (state -> event ) {
12911292 spin_lock_irqsave (& drm -> event_lock , flags );
1292- drm_send_vblank_event ( drm , -1 , state -> event );
1293+ drm_crtc_send_vblank_event ( crtc , state -> event );
12931294 spin_unlock_irqrestore (& drm -> event_lock , flags );
12941295 }
12951296
@@ -1575,40 +1576,33 @@ static int vop_initial(struct vop *vop)
15751576 return PTR_ERR (vop -> dclk );
15761577 }
15771578
1578- ret = clk_prepare (vop -> hclk );
1579- if (ret < 0 ) {
1580- dev_err (vop -> dev , "failed to prepare hclk\n" );
1581- return ret ;
1582- }
1583-
15841579 ret = clk_prepare (vop -> dclk );
15851580 if (ret < 0 ) {
15861581 dev_err (vop -> dev , "failed to prepare dclk\n" );
1587- goto err_unprepare_hclk ;
1582+ return ret ;
15881583 }
15891584
1590- ret = clk_prepare (vop -> aclk );
1585+ /* Enable both the hclk and aclk to setup the vop */
1586+ ret = clk_prepare_enable (vop -> hclk );
15911587 if (ret < 0 ) {
1592- dev_err (vop -> dev , "failed to prepare aclk \n" );
1588+ dev_err (vop -> dev , "failed to prepare/enable hclk \n" );
15931589 goto err_unprepare_dclk ;
15941590 }
15951591
1596- /*
1597- * enable hclk, so that we can config vop register.
1598- */
1599- ret = clk_enable (vop -> hclk );
1592+ ret = clk_prepare_enable (vop -> aclk );
16001593 if (ret < 0 ) {
1601- dev_err (vop -> dev , "failed to prepare aclk\n" );
1602- goto err_unprepare_aclk ;
1594+ dev_err (vop -> dev , "failed to prepare/enable aclk\n" );
1595+ goto err_disable_hclk ;
16031596 }
1597+
16041598 /*
16051599 * do hclk_reset, reset all vop registers.
16061600 */
16071601 ahb_rst = devm_reset_control_get (vop -> dev , "ahb" );
16081602 if (IS_ERR (ahb_rst )) {
16091603 dev_err (vop -> dev , "failed to get ahb reset\n" );
16101604 ret = PTR_ERR (ahb_rst );
1611- goto err_disable_hclk ;
1605+ goto err_disable_aclk ;
16121606 }
16131607 reset_control_assert (ahb_rst );
16141608 usleep_range (10 , 20 );
@@ -1634,26 +1628,25 @@ static int vop_initial(struct vop *vop)
16341628 if (IS_ERR (vop -> dclk_rst )) {
16351629 dev_err (vop -> dev , "failed to get dclk reset\n" );
16361630 ret = PTR_ERR (vop -> dclk_rst );
1637- goto err_unprepare_aclk ;
1631+ goto err_disable_aclk ;
16381632 }
16391633 reset_control_assert (vop -> dclk_rst );
16401634 usleep_range (10 , 20 );
16411635 reset_control_deassert (vop -> dclk_rst );
16421636
16431637 clk_disable (vop -> hclk );
1638+ clk_disable (vop -> aclk );
16441639
16451640 vop -> is_enabled = false;
16461641
16471642 return 0 ;
16481643
1644+ err_disable_aclk :
1645+ clk_disable_unprepare (vop -> aclk );
16491646err_disable_hclk :
1650- clk_disable (vop -> hclk );
1651- err_unprepare_aclk :
1652- clk_unprepare (vop -> aclk );
1647+ clk_disable_unprepare (vop -> hclk );
16531648err_unprepare_dclk :
16541649 clk_unprepare (vop -> dclk );
1655- err_unprepare_hclk :
1656- clk_unprepare (vop -> hclk );
16571650 return ret ;
16581651}
16591652
0 commit comments