veu 220 drivers/media/platform/sh_veu.c static u32 sh_veu_reg_read(struct sh_veu_dev *veu, unsigned int reg) veu 222 drivers/media/platform/sh_veu.c return ioread32(veu->base + reg); veu 225 drivers/media/platform/sh_veu.c static void sh_veu_reg_write(struct sh_veu_dev *veu, unsigned int reg, veu 228 drivers/media/platform/sh_veu.c iowrite32(value, veu->base + reg); veu 235 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = priv; veu 238 drivers/media/platform/sh_veu.c veu->aborting = true; veu 241 drivers/media/platform/sh_veu.c static void sh_veu_process(struct sh_veu_dev *veu, veu 247 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_DAYR, addr + veu->vfmt_out.offset_y); veu 248 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_DACR, veu->vfmt_out.offset_c ? veu 249 drivers/media/platform/sh_veu.c addr + veu->vfmt_out.offset_c : 0); veu 250 drivers/media/platform/sh_veu.c dev_dbg(veu->dev, "%s(): dst base %lx, y: %x, c: %x\n", __func__, veu 252 drivers/media/platform/sh_veu.c veu->vfmt_out.offset_y, veu->vfmt_out.offset_c); veu 255 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_SAYR, addr + veu->vfmt_in.offset_y); veu 256 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_SACR, veu->vfmt_in.offset_c ? veu 257 drivers/media/platform/sh_veu.c addr + veu->vfmt_in.offset_c : 0); veu 258 drivers/media/platform/sh_veu.c dev_dbg(veu->dev, "%s(): src base %lx, y: %x, c: %x\n", __func__, veu 260 drivers/media/platform/sh_veu.c veu->vfmt_in.offset_y, veu->vfmt_in.offset_c); veu 262 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_STR, 1); veu 264 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_EIER, 1); /* enable interrupt in VEU */ veu 275 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = priv; veu 278 drivers/media/platform/sh_veu.c src_buf = v4l2_m2m_next_src_buf(veu->m2m_ctx); veu 279 drivers/media/platform/sh_veu.c dst_buf = v4l2_m2m_next_dst_buf(veu->m2m_ctx); veu 282 drivers/media/platform/sh_veu.c sh_veu_process(veu, &src_buf->vb2_buf, &dst_buf->vb2_buf); veu 287 drivers/media/platform/sh_veu.c static bool sh_veu_is_streamer(struct sh_veu_dev *veu, struct sh_veu_file *veu_file, veu 291 drivers/media/platform/sh_veu.c veu_file == veu->capture) || veu 293 drivers/media/platform/sh_veu.c veu_file == veu->output); veu 307 drivers/media/platform/sh_veu.c static int sh_veu_stream_init(struct sh_veu_dev *veu, struct sh_veu_file *veu_file, veu 314 drivers/media/platform/sh_veu.c stream = &veu->capture; veu 317 drivers/media/platform/sh_veu.c stream = &veu->output; veu 334 drivers/media/platform/sh_veu.c static int sh_veu_context_init(struct sh_veu_dev *veu) veu 336 drivers/media/platform/sh_veu.c if (veu->m2m_ctx) veu 339 drivers/media/platform/sh_veu.c veu->m2m_ctx = v4l2_m2m_ctx_init(veu->m2m_dev, veu, veu 342 drivers/media/platform/sh_veu.c return PTR_ERR_OR_ZERO(veu->m2m_ctx); veu 375 drivers/media/platform/sh_veu.c static struct sh_veu_vfmt *sh_veu_get_vfmt(struct sh_veu_dev *veu, veu 380 drivers/media/platform/sh_veu.c return &veu->vfmt_out; veu 382 drivers/media/platform/sh_veu.c return &veu->vfmt_in; veu 391 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = veu_file->veu_dev; veu 394 drivers/media/platform/sh_veu.c vfmt = sh_veu_get_vfmt(veu, f->type); veu 404 drivers/media/platform/sh_veu.c dev_dbg(veu->dev, "%s(): type: %d, size %u @ %ux%u, fmt %x\n", __func__, veu 505 drivers/media/platform/sh_veu.c static void sh_veu_colour_offset(struct sh_veu_dev *veu, struct sh_veu_vfmt *vfmt) veu 510 drivers/media/platform/sh_veu.c dma_addr_t offset = (dma_addr_t)top * veu->vfmt_out.bytesperline + veu 511 drivers/media/platform/sh_veu.c (((dma_addr_t)left * veu->vfmt_out.fmt->depth) >> 3); veu 538 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = veu_file->veu_dev; veu 541 drivers/media/platform/sh_veu.c int ret = sh_veu_context_init(veu); veu 545 drivers/media/platform/sh_veu.c vq = v4l2_m2m_get_vq(veu->m2m_ctx, f->type); veu 554 drivers/media/platform/sh_veu.c vfmt = sh_veu_get_vfmt(veu, f->type); veu 563 drivers/media/platform/sh_veu.c sh_veu_colour_offset(veu, vfmt); veu 572 drivers/media/platform/sh_veu.c dev_dbg(veu->dev, veu 603 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = veu_file->veu_dev; veu 604 drivers/media/platform/sh_veu.c int ret = sh_veu_context_init(veu); veu 608 drivers/media/platform/sh_veu.c ret = sh_veu_stream_init(veu, veu_file, reqbufs->type); veu 612 drivers/media/platform/sh_veu.c return v4l2_m2m_reqbufs(file, veu->m2m_ctx, reqbufs); veu 648 drivers/media/platform/sh_veu.c static void sh_veu_calc_scale(struct sh_veu_dev *veu, veu 664 drivers/media/platform/sh_veu.c if (veu->is_2h && size_out > size_in) { veu 701 drivers/media/platform/sh_veu.c static unsigned long sh_veu_scale_v(struct sh_veu_dev *veu, veu 706 drivers/media/platform/sh_veu.c sh_veu_calc_scale(veu, size_in, size_out, crop_out, &mant, &frac, &rep); veu 709 drivers/media/platform/sh_veu.c value = (sh_veu_reg_read(veu, VEU_RFCR) & ~0xffff0000) | veu 712 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_RFCR, value); veu 715 drivers/media/platform/sh_veu.c value = (sh_veu_reg_read(veu, VEU_RFSR) & ~0xffff0000) | veu 718 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_RFSR, value); veu 723 drivers/media/platform/sh_veu.c static unsigned long sh_veu_scale_h(struct sh_veu_dev *veu, veu 728 drivers/media/platform/sh_veu.c sh_veu_calc_scale(veu, size_in, size_out, crop_out, &mant, &frac, &rep); veu 731 drivers/media/platform/sh_veu.c value = (sh_veu_reg_read(veu, VEU_RFCR) & ~0xffff) | veu 734 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_RFCR, value); veu 737 drivers/media/platform/sh_veu.c value = (sh_veu_reg_read(veu, VEU_RFSR) & ~0xffff) | veu 740 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_RFSR, value); veu 745 drivers/media/platform/sh_veu.c static void sh_veu_configure(struct sh_veu_dev *veu) veu 752 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_BSRR, 0x100); veu 754 drivers/media/platform/sh_veu.c src_width = veu->vfmt_in.frame.width; veu 755 drivers/media/platform/sh_veu.c src_height = veu->vfmt_in.frame.height; veu 756 drivers/media/platform/sh_veu.c src_stride = ALIGN(veu->vfmt_in.frame.width, 16); veu 758 drivers/media/platform/sh_veu.c dst_width = real_w = veu->vfmt_out.frame.width; veu 759 drivers/media/platform/sh_veu.c dst_height = real_h = veu->vfmt_out.frame.height; veu 761 drivers/media/platform/sh_veu.c dst_stride = veu->vfmt_out.bytesperline; veu 768 drivers/media/platform/sh_veu.c src_width = sh_veu_scale_h(veu, src_width, real_w, dst_width); veu 769 drivers/media/platform/sh_veu.c src_height = sh_veu_scale_v(veu, src_height, real_h, dst_height); veu 771 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_SWR, src_stride); veu 772 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_SSR, src_width | (src_height << 16)); veu 773 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_BSSR, 0); /* not using bundle mode */ veu 775 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_EDWR, dst_stride); veu 776 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_DACR, 0); /* unused for RGB */ veu 778 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_SWPR, 0x67); veu 779 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_TRCR, (6 << 16) | (0 << 14) | 2 | 4); veu 781 drivers/media/platform/sh_veu.c if (veu->is_2h) { veu 782 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_MCR00, 0x0cc5); veu 783 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_MCR01, 0x0950); veu 784 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_MCR02, 0x0000); veu 786 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_MCR10, 0x397f); veu 787 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_MCR11, 0x0950); veu 788 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_MCR12, 0x3ccd); veu 790 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_MCR20, 0x0000); veu 791 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_MCR21, 0x0950); veu 792 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_MCR22, 0x1023); veu 794 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_COFFR, 0x00800010); veu 807 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = veu_file->veu_dev; veu 810 drivers/media/platform/sh_veu.c veu->xaction = 0; veu 811 drivers/media/platform/sh_veu.c veu->aborting = false; veu 857 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = vb2_get_drv_priv(vq); veu 858 drivers/media/platform/sh_veu.c struct sh_veu_vfmt *vfmt = sh_veu_get_vfmt(veu, vq->type); veu 877 drivers/media/platform/sh_veu.c dev_dbg(veu->dev, "get %d buffer(s) of size %d each.\n", count, size); veu 884 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = vb2_get_drv_priv(vb->vb2_queue); veu 888 drivers/media/platform/sh_veu.c vfmt = sh_veu_get_vfmt(veu, vb->vb2_queue->type); veu 893 drivers/media/platform/sh_veu.c dev_dbg(veu->dev, "%s data will not fit into plane (%lu < %u)\n", veu 906 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = vb2_get_drv_priv(vb->vb2_queue); veu 907 drivers/media/platform/sh_veu.c dev_dbg(veu->dev, "%s(%d)\n", __func__, vb->type); veu 908 drivers/media/platform/sh_veu.c v4l2_m2m_buf_queue(veu->m2m_ctx, vbuf); veu 922 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = priv; veu 928 drivers/media/platform/sh_veu.c src_vq->drv_priv = veu; veu 932 drivers/media/platform/sh_veu.c src_vq->lock = &veu->fop_lock; veu 934 drivers/media/platform/sh_veu.c src_vq->dev = veu->v4l2_dev.dev; veu 943 drivers/media/platform/sh_veu.c dst_vq->drv_priv = veu; veu 947 drivers/media/platform/sh_veu.c dst_vq->lock = &veu->fop_lock; veu 949 drivers/media/platform/sh_veu.c dst_vq->dev = veu->v4l2_dev.dev; veu 958 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = video_drvdata(file); veu 966 drivers/media/platform/sh_veu.c veu_file->veu_dev = veu; veu 971 drivers/media/platform/sh_veu.c pm_runtime_get_sync(veu->dev); veu 974 drivers/media/platform/sh_veu.c dev_dbg(veu->dev, "Created instance %p\n", veu_file); veu 981 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = video_drvdata(file); veu 984 drivers/media/platform/sh_veu.c dev_dbg(veu->dev, "Releasing instance %p\n", veu_file); veu 986 drivers/media/platform/sh_veu.c if (veu_file == veu->capture) { veu 987 drivers/media/platform/sh_veu.c veu->capture = NULL; veu 988 drivers/media/platform/sh_veu.c vb2_queue_release(v4l2_m2m_get_vq(veu->m2m_ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE)); veu 991 drivers/media/platform/sh_veu.c if (veu_file == veu->output) { veu 992 drivers/media/platform/sh_veu.c veu->output = NULL; veu 993 drivers/media/platform/sh_veu.c vb2_queue_release(v4l2_m2m_get_vq(veu->m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT)); veu 996 drivers/media/platform/sh_veu.c if (!veu->output && !veu->capture && veu->m2m_ctx) { veu 997 drivers/media/platform/sh_veu.c v4l2_m2m_ctx_release(veu->m2m_ctx); veu 998 drivers/media/platform/sh_veu.c veu->m2m_ctx = NULL; veu 1001 drivers/media/platform/sh_veu.c pm_runtime_put(veu->dev); veu 1051 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = dev_id; veu 1053 drivers/media/platform/sh_veu.c if (veu->xaction == MEM2MEM_DEF_TRANSLEN || veu->aborting) { veu 1054 drivers/media/platform/sh_veu.c v4l2_m2m_job_finish(veu->m2m_dev, veu->m2m_ctx); veu 1055 drivers/media/platform/sh_veu.c veu->xaction = 0; veu 1057 drivers/media/platform/sh_veu.c sh_veu_device_run(veu); veu 1065 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = dev_id; veu 1068 drivers/media/platform/sh_veu.c u32 status = sh_veu_reg_read(veu, VEU_EVTR); veu 1075 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_EIER, 0); veu 1077 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_STR, 0); veu 1079 drivers/media/platform/sh_veu.c sh_veu_reg_write(veu, VEU_EVTR, status & ~1); veu 1082 drivers/media/platform/sh_veu.c dst = v4l2_m2m_dst_buf_remove(veu->m2m_ctx); veu 1083 drivers/media/platform/sh_veu.c src = v4l2_m2m_src_buf_remove(veu->m2m_ctx); veu 1093 drivers/media/platform/sh_veu.c spin_lock(&veu->lock); veu 1096 drivers/media/platform/sh_veu.c spin_unlock(&veu->lock); veu 1098 drivers/media/platform/sh_veu.c veu->xaction++; veu 1105 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu; veu 1118 drivers/media/platform/sh_veu.c veu = devm_kzalloc(&pdev->dev, sizeof(*veu), GFP_KERNEL); veu 1119 drivers/media/platform/sh_veu.c if (!veu) veu 1122 drivers/media/platform/sh_veu.c veu->is_2h = resource_size(reg_res) == 0x22c; veu 1124 drivers/media/platform/sh_veu.c veu->base = devm_ioremap_resource(&pdev->dev, reg_res); veu 1125 drivers/media/platform/sh_veu.c if (IS_ERR(veu->base)) veu 1126 drivers/media/platform/sh_veu.c return PTR_ERR(veu->base); veu 1129 drivers/media/platform/sh_veu.c 0, "veu", veu); veu 1133 drivers/media/platform/sh_veu.c ret = v4l2_device_register(&pdev->dev, &veu->v4l2_dev); veu 1139 drivers/media/platform/sh_veu.c vdev = &veu->vdev; veu 1142 drivers/media/platform/sh_veu.c vdev->v4l2_dev = &veu->v4l2_dev; veu 1143 drivers/media/platform/sh_veu.c spin_lock_init(&veu->lock); veu 1144 drivers/media/platform/sh_veu.c mutex_init(&veu->fop_lock); veu 1145 drivers/media/platform/sh_veu.c vdev->lock = &veu->fop_lock; veu 1147 drivers/media/platform/sh_veu.c video_set_drvdata(vdev, veu); veu 1149 drivers/media/platform/sh_veu.c veu->dev = &pdev->dev; veu 1150 drivers/media/platform/sh_veu.c veu->vfmt_out = DEFAULT_OUT_VFMT; veu 1151 drivers/media/platform/sh_veu.c veu->vfmt_in = DEFAULT_IN_VFMT; veu 1153 drivers/media/platform/sh_veu.c veu->m2m_dev = v4l2_m2m_init(&sh_veu_m2m_ops); veu 1154 drivers/media/platform/sh_veu.c if (IS_ERR(veu->m2m_dev)) { veu 1155 drivers/media/platform/sh_veu.c ret = PTR_ERR(veu->m2m_dev); veu 1156 drivers/media/platform/sh_veu.c v4l2_err(&veu->v4l2_dev, "Failed to init mem2mem device: %d\n", ret); veu 1172 drivers/media/platform/sh_veu.c v4l2_m2m_release(veu->m2m_dev); veu 1174 drivers/media/platform/sh_veu.c v4l2_device_unregister(&veu->v4l2_dev); veu 1181 drivers/media/platform/sh_veu.c struct sh_veu_dev *veu = container_of(v4l2_dev, veu 1184 drivers/media/platform/sh_veu.c video_unregister_device(&veu->vdev); veu 1186 drivers/media/platform/sh_veu.c v4l2_m2m_release(veu->m2m_dev); veu 1187 drivers/media/platform/sh_veu.c v4l2_device_unregister(&veu->v4l2_dev);