Lines Matching refs:jpeg
618 switch (ctx->jpeg->variant->version) { in s5p_jpeg_to_user_subsampling()
790 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos4_jpeg_parse_decode_h_tbl() local
819 exynos4_jpeg_select_dec_h_tbl(jpeg->regs, c, in exynos4_jpeg_parse_decode_h_tbl()
827 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos4_jpeg_parse_huff_tbl() local
855 writel(word, jpeg->regs + in exynos4_jpeg_parse_huff_tbl()
869 writel(word, jpeg->regs + in exynos4_jpeg_parse_huff_tbl()
876 writel(word, jpeg->regs + in exynos4_jpeg_parse_huff_tbl()
886 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos4_jpeg_parse_decode_q_tbl() local
901 exynos4_jpeg_set_dec_components(jpeg->regs, components); in exynos4_jpeg_parse_decode_q_tbl()
911 exynos4_jpeg_select_dec_q_tbl(jpeg->regs, c, x); in exynos4_jpeg_parse_decode_q_tbl()
917 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos4_jpeg_parse_q_tbl() local
946 writel(word, jpeg->regs + in exynos4_jpeg_parse_q_tbl()
970 struct s5p_jpeg *jpeg = video_drvdata(file); in s5p_jpeg_open() local
980 if (mutex_lock_interruptible(&jpeg->lock)) { in s5p_jpeg_open()
991 ctx->jpeg = jpeg; in s5p_jpeg_open()
992 if (vfd == jpeg->vfd_encoder) { in s5p_jpeg_open()
1007 ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(jpeg->m2m_dev, ctx, queue_init); in s5p_jpeg_open()
1020 mutex_unlock(&jpeg->lock); in s5p_jpeg_open()
1026 mutex_unlock(&jpeg->lock); in s5p_jpeg_open()
1034 struct s5p_jpeg *jpeg = video_drvdata(file); in s5p_jpeg_release() local
1037 mutex_lock(&jpeg->lock); in s5p_jpeg_release()
1043 mutex_unlock(&jpeg->lock); in s5p_jpeg_release()
1270 unsigned int fmt_ver_flag = ctx->jpeg->variant->fmt_ver_flag; in enum_fmt()
1382 fmt->flags & ctx->jpeg->variant->fmt_ver_flag) { in s5p_jpeg_find_format()
1404 if (ctx->jpeg->variant->hw3250_compat) { in jpeg_bound_align_image()
1481 v4l2_err(&ctx->jpeg->v4l2_dev, in s5p_jpeg_try_fmt_vid_cap()
1487 if (!ctx->jpeg->variant->hw_ex4_compat || ctx->mode != S5P_JPEG_DECODE) in s5p_jpeg_try_fmt_vid_cap()
1538 v4l2_err(&ctx->jpeg->v4l2_dev, in s5p_jpeg_try_fmt_vid_out()
1593 v4l2_err(&ct->jpeg->v4l2_dev, "%s queue busy\n", __func__); in s5p_jpeg_s_fmt()
1610 if (ct->jpeg->variant->hw_ex4_compat && in s5p_jpeg_s_fmt()
1650 ct->jpeg->variant->hw3250_compat && in s5p_jpeg_s_fmt()
1830 if (ctx->jpeg->variant->hw3250_compat) in s5p_jpeg_s_selection()
1835 if (ctx->jpeg->variant->hw3250_compat) in s5p_jpeg_s_selection()
1845 struct s5p_jpeg *jpeg = ctx->jpeg; in s5p_jpeg_g_volatile_ctrl() local
1850 spin_lock_irqsave(&jpeg->slock, flags); in s5p_jpeg_g_volatile_ctrl()
1852 spin_unlock_irqrestore(&jpeg->slock, flags); in s5p_jpeg_g_volatile_ctrl()
1861 switch (ctx->jpeg->variant->version) { in s5p_jpeg_adjust_subs_ctrl()
1902 spin_lock_irqsave(&ctx->jpeg->slock, flags); in s5p_jpeg_try_ctrl()
1907 spin_unlock_irqrestore(&ctx->jpeg->slock, flags); in s5p_jpeg_try_ctrl()
1916 spin_lock_irqsave(&ctx->jpeg->slock, flags); in s5p_jpeg_s_ctrl()
1930 spin_unlock_irqrestore(&ctx->jpeg->slock, flags); in s5p_jpeg_s_ctrl()
1956 if (ctx->jpeg->variant->version == SJPEG_S5P) in s5p_jpeg_controls_create()
2021 struct s5p_jpeg *jpeg = ctx->jpeg; in s5p_jpeg_device_run() local
2025 spin_lock_irqsave(&ctx->jpeg->slock, flags); in s5p_jpeg_device_run()
2032 s5p_jpeg_reset(jpeg->regs); in s5p_jpeg_device_run()
2033 s5p_jpeg_poweron(jpeg->regs); in s5p_jpeg_device_run()
2034 s5p_jpeg_proc_mode(jpeg->regs, ctx->mode); in s5p_jpeg_device_run()
2037 s5p_jpeg_input_raw_mode(jpeg->regs, in s5p_jpeg_device_run()
2040 s5p_jpeg_input_raw_mode(jpeg->regs, in s5p_jpeg_device_run()
2042 s5p_jpeg_subsampling_mode(jpeg->regs, ctx->subsampling); in s5p_jpeg_device_run()
2043 s5p_jpeg_dri(jpeg->regs, ctx->restart_interval); in s5p_jpeg_device_run()
2044 s5p_jpeg_x(jpeg->regs, ctx->out_q.w); in s5p_jpeg_device_run()
2045 s5p_jpeg_y(jpeg->regs, ctx->out_q.h); in s5p_jpeg_device_run()
2046 s5p_jpeg_imgadr(jpeg->regs, src_addr); in s5p_jpeg_device_run()
2047 s5p_jpeg_jpgadr(jpeg->regs, dst_addr); in s5p_jpeg_device_run()
2050 s5p_jpeg_enc_stream_int(jpeg->regs, ctx->cap_q.size); in s5p_jpeg_device_run()
2053 s5p_jpeg_coef(jpeg->regs, 1, 1, S5P_JPEG_COEF11); in s5p_jpeg_device_run()
2054 s5p_jpeg_coef(jpeg->regs, 1, 2, S5P_JPEG_COEF12); in s5p_jpeg_device_run()
2055 s5p_jpeg_coef(jpeg->regs, 1, 3, S5P_JPEG_COEF13); in s5p_jpeg_device_run()
2056 s5p_jpeg_coef(jpeg->regs, 2, 1, S5P_JPEG_COEF21); in s5p_jpeg_device_run()
2057 s5p_jpeg_coef(jpeg->regs, 2, 2, S5P_JPEG_COEF22); in s5p_jpeg_device_run()
2058 s5p_jpeg_coef(jpeg->regs, 2, 3, S5P_JPEG_COEF23); in s5p_jpeg_device_run()
2059 s5p_jpeg_coef(jpeg->regs, 3, 1, S5P_JPEG_COEF31); in s5p_jpeg_device_run()
2060 s5p_jpeg_coef(jpeg->regs, 3, 2, S5P_JPEG_COEF32); in s5p_jpeg_device_run()
2061 s5p_jpeg_coef(jpeg->regs, 3, 3, S5P_JPEG_COEF33); in s5p_jpeg_device_run()
2067 s5p_jpeg_set_qtbl_lum(jpeg->regs, ctx->compr_quality); in s5p_jpeg_device_run()
2068 s5p_jpeg_set_qtbl_chr(jpeg->regs, ctx->compr_quality); in s5p_jpeg_device_run()
2070 s5p_jpeg_qtbl(jpeg->regs, 1, 0); in s5p_jpeg_device_run()
2072 s5p_jpeg_qtbl(jpeg->regs, 2, 1); in s5p_jpeg_device_run()
2073 s5p_jpeg_qtbl(jpeg->regs, 3, 1); in s5p_jpeg_device_run()
2076 s5p_jpeg_htbl_ac(jpeg->regs, 1); in s5p_jpeg_device_run()
2077 s5p_jpeg_htbl_dc(jpeg->regs, 1); in s5p_jpeg_device_run()
2078 s5p_jpeg_htbl_ac(jpeg->regs, 2); in s5p_jpeg_device_run()
2079 s5p_jpeg_htbl_dc(jpeg->regs, 2); in s5p_jpeg_device_run()
2080 s5p_jpeg_htbl_ac(jpeg->regs, 3); in s5p_jpeg_device_run()
2081 s5p_jpeg_htbl_dc(jpeg->regs, 3); in s5p_jpeg_device_run()
2083 s5p_jpeg_rst_int_enable(jpeg->regs, true); in s5p_jpeg_device_run()
2084 s5p_jpeg_data_num_int_enable(jpeg->regs, true); in s5p_jpeg_device_run()
2085 s5p_jpeg_final_mcu_num_int_enable(jpeg->regs, true); in s5p_jpeg_device_run()
2087 s5p_jpeg_outform_raw(jpeg->regs, S5P_JPEG_RAW_OUT_422); in s5p_jpeg_device_run()
2089 s5p_jpeg_outform_raw(jpeg->regs, S5P_JPEG_RAW_OUT_420); in s5p_jpeg_device_run()
2090 s5p_jpeg_jpgadr(jpeg->regs, src_addr); in s5p_jpeg_device_run()
2091 s5p_jpeg_imgadr(jpeg->regs, dst_addr); in s5p_jpeg_device_run()
2094 s5p_jpeg_start(jpeg->regs); in s5p_jpeg_device_run()
2096 spin_unlock_irqrestore(&ctx->jpeg->slock, flags); in s5p_jpeg_device_run()
2101 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos4_jpeg_set_img_addr() local
2134 exynos4_jpeg_set_frame_buf_address(jpeg->regs, &jpeg_addr); in exynos4_jpeg_set_img_addr()
2139 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos4_jpeg_set_jpeg_addr() local
2149 if (jpeg->variant->version == SJPEG_EXYNOS5433 && in exynos4_jpeg_set_jpeg_addr()
2152 exynos4_jpeg_set_stream_buf_address(jpeg->regs, jpeg_addr); in exynos4_jpeg_set_jpeg_addr()
2182 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos4_jpeg_device_run() local
2186 spin_lock_irqsave(&jpeg->slock, flags); in exynos4_jpeg_device_run()
2189 exynos4_jpeg_sw_reset(jpeg->regs); in exynos4_jpeg_device_run()
2190 exynos4_jpeg_set_interrupt(jpeg->regs, jpeg->variant->version); in exynos4_jpeg_device_run()
2191 exynos4_jpeg_set_huf_table_enable(jpeg->regs, 1); in exynos4_jpeg_device_run()
2193 exynos4_jpeg_set_huff_tbl(jpeg->regs); in exynos4_jpeg_device_run()
2199 exynos4_jpeg_set_qtbl_lum(jpeg->regs, ctx->compr_quality); in exynos4_jpeg_device_run()
2200 exynos4_jpeg_set_qtbl_chr(jpeg->regs, ctx->compr_quality); in exynos4_jpeg_device_run()
2202 exynos4_jpeg_set_encode_tbl_select(jpeg->regs, in exynos4_jpeg_device_run()
2204 exynos4_jpeg_set_stream_size(jpeg->regs, ctx->cap_q.w, in exynos4_jpeg_device_run()
2207 if (ctx->jpeg->variant->version == SJPEG_EXYNOS4) { in exynos4_jpeg_device_run()
2208 exynos4_jpeg_set_enc_out_fmt(jpeg->regs, in exynos4_jpeg_device_run()
2210 exynos4_jpeg_set_img_fmt(jpeg->regs, in exynos4_jpeg_device_run()
2213 exynos5433_jpeg_set_enc_out_fmt(jpeg->regs, in exynos4_jpeg_device_run()
2215 exynos5433_jpeg_set_img_fmt(jpeg->regs, in exynos4_jpeg_device_run()
2220 exynos4_jpeg_set_encode_hoff_cnt(jpeg->regs, in exynos4_jpeg_device_run()
2223 exynos4_jpeg_sw_reset(jpeg->regs); in exynos4_jpeg_device_run()
2224 exynos4_jpeg_set_interrupt(jpeg->regs, in exynos4_jpeg_device_run()
2225 jpeg->variant->version); in exynos4_jpeg_device_run()
2229 if (jpeg->variant->version == SJPEG_EXYNOS5433) { in exynos4_jpeg_device_run()
2236 exynos4_jpeg_set_huf_table_enable(jpeg->regs, 1); in exynos4_jpeg_device_run()
2238 exynos4_jpeg_set_stream_size(jpeg->regs, ctx->cap_q.w, in exynos4_jpeg_device_run()
2240 exynos5433_jpeg_set_enc_out_fmt(jpeg->regs, in exynos4_jpeg_device_run()
2242 exynos5433_jpeg_set_img_fmt(jpeg->regs, in exynos4_jpeg_device_run()
2246 exynos4_jpeg_set_img_fmt(jpeg->regs, in exynos4_jpeg_device_run()
2251 exynos4_jpeg_set_dec_bitstream_size(jpeg->regs, bitstream_size); in exynos4_jpeg_device_run()
2254 exynos4_jpeg_set_enc_dec_mode(jpeg->regs, ctx->mode); in exynos4_jpeg_device_run()
2256 spin_unlock_irqrestore(&jpeg->slock, flags); in exynos4_jpeg_device_run()
2261 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos3250_jpeg_set_img_addr() local
2289 exynos3250_jpeg_imgadr(jpeg->regs, &jpeg_addr); in exynos3250_jpeg_set_img_addr()
2294 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos3250_jpeg_set_jpeg_addr() local
2304 exynos3250_jpeg_jpgadr(jpeg->regs, jpeg_addr); in exynos3250_jpeg_set_jpeg_addr()
2310 struct s5p_jpeg *jpeg = ctx->jpeg; in exynos3250_jpeg_device_run() local
2313 spin_lock_irqsave(&ctx->jpeg->slock, flags); in exynos3250_jpeg_device_run()
2315 exynos3250_jpeg_reset(jpeg->regs); in exynos3250_jpeg_device_run()
2316 exynos3250_jpeg_set_dma_num(jpeg->regs); in exynos3250_jpeg_device_run()
2317 exynos3250_jpeg_poweron(jpeg->regs); in exynos3250_jpeg_device_run()
2318 exynos3250_jpeg_clk_set(jpeg->regs); in exynos3250_jpeg_device_run()
2319 exynos3250_jpeg_proc_mode(jpeg->regs, ctx->mode); in exynos3250_jpeg_device_run()
2322 exynos3250_jpeg_input_raw_fmt(jpeg->regs, in exynos3250_jpeg_device_run()
2324 exynos3250_jpeg_dri(jpeg->regs, ctx->restart_interval); in exynos3250_jpeg_device_run()
2330 s5p_jpeg_set_qtbl_lum(jpeg->regs, ctx->compr_quality); in exynos3250_jpeg_device_run()
2331 s5p_jpeg_set_qtbl_chr(jpeg->regs, ctx->compr_quality); in exynos3250_jpeg_device_run()
2333 exynos3250_jpeg_qtbl(jpeg->regs, 1, 0); in exynos3250_jpeg_device_run()
2335 exynos3250_jpeg_qtbl(jpeg->regs, 2, 1); in exynos3250_jpeg_device_run()
2336 exynos3250_jpeg_qtbl(jpeg->regs, 3, 1); in exynos3250_jpeg_device_run()
2341 if (jpeg->variant->htbl_reinit) { in exynos3250_jpeg_device_run()
2342 s5p_jpeg_set_hdctbl(jpeg->regs); in exynos3250_jpeg_device_run()
2343 s5p_jpeg_set_hdctblg(jpeg->regs); in exynos3250_jpeg_device_run()
2344 s5p_jpeg_set_hactbl(jpeg->regs); in exynos3250_jpeg_device_run()
2345 s5p_jpeg_set_hactblg(jpeg->regs); in exynos3250_jpeg_device_run()
2349 exynos3250_jpeg_htbl_ac(jpeg->regs, 1); in exynos3250_jpeg_device_run()
2350 exynos3250_jpeg_htbl_dc(jpeg->regs, 1); in exynos3250_jpeg_device_run()
2351 exynos3250_jpeg_htbl_ac(jpeg->regs, 2); in exynos3250_jpeg_device_run()
2352 exynos3250_jpeg_htbl_dc(jpeg->regs, 2); in exynos3250_jpeg_device_run()
2353 exynos3250_jpeg_htbl_ac(jpeg->regs, 3); in exynos3250_jpeg_device_run()
2354 exynos3250_jpeg_htbl_dc(jpeg->regs, 3); in exynos3250_jpeg_device_run()
2356 exynos3250_jpeg_set_x(jpeg->regs, ctx->crop_rect.width); in exynos3250_jpeg_device_run()
2357 exynos3250_jpeg_set_y(jpeg->regs, ctx->crop_rect.height); in exynos3250_jpeg_device_run()
2358 exynos3250_jpeg_stride(jpeg->regs, ctx->out_q.fmt->fourcc, in exynos3250_jpeg_device_run()
2360 exynos3250_jpeg_offset(jpeg->regs, ctx->crop_rect.left, in exynos3250_jpeg_device_run()
2364 exynos3250_jpeg_subsampling_mode(jpeg->regs, ctx->subsampling); in exynos3250_jpeg_device_run()
2367 exynos3250_jpeg_enc_stream_bound(jpeg->regs, ctx->cap_q.size); in exynos3250_jpeg_device_run()
2372 exynos3250_jpeg_set_y16(jpeg->regs, true); in exynos3250_jpeg_device_run()
2376 exynos3250_jpeg_stride(jpeg->regs, ctx->cap_q.fmt->fourcc, in exynos3250_jpeg_device_run()
2378 exynos3250_jpeg_offset(jpeg->regs, 0, 0); in exynos3250_jpeg_device_run()
2379 exynos3250_jpeg_dec_scaling_ratio(jpeg->regs, in exynos3250_jpeg_device_run()
2381 exynos3250_jpeg_dec_stream_size(jpeg->regs, ctx->out_q.size); in exynos3250_jpeg_device_run()
2382 exynos3250_jpeg_output_raw_fmt(jpeg->regs, in exynos3250_jpeg_device_run()
2386 exynos3250_jpeg_interrupts_enable(jpeg->regs); in exynos3250_jpeg_device_run()
2389 exynos3250_jpeg_coef(jpeg->regs, ctx->mode); in exynos3250_jpeg_device_run()
2391 exynos3250_jpeg_set_timer(jpeg->regs, EXYNOS3250_IRQ_TIMEOUT); in exynos3250_jpeg_device_run()
2392 jpeg->irq_status = 0; in exynos3250_jpeg_device_run()
2393 exynos3250_jpeg_start(jpeg->regs); in exynos3250_jpeg_device_run()
2395 spin_unlock_irqrestore(&ctx->jpeg->slock, flags); in exynos3250_jpeg_device_run()
2459 alloc_ctxs[0] = ctx->jpeg->alloc_ctx; in s5p_jpeg_queue_setup()
2529 ret = pm_runtime_get_sync(ctx->jpeg->dev); in s5p_jpeg_start_streaming()
2538 pm_runtime_put(ctx->jpeg->dev); in s5p_jpeg_stop_streaming()
2564 src_vq->lock = &ctx->jpeg->lock; in queue_init()
2577 dst_vq->lock = &ctx->jpeg->lock; in queue_init()
2590 struct s5p_jpeg *jpeg = dev_id; in s5p_jpeg_irq() local
2599 spin_lock(&jpeg->slock); in s5p_jpeg_irq()
2601 curr_ctx = v4l2_m2m_get_curr_priv(jpeg->m2m_dev); in s5p_jpeg_irq()
2607 enc_jpeg_too_large = s5p_jpeg_enc_stream_stat(jpeg->regs); in s5p_jpeg_irq()
2608 timer_elapsed = s5p_jpeg_timer_stat(jpeg->regs); in s5p_jpeg_irq()
2609 op_completed = s5p_jpeg_result_stat_ok(jpeg->regs); in s5p_jpeg_irq()
2612 s5p_jpeg_stream_stat_ok(jpeg->regs); in s5p_jpeg_irq()
2616 s5p_jpeg_clear_enc_stream_stat(jpeg->regs); in s5p_jpeg_irq()
2619 s5p_jpeg_clear_timer_stat(jpeg->regs); in s5p_jpeg_irq()
2623 payload_size = s5p_jpeg_compressed_size(jpeg->regs); in s5p_jpeg_irq()
2636 v4l2_m2m_job_finish(jpeg->m2m_dev, curr_ctx->fh.m2m_ctx); in s5p_jpeg_irq()
2638 curr_ctx->subsampling = s5p_jpeg_get_subsampling_mode(jpeg->regs); in s5p_jpeg_irq()
2639 spin_unlock(&jpeg->slock); in s5p_jpeg_irq()
2641 s5p_jpeg_clear_int(jpeg->regs); in s5p_jpeg_irq()
2650 struct s5p_jpeg *jpeg = priv; in exynos4_jpeg_irq() local
2654 spin_lock(&jpeg->slock); in exynos4_jpeg_irq()
2656 curr_ctx = v4l2_m2m_get_curr_priv(jpeg->m2m_dev); in exynos4_jpeg_irq()
2661 int_status = exynos4_jpeg_get_int_status(jpeg->regs); in exynos4_jpeg_irq()
2666 jpeg->irq_ret = ERR_PROT; in exynos4_jpeg_irq()
2669 jpeg->irq_ret = OK_ENC_OR_DEC; in exynos4_jpeg_irq()
2672 jpeg->irq_ret = ERR_DEC_INVALID_FORMAT; in exynos4_jpeg_irq()
2675 jpeg->irq_ret = ERR_MULTI_SCAN; in exynos4_jpeg_irq()
2678 jpeg->irq_ret = ERR_FRAME; in exynos4_jpeg_irq()
2681 jpeg->irq_ret = ERR_UNKNOWN; in exynos4_jpeg_irq()
2685 jpeg->irq_ret = ERR_UNKNOWN; in exynos4_jpeg_irq()
2688 if (jpeg->irq_ret == OK_ENC_OR_DEC) { in exynos4_jpeg_irq()
2690 payload_size = exynos4_jpeg_get_stream_size(jpeg->regs); in exynos4_jpeg_irq()
2701 v4l2_m2m_job_finish(jpeg->m2m_dev, curr_ctx->fh.m2m_ctx); in exynos4_jpeg_irq()
2702 if (jpeg->variant->version == SJPEG_EXYNOS4) in exynos4_jpeg_irq()
2703 curr_ctx->subsampling = exynos4_jpeg_get_frame_fmt(jpeg->regs); in exynos4_jpeg_irq()
2705 spin_unlock(&jpeg->slock); in exynos4_jpeg_irq()
2711 struct s5p_jpeg *jpeg = dev_id; in exynos3250_jpeg_irq() local
2719 spin_lock(&jpeg->slock); in exynos3250_jpeg_irq()
2721 irq_status = exynos3250_jpeg_get_timer_status(jpeg->regs); in exynos3250_jpeg_irq()
2723 exynos3250_jpeg_clear_timer_status(jpeg->regs); in exynos3250_jpeg_irq()
2725 dev_err(jpeg->dev, "Interrupt timeout occurred.\n"); in exynos3250_jpeg_irq()
2728 irq_status = exynos3250_jpeg_get_int_status(jpeg->regs); in exynos3250_jpeg_irq()
2729 exynos3250_jpeg_clear_int_status(jpeg->regs, irq_status); in exynos3250_jpeg_irq()
2731 jpeg->irq_status |= irq_status; in exynos3250_jpeg_irq()
2733 curr_ctx = v4l2_m2m_get_curr_priv(jpeg->m2m_dev); in exynos3250_jpeg_irq()
2740 exynos3250_jpeg_rstart(jpeg->regs); in exynos3250_jpeg_irq()
2744 if (jpeg->irq_status & (EXYNOS3250_JPEG_DONE | in exynos3250_jpeg_irq()
2748 payload_size = exynos3250_jpeg_compressed_size(jpeg->regs); in exynos3250_jpeg_irq()
2764 v4l2_m2m_job_finish(jpeg->m2m_dev, curr_ctx->fh.m2m_ctx); in exynos3250_jpeg_irq()
2767 exynos3250_jpeg_get_subsampling_mode(jpeg->regs); in exynos3250_jpeg_irq()
2769 spin_unlock(&jpeg->slock); in exynos3250_jpeg_irq()
2783 struct s5p_jpeg *jpeg; in s5p_jpeg_probe() local
2788 jpeg = devm_kzalloc(&pdev->dev, sizeof(struct s5p_jpeg), GFP_KERNEL); in s5p_jpeg_probe()
2789 if (!jpeg) in s5p_jpeg_probe()
2792 jpeg->variant = jpeg_get_drv_data(&pdev->dev); in s5p_jpeg_probe()
2794 mutex_init(&jpeg->lock); in s5p_jpeg_probe()
2795 spin_lock_init(&jpeg->slock); in s5p_jpeg_probe()
2796 jpeg->dev = &pdev->dev; in s5p_jpeg_probe()
2801 jpeg->regs = devm_ioremap_resource(&pdev->dev, res); in s5p_jpeg_probe()
2802 if (IS_ERR(jpeg->regs)) in s5p_jpeg_probe()
2803 return PTR_ERR(jpeg->regs); in s5p_jpeg_probe()
2806 jpeg->irq = ret = platform_get_irq(pdev, 0); in s5p_jpeg_probe()
2812 ret = devm_request_irq(&pdev->dev, jpeg->irq, jpeg->variant->jpeg_irq, in s5p_jpeg_probe()
2813 0, dev_name(&pdev->dev), jpeg); in s5p_jpeg_probe()
2815 dev_err(&pdev->dev, "cannot claim IRQ %d\n", jpeg->irq); in s5p_jpeg_probe()
2820 for (i = 0; i < jpeg->variant->num_clocks; i++) { in s5p_jpeg_probe()
2821 jpeg->clocks[i] = devm_clk_get(&pdev->dev, in s5p_jpeg_probe()
2822 jpeg->variant->clk_names[i]); in s5p_jpeg_probe()
2823 if (IS_ERR(jpeg->clocks[i])) { in s5p_jpeg_probe()
2825 jpeg->variant->clk_names[i]); in s5p_jpeg_probe()
2826 return PTR_ERR(jpeg->clocks[i]); in s5p_jpeg_probe()
2831 ret = v4l2_device_register(&pdev->dev, &jpeg->v4l2_dev); in s5p_jpeg_probe()
2838 jpeg->m2m_dev = v4l2_m2m_init(jpeg->variant->m2m_ops); in s5p_jpeg_probe()
2839 if (IS_ERR(jpeg->m2m_dev)) { in s5p_jpeg_probe()
2840 v4l2_err(&jpeg->v4l2_dev, "Failed to init mem2mem device\n"); in s5p_jpeg_probe()
2841 ret = PTR_ERR(jpeg->m2m_dev); in s5p_jpeg_probe()
2845 jpeg->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev); in s5p_jpeg_probe()
2846 if (IS_ERR(jpeg->alloc_ctx)) { in s5p_jpeg_probe()
2847 v4l2_err(&jpeg->v4l2_dev, "Failed to init memory allocator\n"); in s5p_jpeg_probe()
2848 ret = PTR_ERR(jpeg->alloc_ctx); in s5p_jpeg_probe()
2853 jpeg->vfd_encoder = video_device_alloc(); in s5p_jpeg_probe()
2854 if (!jpeg->vfd_encoder) { in s5p_jpeg_probe()
2855 v4l2_err(&jpeg->v4l2_dev, "Failed to allocate video device\n"); in s5p_jpeg_probe()
2859 snprintf(jpeg->vfd_encoder->name, sizeof(jpeg->vfd_encoder->name), in s5p_jpeg_probe()
2861 jpeg->vfd_encoder->fops = &s5p_jpeg_fops; in s5p_jpeg_probe()
2862 jpeg->vfd_encoder->ioctl_ops = &s5p_jpeg_ioctl_ops; in s5p_jpeg_probe()
2863 jpeg->vfd_encoder->minor = -1; in s5p_jpeg_probe()
2864 jpeg->vfd_encoder->release = video_device_release; in s5p_jpeg_probe()
2865 jpeg->vfd_encoder->lock = &jpeg->lock; in s5p_jpeg_probe()
2866 jpeg->vfd_encoder->v4l2_dev = &jpeg->v4l2_dev; in s5p_jpeg_probe()
2867 jpeg->vfd_encoder->vfl_dir = VFL_DIR_M2M; in s5p_jpeg_probe()
2869 ret = video_register_device(jpeg->vfd_encoder, VFL_TYPE_GRABBER, -1); in s5p_jpeg_probe()
2871 v4l2_err(&jpeg->v4l2_dev, "Failed to register video device\n"); in s5p_jpeg_probe()
2872 video_device_release(jpeg->vfd_encoder); in s5p_jpeg_probe()
2876 video_set_drvdata(jpeg->vfd_encoder, jpeg); in s5p_jpeg_probe()
2877 v4l2_info(&jpeg->v4l2_dev, in s5p_jpeg_probe()
2879 jpeg->vfd_encoder->num); in s5p_jpeg_probe()
2882 jpeg->vfd_decoder = video_device_alloc(); in s5p_jpeg_probe()
2883 if (!jpeg->vfd_decoder) { in s5p_jpeg_probe()
2884 v4l2_err(&jpeg->v4l2_dev, "Failed to allocate video device\n"); in s5p_jpeg_probe()
2888 snprintf(jpeg->vfd_decoder->name, sizeof(jpeg->vfd_decoder->name), in s5p_jpeg_probe()
2890 jpeg->vfd_decoder->fops = &s5p_jpeg_fops; in s5p_jpeg_probe()
2891 jpeg->vfd_decoder->ioctl_ops = &s5p_jpeg_ioctl_ops; in s5p_jpeg_probe()
2892 jpeg->vfd_decoder->minor = -1; in s5p_jpeg_probe()
2893 jpeg->vfd_decoder->release = video_device_release; in s5p_jpeg_probe()
2894 jpeg->vfd_decoder->lock = &jpeg->lock; in s5p_jpeg_probe()
2895 jpeg->vfd_decoder->v4l2_dev = &jpeg->v4l2_dev; in s5p_jpeg_probe()
2896 jpeg->vfd_decoder->vfl_dir = VFL_DIR_M2M; in s5p_jpeg_probe()
2898 ret = video_register_device(jpeg->vfd_decoder, VFL_TYPE_GRABBER, -1); in s5p_jpeg_probe()
2900 v4l2_err(&jpeg->v4l2_dev, "Failed to register video device\n"); in s5p_jpeg_probe()
2901 video_device_release(jpeg->vfd_decoder); in s5p_jpeg_probe()
2905 video_set_drvdata(jpeg->vfd_decoder, jpeg); in s5p_jpeg_probe()
2906 v4l2_info(&jpeg->v4l2_dev, in s5p_jpeg_probe()
2908 jpeg->vfd_decoder->num); in s5p_jpeg_probe()
2911 platform_set_drvdata(pdev, jpeg); in s5p_jpeg_probe()
2915 v4l2_info(&jpeg->v4l2_dev, "Samsung S5P JPEG codec\n"); in s5p_jpeg_probe()
2920 video_unregister_device(jpeg->vfd_encoder); in s5p_jpeg_probe()
2923 vb2_dma_contig_cleanup_ctx(jpeg->alloc_ctx); in s5p_jpeg_probe()
2926 v4l2_m2m_release(jpeg->m2m_dev); in s5p_jpeg_probe()
2929 v4l2_device_unregister(&jpeg->v4l2_dev); in s5p_jpeg_probe()
2936 struct s5p_jpeg *jpeg = platform_get_drvdata(pdev); in s5p_jpeg_remove() local
2939 pm_runtime_disable(jpeg->dev); in s5p_jpeg_remove()
2941 video_unregister_device(jpeg->vfd_decoder); in s5p_jpeg_remove()
2942 video_unregister_device(jpeg->vfd_encoder); in s5p_jpeg_remove()
2943 vb2_dma_contig_cleanup_ctx(jpeg->alloc_ctx); in s5p_jpeg_remove()
2944 v4l2_m2m_release(jpeg->m2m_dev); in s5p_jpeg_remove()
2945 v4l2_device_unregister(&jpeg->v4l2_dev); in s5p_jpeg_remove()
2948 for (i = jpeg->variant->num_clocks - 1; i >= 0; i--) in s5p_jpeg_remove()
2949 clk_disable_unprepare(jpeg->clocks[i]); in s5p_jpeg_remove()
2958 struct s5p_jpeg *jpeg = dev_get_drvdata(dev); in s5p_jpeg_runtime_suspend() local
2961 for (i = jpeg->variant->num_clocks - 1; i >= 0; i--) in s5p_jpeg_runtime_suspend()
2962 clk_disable_unprepare(jpeg->clocks[i]); in s5p_jpeg_runtime_suspend()
2969 struct s5p_jpeg *jpeg = dev_get_drvdata(dev); in s5p_jpeg_runtime_resume() local
2973 for (i = 0; i < jpeg->variant->num_clocks; i++) { in s5p_jpeg_runtime_resume()
2974 ret = clk_prepare_enable(jpeg->clocks[i]); in s5p_jpeg_runtime_resume()
2977 clk_disable_unprepare(jpeg->clocks[i]); in s5p_jpeg_runtime_resume()
2982 spin_lock_irqsave(&jpeg->slock, flags); in s5p_jpeg_runtime_resume()
2992 if (!jpeg->variant->htbl_reinit) { in s5p_jpeg_runtime_resume()
2993 s5p_jpeg_set_hdctbl(jpeg->regs); in s5p_jpeg_runtime_resume()
2994 s5p_jpeg_set_hdctblg(jpeg->regs); in s5p_jpeg_runtime_resume()
2995 s5p_jpeg_set_hactbl(jpeg->regs); in s5p_jpeg_runtime_resume()
2996 s5p_jpeg_set_hactblg(jpeg->regs); in s5p_jpeg_runtime_resume()
2999 spin_unlock_irqrestore(&jpeg->slock, flags); in s5p_jpeg_runtime_resume()