[media] s5p-mfc: clear 'enter_suspend' flag if suspend fails
authorPrathyush K <prathyush.k@samsung.com>
Tue, 21 Oct 2014 11:06:57 +0000 (08:06 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 28 Oct 2014 17:42:43 +0000 (15:42 -0200)
The enter_suspend flag is set after we enter mfc suspend function but if
suspend fails after that due to any reason (like hardware timeout etc),
this flag must be cleared before returning an error. Otherwise, this
flag never gets cleared and the MFC suspend will always return an error
on subsequent tries. If clock off fails, disable hw_lock also.

Signed-off-by: Prathyush K <prathyush.k@samsung.com>
Signed-off-by: Kiran AVND <avnd.kiran@samsung.com>
Signed-off-by: Arun Kumar K <arun.kk@samsung.com>
Signed-off-by: Kamil Debski <k.debski@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/s5p-mfc/s5p_mfc.c

index 165bc86c596267f701cf6997422f953ec412227a..79c953779fe956b3cdc193c89d998619ebf656a9 100644 (file)
@@ -1284,11 +1284,17 @@ static int s5p_mfc_suspend(struct device *dev)
                        m_dev->int_cond, msecs_to_jiffies(MFC_INT_TIMEOUT));
                if (ret == 0) {
                        mfc_err("Waiting for hardware to finish timed out\n");
+                       clear_bit(0, &m_dev->enter_suspend);
                        return -EIO;
                }
        }
 
-       return s5p_mfc_sleep(m_dev);
+       ret = s5p_mfc_sleep(m_dev);
+       if (ret) {
+               clear_bit(0, &m_dev->enter_suspend);
+               clear_bit(0, &m_dev->hw_lock);
+       }
+       return ret;
 }
 
 static int s5p_mfc_resume(struct device *dev)