Lines Matching refs:jpeg

329 static void print_mxc_buf(struct mxc_jpeg_dev *jpeg, struct vb2_buffer *buf,  in print_mxc_buf()  argument
346 v4l2_dbg(3, debug, &jpeg->v4l2_dev, in print_mxc_buf()
476 static bool mxc_jpeg_alloc_slot_data(struct mxc_jpeg_dev *jpeg, in mxc_jpeg_alloc_slot_data() argument
483 if (jpeg->slot_data[slot].desc) in mxc_jpeg_alloc_slot_data()
487 desc = dma_alloc_coherent(jpeg->dev, in mxc_jpeg_alloc_slot_data()
489 &jpeg->slot_data[slot].desc_handle, in mxc_jpeg_alloc_slot_data()
493 jpeg->slot_data[slot].desc = desc; in mxc_jpeg_alloc_slot_data()
496 cfg_desc = dma_alloc_coherent(jpeg->dev, in mxc_jpeg_alloc_slot_data()
498 &jpeg->slot_data[slot].cfg_desc_handle, in mxc_jpeg_alloc_slot_data()
502 jpeg->slot_data[slot].cfg_desc = cfg_desc; in mxc_jpeg_alloc_slot_data()
505 cfg_stm = dma_alloc_coherent(jpeg->dev, in mxc_jpeg_alloc_slot_data()
507 &jpeg->slot_data[slot].cfg_stream_handle, in mxc_jpeg_alloc_slot_data()
511 jpeg->slot_data[slot].cfg_stream_vaddr = cfg_stm; in mxc_jpeg_alloc_slot_data()
514 jpeg->slot_data[slot].used = true; in mxc_jpeg_alloc_slot_data()
518 dev_err(jpeg->dev, "Could not allocate descriptors for slot %d", slot); in mxc_jpeg_alloc_slot_data()
523 static void mxc_jpeg_free_slot_data(struct mxc_jpeg_dev *jpeg, in mxc_jpeg_free_slot_data() argument
527 dev_err(jpeg->dev, "Invalid slot %d, nothing to free.", slot); in mxc_jpeg_free_slot_data()
532 dma_free_coherent(jpeg->dev, sizeof(struct mxc_jpeg_desc), in mxc_jpeg_free_slot_data()
533 jpeg->slot_data[slot].desc, in mxc_jpeg_free_slot_data()
534 jpeg->slot_data[slot].desc_handle); in mxc_jpeg_free_slot_data()
537 dma_free_coherent(jpeg->dev, sizeof(struct mxc_jpeg_desc), in mxc_jpeg_free_slot_data()
538 jpeg->slot_data[slot].cfg_desc, in mxc_jpeg_free_slot_data()
539 jpeg->slot_data[slot].cfg_desc_handle); in mxc_jpeg_free_slot_data()
542 dma_free_coherent(jpeg->dev, MXC_JPEG_MAX_CFG_STREAM, in mxc_jpeg_free_slot_data()
543 jpeg->slot_data[slot].cfg_stream_vaddr, in mxc_jpeg_free_slot_data()
544 jpeg->slot_data[slot].cfg_stream_handle); in mxc_jpeg_free_slot_data()
546 jpeg->slot_data[slot].used = false; in mxc_jpeg_free_slot_data()
551 struct mxc_jpeg_dev *jpeg = priv; in mxc_jpeg_dec_irq() local
553 void __iomem *reg = jpeg->base_reg; in mxc_jpeg_dec_irq()
554 struct device *dev = jpeg->dev; in mxc_jpeg_dec_irq()
564 spin_lock(&jpeg->hw_lock); in mxc_jpeg_dec_irq()
570 ctx = v4l2_m2m_get_curr_priv(jpeg->m2m_dev); in mxc_jpeg_dec_irq()
611 if (jpeg->mode == MXC_JPEG_ENCODE && in mxc_jpeg_dec_irq()
618 if (jpeg->mode == MXC_JPEG_DECODE && jpeg_src_buf->dht_needed) { in mxc_jpeg_dec_irq()
623 if (jpeg->mode == MXC_JPEG_ENCODE) { in mxc_jpeg_dec_irq()
644 print_mxc_buf(jpeg, &src_buf->vb2_buf, 32); in mxc_jpeg_dec_irq()
646 print_mxc_buf(jpeg, &dst_buf->vb2_buf, 32); in mxc_jpeg_dec_irq()
650 jpeg->slot_data[slot].used = false; /* unused, but don't free */ in mxc_jpeg_dec_irq()
655 spin_unlock(&jpeg->hw_lock); in mxc_jpeg_dec_irq()
656 v4l2_m2m_job_finish(jpeg->m2m_dev, ctx->fh.m2m_ctx); in mxc_jpeg_dec_irq()
659 spin_unlock(&jpeg->hw_lock); in mxc_jpeg_dec_irq()
799 struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg; in mxc_jpeg_config_dec_desc() local
800 void __iomem *reg = jpeg->base_reg; in mxc_jpeg_config_dec_desc()
802 struct mxc_jpeg_desc *desc = jpeg->slot_data[slot].desc; in mxc_jpeg_config_dec_desc()
803 struct mxc_jpeg_desc *cfg_desc = jpeg->slot_data[slot].cfg_desc; in mxc_jpeg_config_dec_desc()
804 dma_addr_t desc_handle = jpeg->slot_data[slot].desc_handle; in mxc_jpeg_config_dec_desc()
805 dma_addr_t cfg_desc_handle = jpeg->slot_data[slot].cfg_desc_handle; in mxc_jpeg_config_dec_desc()
806 dma_addr_t cfg_stream_handle = jpeg->slot_data[slot].cfg_stream_handle; in mxc_jpeg_config_dec_desc()
807 unsigned int *cfg_size = &jpeg->slot_data[slot].cfg_stream_size; in mxc_jpeg_config_dec_desc()
808 void *cfg_stream_vaddr = jpeg->slot_data[slot].cfg_stream_vaddr; in mxc_jpeg_config_dec_desc()
824 print_descriptor_info(jpeg->dev, desc); in mxc_jpeg_config_dec_desc()
850 print_descriptor_info(jpeg->dev, cfg_desc); in mxc_jpeg_config_dec_desc()
861 struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg; in mxc_jpeg_config_enc_desc() local
862 void __iomem *reg = jpeg->base_reg; in mxc_jpeg_config_enc_desc()
864 struct mxc_jpeg_desc *desc = jpeg->slot_data[slot].desc; in mxc_jpeg_config_enc_desc()
865 struct mxc_jpeg_desc *cfg_desc = jpeg->slot_data[slot].cfg_desc; in mxc_jpeg_config_enc_desc()
866 dma_addr_t desc_handle = jpeg->slot_data[slot].desc_handle; in mxc_jpeg_config_enc_desc()
867 dma_addr_t cfg_desc_handle = jpeg->slot_data[slot].cfg_desc_handle; in mxc_jpeg_config_enc_desc()
868 void *cfg_stream_vaddr = jpeg->slot_data[slot].cfg_stream_vaddr; in mxc_jpeg_config_enc_desc()
875 jpeg->slot_data[slot].cfg_stream_size = in mxc_jpeg_config_enc_desc()
884 cfg_desc->buf_base0 = jpeg->slot_data[slot].cfg_stream_handle; in mxc_jpeg_config_enc_desc()
903 dev_err(jpeg->dev, "No valid image format detected\n"); in mxc_jpeg_config_enc_desc()
908 dev_dbg(jpeg->dev, "cfg_desc:\n"); in mxc_jpeg_config_enc_desc()
909 print_descriptor_info(jpeg->dev, cfg_desc); in mxc_jpeg_config_enc_desc()
910 dev_dbg(jpeg->dev, "enc desc:\n"); in mxc_jpeg_config_enc_desc()
911 print_descriptor_info(jpeg->dev, desc); in mxc_jpeg_config_enc_desc()
912 print_wrapper_info(jpeg->dev, reg); in mxc_jpeg_config_enc_desc()
913 print_cast_status(jpeg->dev, reg, MXC_JPEG_ENCODE); in mxc_jpeg_config_enc_desc()
922 struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg; in mxc_jpeg_device_run() local
923 void __iomem *reg = jpeg->base_reg; in mxc_jpeg_device_run()
924 struct device *dev = jpeg->dev; in mxc_jpeg_device_run()
951 jpeg->slot_data[ctx->slot].used = false; in mxc_jpeg_device_run()
957 v4l2_m2m_job_finish(jpeg->m2m_dev, ctx->fh.m2m_ctx); in mxc_jpeg_device_run()
965 ctx->slot = mxc_get_free_slot(jpeg->slot_data, MXC_MAX_SLOTS); in mxc_jpeg_device_run()
970 if (!mxc_jpeg_alloc_slot_data(jpeg, ctx->slot)) { in mxc_jpeg_device_run()
978 if (jpeg->mode == MXC_JPEG_ENCODE) { in mxc_jpeg_device_run()
986 print_mxc_buf(jpeg, &src_buf->vb2_buf, 0); in mxc_jpeg_device_run()
1642 struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg; in mxc_jpeg_try_fmt_vid_cap() local
1643 struct device *dev = jpeg->dev; in mxc_jpeg_try_fmt_vid_cap()
1647 int q_type = (jpeg->mode == MXC_JPEG_DECODE) ? in mxc_jpeg_try_fmt_vid_cap()
1662 f->fmt.pix_mp.pixelformat = (jpeg->mode == MXC_JPEG_DECODE) ? in mxc_jpeg_try_fmt_vid_cap()
1673 struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg; in mxc_jpeg_try_fmt_vid_out() local
1674 struct device *dev = jpeg->dev; in mxc_jpeg_try_fmt_vid_out()
1678 int q_type = (jpeg->mode == MXC_JPEG_ENCODE) ? in mxc_jpeg_try_fmt_vid_out()
1693 f->fmt.pix_mp.pixelformat = (jpeg->mode == MXC_JPEG_ENCODE) ? in mxc_jpeg_try_fmt_vid_out()
1706 struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg; in mxc_jpeg_s_fmt() local
1716 v4l2_err(&jpeg->v4l2_dev, "queue busy\n"); in mxc_jpeg_s_fmt()
1726 if (jpeg->mode == MXC_JPEG_DECODE) { in mxc_jpeg_s_fmt()
1792 struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg; in mxc_jpeg_g_fmt_vid() local
1793 struct device *dev = jpeg->dev; in mxc_jpeg_g_fmt_vid()
1926 static void mxc_jpeg_detach_pm_domains(struct mxc_jpeg_dev *jpeg) in mxc_jpeg_detach_pm_domains() argument
1930 for (i = 0; i < jpeg->num_domains; i++) { in mxc_jpeg_detach_pm_domains()
1931 if (jpeg->pd_link[i] && !IS_ERR(jpeg->pd_link[i])) in mxc_jpeg_detach_pm_domains()
1932 device_link_del(jpeg->pd_link[i]); in mxc_jpeg_detach_pm_domains()
1933 if (jpeg->pd_dev[i] && !IS_ERR(jpeg->pd_dev[i])) in mxc_jpeg_detach_pm_domains()
1934 dev_pm_domain_detach(jpeg->pd_dev[i], true); in mxc_jpeg_detach_pm_domains()
1935 jpeg->pd_dev[i] = NULL; in mxc_jpeg_detach_pm_domains()
1936 jpeg->pd_link[i] = NULL; in mxc_jpeg_detach_pm_domains()
1940 static int mxc_jpeg_attach_pm_domains(struct mxc_jpeg_dev *jpeg) in mxc_jpeg_attach_pm_domains() argument
1942 struct device *dev = jpeg->dev; in mxc_jpeg_attach_pm_domains()
1943 struct device_node *np = jpeg->pdev->dev.of_node; in mxc_jpeg_attach_pm_domains()
1947 jpeg->num_domains = of_count_phandle_with_args(np, "power-domains", in mxc_jpeg_attach_pm_domains()
1949 if (jpeg->num_domains < 0) { in mxc_jpeg_attach_pm_domains()
1951 return jpeg->num_domains; in mxc_jpeg_attach_pm_domains()
1954 jpeg->pd_dev = devm_kmalloc_array(dev, jpeg->num_domains, in mxc_jpeg_attach_pm_domains()
1955 sizeof(*jpeg->pd_dev), GFP_KERNEL); in mxc_jpeg_attach_pm_domains()
1956 if (!jpeg->pd_dev) in mxc_jpeg_attach_pm_domains()
1959 jpeg->pd_link = devm_kmalloc_array(dev, jpeg->num_domains, in mxc_jpeg_attach_pm_domains()
1960 sizeof(*jpeg->pd_link), GFP_KERNEL); in mxc_jpeg_attach_pm_domains()
1961 if (!jpeg->pd_link) in mxc_jpeg_attach_pm_domains()
1964 for (i = 0; i < jpeg->num_domains; i++) { in mxc_jpeg_attach_pm_domains()
1965 jpeg->pd_dev[i] = dev_pm_domain_attach_by_id(dev, i); in mxc_jpeg_attach_pm_domains()
1966 if (IS_ERR(jpeg->pd_dev[i])) { in mxc_jpeg_attach_pm_domains()
1967 ret = PTR_ERR(jpeg->pd_dev[i]); in mxc_jpeg_attach_pm_domains()
1971 jpeg->pd_link[i] = device_link_add(dev, jpeg->pd_dev[i], in mxc_jpeg_attach_pm_domains()
1974 if (!jpeg->pd_link[i]) { in mxc_jpeg_attach_pm_domains()
1982 mxc_jpeg_detach_pm_domains(jpeg); in mxc_jpeg_attach_pm_domains()
1988 struct mxc_jpeg_dev *jpeg; in mxc_jpeg_probe() local
1999 jpeg = devm_kzalloc(dev, sizeof(struct mxc_jpeg_dev), GFP_KERNEL); in mxc_jpeg_probe()
2000 if (!jpeg) in mxc_jpeg_probe()
2003 mutex_init(&jpeg->lock); in mxc_jpeg_probe()
2004 spin_lock_init(&jpeg->hw_lock); in mxc_jpeg_probe()
2012 jpeg->base_reg = devm_platform_ioremap_resource(pdev, 0); in mxc_jpeg_probe()
2013 if (IS_ERR(jpeg->base_reg)) in mxc_jpeg_probe()
2014 return PTR_ERR(jpeg->base_reg); in mxc_jpeg_probe()
2024 0, pdev->name, jpeg); in mxc_jpeg_probe()
2032 jpeg->pdev = pdev; in mxc_jpeg_probe()
2033 jpeg->dev = dev; in mxc_jpeg_probe()
2034 jpeg->mode = mode; in mxc_jpeg_probe()
2037 jpeg->clk_ipg = devm_clk_get(dev, "ipg"); in mxc_jpeg_probe()
2038 if (IS_ERR(jpeg->clk_ipg)) { in mxc_jpeg_probe()
2043 jpeg->clk_per = devm_clk_get(dev, "per"); in mxc_jpeg_probe()
2044 if (IS_ERR(jpeg->clk_per)) { in mxc_jpeg_probe()
2049 ret = mxc_jpeg_attach_pm_domains(jpeg); in mxc_jpeg_probe()
2056 ret = v4l2_device_register(dev, &jpeg->v4l2_dev); in mxc_jpeg_probe()
2061 jpeg->m2m_dev = v4l2_m2m_init(&mxc_jpeg_m2m_ops); in mxc_jpeg_probe()
2062 if (IS_ERR(jpeg->m2m_dev)) { in mxc_jpeg_probe()
2064 ret = PTR_ERR(jpeg->m2m_dev); in mxc_jpeg_probe()
2068 jpeg->dec_vdev = video_device_alloc(); in mxc_jpeg_probe()
2069 if (!jpeg->dec_vdev) { in mxc_jpeg_probe()
2075 snprintf(jpeg->dec_vdev->name, in mxc_jpeg_probe()
2076 sizeof(jpeg->dec_vdev->name), in mxc_jpeg_probe()
2079 snprintf(jpeg->dec_vdev->name, in mxc_jpeg_probe()
2080 sizeof(jpeg->dec_vdev->name), in mxc_jpeg_probe()
2083 jpeg->dec_vdev->fops = &mxc_jpeg_fops; in mxc_jpeg_probe()
2084 jpeg->dec_vdev->ioctl_ops = &mxc_jpeg_ioctl_ops; in mxc_jpeg_probe()
2085 jpeg->dec_vdev->minor = -1; in mxc_jpeg_probe()
2086 jpeg->dec_vdev->release = video_device_release; in mxc_jpeg_probe()
2087 jpeg->dec_vdev->lock = &jpeg->lock; /* lock for ioctl serialization */ in mxc_jpeg_probe()
2088 jpeg->dec_vdev->v4l2_dev = &jpeg->v4l2_dev; in mxc_jpeg_probe()
2089 jpeg->dec_vdev->vfl_dir = VFL_DIR_M2M; in mxc_jpeg_probe()
2090 jpeg->dec_vdev->device_caps = V4L2_CAP_STREAMING | in mxc_jpeg_probe()
2093 v4l2_disable_ioctl(jpeg->dec_vdev, VIDIOC_DECODER_CMD); in mxc_jpeg_probe()
2094 v4l2_disable_ioctl(jpeg->dec_vdev, VIDIOC_TRY_DECODER_CMD); in mxc_jpeg_probe()
2096 v4l2_disable_ioctl(jpeg->dec_vdev, VIDIOC_ENCODER_CMD); in mxc_jpeg_probe()
2097 v4l2_disable_ioctl(jpeg->dec_vdev, VIDIOC_TRY_ENCODER_CMD); in mxc_jpeg_probe()
2099 ret = video_register_device(jpeg->dec_vdev, VFL_TYPE_VIDEO, -1); in mxc_jpeg_probe()
2104 video_set_drvdata(jpeg->dec_vdev, jpeg); in mxc_jpeg_probe()
2106 v4l2_info(&jpeg->v4l2_dev, in mxc_jpeg_probe()
2108 jpeg->dec_vdev->num, VIDEO_MAJOR, in mxc_jpeg_probe()
2109 jpeg->dec_vdev->minor); in mxc_jpeg_probe()
2111 v4l2_info(&jpeg->v4l2_dev, in mxc_jpeg_probe()
2113 jpeg->dec_vdev->num, VIDEO_MAJOR, in mxc_jpeg_probe()
2114 jpeg->dec_vdev->minor); in mxc_jpeg_probe()
2116 platform_set_drvdata(pdev, jpeg); in mxc_jpeg_probe()
2122 video_device_release(jpeg->dec_vdev); in mxc_jpeg_probe()
2125 v4l2_m2m_release(jpeg->m2m_dev); in mxc_jpeg_probe()
2128 v4l2_device_unregister(&jpeg->v4l2_dev); in mxc_jpeg_probe()
2131 mxc_jpeg_detach_pm_domains(jpeg); in mxc_jpeg_probe()
2141 struct mxc_jpeg_dev *jpeg = dev_get_drvdata(dev); in mxc_jpeg_runtime_resume() local
2144 ret = clk_prepare_enable(jpeg->clk_ipg); in mxc_jpeg_runtime_resume()
2150 ret = clk_prepare_enable(jpeg->clk_per); in mxc_jpeg_runtime_resume()
2159 clk_disable_unprepare(jpeg->clk_ipg); in mxc_jpeg_runtime_resume()
2166 struct mxc_jpeg_dev *jpeg = dev_get_drvdata(dev); in mxc_jpeg_runtime_suspend() local
2168 clk_disable_unprepare(jpeg->clk_ipg); in mxc_jpeg_runtime_suspend()
2169 clk_disable_unprepare(jpeg->clk_per); in mxc_jpeg_runtime_suspend()
2183 struct mxc_jpeg_dev *jpeg = platform_get_drvdata(pdev); in mxc_jpeg_remove() local
2186 mxc_jpeg_free_slot_data(jpeg, slot); in mxc_jpeg_remove()
2189 video_unregister_device(jpeg->dec_vdev); in mxc_jpeg_remove()
2190 v4l2_m2m_release(jpeg->m2m_dev); in mxc_jpeg_remove()
2191 v4l2_device_unregister(&jpeg->v4l2_dev); in mxc_jpeg_remove()
2192 mxc_jpeg_detach_pm_domains(jpeg); in mxc_jpeg_remove()