static int jpeg_enc_vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f) { struct jpeg_fmt *fmt; struct v4l2_pix_format_mplane *pix = &f->fmt.pix_mp; struct jpeg_ctx *ctx = priv; int i; if (f->type != V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE && f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE && f->type != V4L2_BUF_TYPE_VIDEO_OUTPUT && f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return -EINVAL; fmt = find_format(f); if (!fmt) { v4l2_err(&ctx->dev->v4l2_dev, "Fourcc format (0x%08x) invalid.\n", f->fmt.pix.pixelformat); return -EINVAL; } if (pix->field == V4L2_FIELD_ANY) pix->field = V4L2_FIELD_NONE; else if (V4L2_FIELD_NONE != pix->field) return -EINVAL; pix->num_planes = fmt->memplanes; for (i = 0; i < pix->num_planes; ++i) { int bpl = pix->plane_fmt[i].bytesperline; jpeg_dbg("[%d] bpl: %d, depth: %d, w: %d, h: %d", i, bpl, fmt->depth[i], pix->width, pix->height); if (!bpl || (bpl * 8 / fmt->depth[i]) > pix->width) bpl = (pix->width * fmt->depth[i]) >> 3; if (!pix->plane_fmt[i].sizeimage) pix->plane_fmt[i].sizeimage = pix->height * bpl; pix->plane_fmt[i].bytesperline = bpl; jpeg_dbg("[%d]: bpl: %d, sizeimage: %d", i, pix->plane_fmt[i].bytesperline, pix->plane_fmt[i].sizeimage); } if (f->fmt.pix.height > MAX_JPEG_HEIGHT) f->fmt.pix.height = MAX_JPEG_HEIGHT; if (f->fmt.pix.width > MAX_JPEG_WIDTH) f->fmt.pix.width = MAX_JPEG_WIDTH; return 0; }
int jpeg_int_pending(struct jpeg_dev *ctrl) { unsigned int int_status; int_status = jpeg_get_int_status(ctrl->reg_base); jpeg_dbg("state(%d)\n", int_status); return int_status; }
static int jpeg_setup_controller(struct jpeg_control *ctrl) { #if defined(CONFIG_S5P_SYSMMU_JPEG) s5p_sysmmu_enable(jpeg_pm); jpeg_dbg("sysmmu on\n"); /* jpeg hw uses kernel virtual address */ s5p_sysmmu_set_tablebase_pgd(jpeg_pm, __pa(swapper_pg_dir)); #endif atomic_set(&ctrl->in_use, 0); mutex_init(&ctrl->lock); init_waitqueue_head(&ctrl->wq); return 0; }
static int jpeg_remove(struct platform_device *dev) { #if defined(CONFIG_S5P_SYSMMU_JPEG) s5p_sysmmu_disable(jpeg_pm); jpeg_dbg("sysmmu off\n"); #endif free_irq(jpeg_ctrl->irq_no, dev); mutex_destroy(&jpeg_ctrl->lock); iounmap(jpeg_ctrl->reg_base); kfree(jpeg_ctrl); misc_deregister(&jpeg_miscdev); #ifdef CONFIG_PM_RUNTIME pm_runtime_disable(jpeg_pm); #endif return 0; }
static inline enum jpeg_node_type jpeg_get_node_type(struct file *file) { struct video_device *vdev = video_devdata(file); if (!vdev) { jpeg_err("failed to get video_device\n"); return JPEG_NODE_INVALID; } jpeg_dbg("video_device index: %d\n", vdev->num); if (vdev->num == JPEG_NODE_DECODER) return JPEG_NODE_DECODER; else if (vdev->num == JPEG_NODE_ENCODER) return JPEG_NODE_ENCODER; else return JPEG_NODE_INVALID; }