|
@@ -347,19 +347,41 @@ static int mxr_runtime_resume(struct device *dev)
|
|
{
|
|
{
|
|
struct mxr_device *mdev = to_mdev(dev);
|
|
struct mxr_device *mdev = to_mdev(dev);
|
|
struct mxr_resources *res = &mdev->res;
|
|
struct mxr_resources *res = &mdev->res;
|
|
|
|
+ int ret;
|
|
|
|
|
|
mxr_dbg(mdev, "resume - start\n");
|
|
mxr_dbg(mdev, "resume - start\n");
|
|
mutex_lock(&mdev->mutex);
|
|
mutex_lock(&mdev->mutex);
|
|
/* turn clocks on */
|
|
/* turn clocks on */
|
|
- clk_enable(res->mixer);
|
|
|
|
- clk_enable(res->vp);
|
|
|
|
- clk_enable(res->sclk_mixer);
|
|
|
|
|
|
+ ret = clk_prepare_enable(res->mixer);
|
|
|
|
+ if (ret < 0) {
|
|
|
|
+ dev_err(mdev->dev, "clk_prepare_enable(mixer) failed\n");
|
|
|
|
+ goto fail;
|
|
|
|
+ }
|
|
|
|
+ ret = clk_prepare_enable(res->vp);
|
|
|
|
+ if (ret < 0) {
|
|
|
|
+ dev_err(mdev->dev, "clk_prepare_enable(vp) failed\n");
|
|
|
|
+ goto fail_mixer;
|
|
|
|
+ }
|
|
|
|
+ ret = clk_prepare_enable(res->sclk_mixer);
|
|
|
|
+ if (ret < 0) {
|
|
|
|
+ dev_err(mdev->dev, "clk_prepare_enable(sclk_mixer) failed\n");
|
|
|
|
+ goto fail_vp;
|
|
|
|
+ }
|
|
/* apply default configuration */
|
|
/* apply default configuration */
|
|
mxr_reg_reset(mdev);
|
|
mxr_reg_reset(mdev);
|
|
mxr_dbg(mdev, "resume - finished\n");
|
|
mxr_dbg(mdev, "resume - finished\n");
|
|
|
|
|
|
mutex_unlock(&mdev->mutex);
|
|
mutex_unlock(&mdev->mutex);
|
|
return 0;
|
|
return 0;
|
|
|
|
+
|
|
|
|
+fail_vp:
|
|
|
|
+ clk_disable_unprepare(res->vp);
|
|
|
|
+fail_mixer:
|
|
|
|
+ clk_disable_unprepare(res->mixer);
|
|
|
|
+fail:
|
|
|
|
+ mutex_unlock(&mdev->mutex);
|
|
|
|
+ dev_err(mdev->dev, "resume failed\n");
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static int mxr_runtime_suspend(struct device *dev)
|
|
static int mxr_runtime_suspend(struct device *dev)
|
|
@@ -369,9 +391,9 @@ static int mxr_runtime_suspend(struct device *dev)
|
|
mxr_dbg(mdev, "suspend - start\n");
|
|
mxr_dbg(mdev, "suspend - start\n");
|
|
mutex_lock(&mdev->mutex);
|
|
mutex_lock(&mdev->mutex);
|
|
/* turn clocks off */
|
|
/* turn clocks off */
|
|
- clk_disable(res->sclk_mixer);
|
|
|
|
- clk_disable(res->vp);
|
|
|
|
- clk_disable(res->mixer);
|
|
|
|
|
|
+ clk_disable_unprepare(res->sclk_mixer);
|
|
|
|
+ clk_disable_unprepare(res->vp);
|
|
|
|
+ clk_disable_unprepare(res->mixer);
|
|
mutex_unlock(&mdev->mutex);
|
|
mutex_unlock(&mdev->mutex);
|
|
mxr_dbg(mdev, "suspend - finished\n");
|
|
mxr_dbg(mdev, "suspend - finished\n");
|
|
return 0;
|
|
return 0;
|