static int jpeg_m2m_open(struct file *file) { struct jpeg_dev *dev = video_drvdata(file); struct jpeg_ctx *ctx = NULL; int ret = 0; enum jpeg_node_type node; node = jpeg_get_node_type(file); if (node == JPEG_NODE_INVALID) { jpeg_err("cannot specify node type\n"); ret = -ENOENT; goto err_node_type; } ctx = kzalloc(sizeof *ctx, GFP_KERNEL); if (!ctx) return -ENOMEM; file->private_data = ctx; ctx->dev = dev; spin_lock_init(&ctx->slock); if (node == JPEG_NODE_DECODER) ctx->m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev_dec, ctx, queue_init_dec); else ctx->m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev_enc, ctx, queue_init_enc); if (IS_ERR(ctx->m2m_ctx)) { int err = PTR_ERR(ctx->m2m_ctx); kfree(ctx); return err; } clk_enable(dev->clk); #ifdef CONFIG_PM_RUNTIME #if defined (CONFIG_CPU_EXYNOS5250) dev->vb2->resume(dev->alloc_ctx); #ifdef CONFIG_BUSFREQ_OPP /* lock bus frequency */ dev_lock(dev->bus_dev, &dev->plat_dev->dev, BUSFREQ_400MHZ); #endif #else pm_runtime_get_sync(&dev->plat_dev->dev); #endif #endif return 0; err_node_type: kfree(ctx); return ret; }
static int jpeg_m2m_open(struct file *file) { struct jpeg_dev *dev = video_drvdata(file); struct jpeg_ctx *ctx = NULL; int ret = 0; enum jpeg_node_type node; node = jpeg_get_node_type(file); if (node == JPEG_NODE_INVALID) { jpeg_err("cannot specify node type\n"); ret = -ENOENT; goto err_node_type; } ctx = kzalloc(sizeof *ctx, GFP_KERNEL); if (!ctx) return -ENOMEM; file->private_data = ctx; ctx->dev = dev; if (node == JPEG_NODE_DECODER) ctx->m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev_dec, ctx, queue_init_dec); else ctx->m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev_enc, ctx, queue_init_enc); if (IS_ERR(ctx->m2m_ctx)) { int err = PTR_ERR(ctx->m2m_ctx); kfree(ctx); return err; } clk_enable(dev->clk); #ifdef CONFIG_PM_RUNTIME pm_runtime_get_sync(&dev->plat_dev->dev); #endif return 0; err_node_type: kfree(ctx); return ret; }