diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c index 80a62ba112950..439085de1c9ab 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -774,6 +774,7 @@ static int vfe_check_clock_rates(struct vfe_device *vfe) return 0; } +#define vfe_bug_trace(vfe) dev_info(vfe->camss->dev, "%s/%d vfe %d power_count %d\n", __func__, __LINE__, vfe->id, vfe->power_count); /* * vfe_get - Power up and reset VFE module @@ -786,31 +787,37 @@ int vfe_get(struct vfe_device *vfe) int ret; mutex_lock(&vfe->power_lock); - if (vfe->power_count == 0) { + vfe_bug_trace(vfe); ret = vfe->res->hw_ops->pm_domain_on(vfe); if (ret < 0) goto error_pm_domain; + vfe_bug_trace(vfe); ret = pm_runtime_resume_and_get(vfe->camss->dev); if (ret < 0) goto error_domain_off; + vfe_bug_trace(vfe); ret = vfe_set_clock_rates(vfe); if (ret < 0) goto error_pm_runtime_get; + vfe_bug_trace(vfe); ret = camss_enable_clocks(vfe->nclocks, vfe->clock, vfe->camss->dev); if (ret < 0) goto error_pm_runtime_get; + vfe_bug_trace(vfe); ret = vfe_reset(vfe); if (ret < 0) goto error_reset; + vfe_bug_trace(vfe); vfe_reset_output_maps(vfe); + vfe_bug_trace(vfe); vfe_init_outputs(vfe); vfe->res->hw_ops->hw_version(vfe); @@ -821,6 +828,7 @@ int vfe_get(struct vfe_device *vfe) } vfe->power_count++; + vfe_bug_trace(vfe); mutex_unlock(&vfe->power_lock); return 0; @@ -835,7 +843,7 @@ int vfe_get(struct vfe_device *vfe) error_pm_domain: mutex_unlock(&vfe->power_lock); - +dev_info(camss->vfe->dev, "%s vfe %d err=%d\n", __func__, camss->vfe->id, ret); return ret; } @@ -847,20 +855,32 @@ void vfe_put(struct vfe_device *vfe) { mutex_lock(&vfe->power_lock); + vfe_bug_trace(vfe); if (vfe->power_count == 0) { + vfe_bug_trace(vfe); dev_err(vfe->camss->dev, "vfe power off on power_count == 0\n"); goto exit; } else if (vfe->power_count == 1) { + vfe_bug_trace(vfe); if (vfe->was_streaming) { + vfe_bug_trace(vfe); vfe->was_streaming = 0; + vfe_bug_trace(vfe); vfe->res->hw_ops->vfe_halt(vfe); + vfe_bug_trace(vfe); } + vfe_bug_trace(vfe); camss_disable_clocks(vfe->nclocks, vfe->clock); + vfe_bug_trace(vfe); pm_runtime_put_sync(vfe->camss->dev); + vfe_bug_trace(vfe); vfe->res->hw_ops->pm_domain_off(vfe); + vfe_bug_trace(vfe); } + vfe_bug_trace(vfe); vfe->power_count--; + vfe_bug_trace(vfe); exit: mutex_unlock(&vfe->power_lock);