static int fimg2d_release(struct inode *inode, struct file *file) { struct fimg2d_context *ctx = file->private_data; int retry = POLL_RETRY; unsigned long flags, count; fimg2d_debug("ctx %p\n", ctx); while (retry--) { if (!atomic_read(&ctx->ncmd)) break; mdelay(POLL_TIMEOUT); } g2d_spin_lock(&ctrl->bltlock, flags); fimg2d_del_context(ctrl, ctx); count = atomic_read(&ctrl->nctx); g2d_spin_unlock(&ctrl->bltlock, flags); if (!count) fimg2d_pm_qos_update(ctrl, FIMG2D_QOS_OFF); else { fimg2d_debug("count:%ld, fimg2d_pm_pos_update is " "not called yet\n", count); } kfree(ctx); return 0; }
static int fimg2d_release(struct inode *inode, struct file *file) { struct fimg2d_context *ctx = file->private_data; int retry = POLL_RETRY; unsigned long flags, count; fimg2d_debug("ctx %p\n", ctx); while (retry--) { if (!atomic_read(&ctx->ncmd)) break; mdelay(POLL_TIMEOUT); } g2d_spin_lock(&ctrl->bltlock, flags); fimg2d_del_context(ctrl, ctx); count = atomic_read(&ctrl->nctx); g2d_spin_unlock(&ctrl->bltlock, flags); #ifdef CONFIG_ARM_EXYNOS_IKS_CPUFREQ if (!count) { pm_qos_update_request(&exynos5_g2d_mif_qos, 0); pm_qos_update_request(&exynos5_g2d_cpu_qos, 0); } else fimg2d_debug("count:%ld, pm_qos_update_request() is already called\n", count); #endif kfree(ctx); return 0; }
static int fimg2d_release(struct inode *inode, struct file *file) { struct fimg2d_context *ctx = file->private_data; int retry = POLL_RETRY; unsigned long flags, count; fimg2d_debug("ctx %p\n", ctx); while (retry--) { if (!atomic_read(&ctx->ncmd)) break; mdelay(POLL_TIMEOUT); } g2d_spin_lock(&ctrl->bltlock, flags); fimg2d_del_context(ctrl, ctx); count = atomic_read(&ctrl->nctx); g2d_spin_unlock(&ctrl->bltlock, flags); if (!count) fimg2d_pm_qos_update(ctrl, FIMG2D_QOS_OFF); else { #ifdef CONFIG_FIMG2D_USE_BUS_DEVFREQ fimg2d_debug("count:%ld, fimg2d_pm_qos_update(OFF,mif.int) is not called yet\n", count); #endif #ifdef CONFIG_ARM_EXYNOS_IKS_CPUFREQ fimg2d_debug("count:%ld, fimg2d_pm_qos_update(OFF, cpu) is not called yet\n", count); #endif } kfree(ctx); return 0; }
static int fimg2d_release(struct inode *inode, struct file *file) { struct fimg2d_context *ctx = file->private_data; fimg2d_debug("ctx %p\n", ctx); while (1) { if (!atomic_read(&ctx->ncmd)) break; mdelay(2); } fimg2d_del_context(info, ctx); kfree(ctx); return 0; }