vdin: perfecting vdin_shutdown() interface
authorxuhua zhang <xuhua.zhang@amlogic.com>
Fri, 14 Sep 2018 07:36:46 +0000 (15:36 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Thu, 11 Oct 2018 10:28:07 +0000 (03:28 -0700)
PD#173740: vdin: perfecting vdin_shutdown() interface

Free vdin resource when the system shutdown but the application program
was not close vdin at some fortuitous event.

Change-Id: I343e1b93c6e2166a247592d8faa39b3f737f91d0
Signed-off-by: xuhua zhang <xuhua.zhang@amlogic.com>
drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c

index e8fc2c7..70f4ab3 100644 (file)
@@ -2691,6 +2691,20 @@ static void vdin_drv_shutdown(struct platform_device *pdev)
        struct vdin_dev_s *vdevp;
 
        vdevp = platform_get_drvdata(pdev);
+
+       mutex_lock(&vdevp->fe_lock);
+       if (vdevp->flags & VDIN_FLAG_DEC_STARTED) {
+               vdevp->flags |= VDIN_FLAG_DEC_STOP_ISR;
+               vdin_stop_dec(vdevp);
+               vdevp->flags &= (~VDIN_FLAG_DEC_STARTED);
+               pr_info("VDIN(%d) decode stop ok at vdin_drv_shutdown.\n",
+                       vdevp->index);
+       } else {
+               pr_info("VDIN(%d) decode has stopped.\n",
+                       vdevp->index);
+       }
+       mutex_unlock(&vdevp->fe_lock);
+
        vdevp->flags |= VDIN_FLAG_SM_DISABLE;
        vdin_enable_module(vdevp->addr_offset, false);
        pr_info("%s ok.\n", __func__);