Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f7b62d9 authored by Jacek Anaszewski's avatar Jacek Anaszewski Committed by Mauro Carvalho Chehab
Browse files

[media] s5p-jpeg: Split jpeg-hw.h to jpeg-hw-s5p.c and jpeg-hw-s5p.c



Move function definitions from jpeg-hw.h to jpeg-hw-s5p.c,
add "s5p" prefix and put function declarations in the jpeg-hw-s5p.h.

Signed-off-by: default avatarJacek Anaszewski <j.anaszewski@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 5313ba66
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
s5p-jpeg-objs := jpeg-core.o
s5p-jpeg-objs := jpeg-core.o jpeg-hw-s5p.o
obj-$(CONFIG_VIDEO_SAMSUNG_S5P_JPEG) += s5p-jpeg.o
+51 −48
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@
#include <media/videobuf2-dma-contig.h>

#include "jpeg-core.h"
#include "jpeg-hw.h"
#include "jpeg-hw-s5p.h"

static struct s5p_jpeg_fmt formats_enc[] = {
	{
@@ -951,34 +951,36 @@ static void s5p_jpeg_device_run(void *priv)
	src_addr = vb2_dma_contig_plane_dma_addr(src_buf, 0);
	dst_addr = vb2_dma_contig_plane_dma_addr(dst_buf, 0);

	jpeg_reset(jpeg->regs);
	jpeg_poweron(jpeg->regs);
	jpeg_proc_mode(jpeg->regs, ctx->mode);
	s5p_jpeg_reset(jpeg->regs);
	s5p_jpeg_poweron(jpeg->regs);
	s5p_jpeg_proc_mode(jpeg->regs, ctx->mode);
	if (ctx->mode == S5P_JPEG_ENCODE) {
		if (ctx->out_q.fmt->fourcc == V4L2_PIX_FMT_RGB565)
			jpeg_input_raw_mode(jpeg->regs, S5P_JPEG_RAW_IN_565);
			s5p_jpeg_input_raw_mode(jpeg->regs,
							S5P_JPEG_RAW_IN_565);
		else
			jpeg_input_raw_mode(jpeg->regs, S5P_JPEG_RAW_IN_422);
		jpeg_subsampling_mode(jpeg->regs, ctx->subsampling);
		jpeg_dri(jpeg->regs, ctx->restart_interval);
		jpeg_x(jpeg->regs, ctx->out_q.w);
		jpeg_y(jpeg->regs, ctx->out_q.h);
		jpeg_imgadr(jpeg->regs, src_addr);
		jpeg_jpgadr(jpeg->regs, dst_addr);
			s5p_jpeg_input_raw_mode(jpeg->regs,
							S5P_JPEG_RAW_IN_422);
		s5p_jpeg_subsampling_mode(jpeg->regs, ctx->subsampling);
		s5p_jpeg_dri(jpeg->regs, ctx->restart_interval);
		s5p_jpeg_x(jpeg->regs, ctx->out_q.w);
		s5p_jpeg_y(jpeg->regs, ctx->out_q.h);
		s5p_jpeg_imgadr(jpeg->regs, src_addr);
		s5p_jpeg_jpgadr(jpeg->regs, dst_addr);

		/* ultimately comes from sizeimage from userspace */
		jpeg_enc_stream_int(jpeg->regs, ctx->cap_q.size);
		s5p_jpeg_enc_stream_int(jpeg->regs, ctx->cap_q.size);

		/* JPEG RGB to YCbCr conversion matrix */
		jpeg_coef(jpeg->regs, 1, 1, S5P_JPEG_COEF11);
		jpeg_coef(jpeg->regs, 1, 2, S5P_JPEG_COEF12);
		jpeg_coef(jpeg->regs, 1, 3, S5P_JPEG_COEF13);
		jpeg_coef(jpeg->regs, 2, 1, S5P_JPEG_COEF21);
		jpeg_coef(jpeg->regs, 2, 2, S5P_JPEG_COEF22);
		jpeg_coef(jpeg->regs, 2, 3, S5P_JPEG_COEF23);
		jpeg_coef(jpeg->regs, 3, 1, S5P_JPEG_COEF31);
		jpeg_coef(jpeg->regs, 3, 2, S5P_JPEG_COEF32);
		jpeg_coef(jpeg->regs, 3, 3, S5P_JPEG_COEF33);
		s5p_jpeg_coef(jpeg->regs, 1, 1, S5P_JPEG_COEF11);
		s5p_jpeg_coef(jpeg->regs, 1, 2, S5P_JPEG_COEF12);
		s5p_jpeg_coef(jpeg->regs, 1, 3, S5P_JPEG_COEF13);
		s5p_jpeg_coef(jpeg->regs, 2, 1, S5P_JPEG_COEF21);
		s5p_jpeg_coef(jpeg->regs, 2, 2, S5P_JPEG_COEF22);
		s5p_jpeg_coef(jpeg->regs, 2, 3, S5P_JPEG_COEF23);
		s5p_jpeg_coef(jpeg->regs, 3, 1, S5P_JPEG_COEF31);
		s5p_jpeg_coef(jpeg->regs, 3, 2, S5P_JPEG_COEF32);
		s5p_jpeg_coef(jpeg->regs, 3, 3, S5P_JPEG_COEF33);

		/*
		 * JPEG IP allows storing 4 quantization tables
@@ -987,31 +989,31 @@ static void s5p_jpeg_device_run(void *priv)
		s5p_jpeg_set_qtbl_lum(jpeg->regs, ctx->compr_quality);
		s5p_jpeg_set_qtbl_chr(jpeg->regs, ctx->compr_quality);
		/* use table 0 for Y */
		jpeg_qtbl(jpeg->regs, 1, 0);
		s5p_jpeg_qtbl(jpeg->regs, 1, 0);
		/* use table 1 for Cb and Cr*/
		jpeg_qtbl(jpeg->regs, 2, 1);
		jpeg_qtbl(jpeg->regs, 3, 1);
		s5p_jpeg_qtbl(jpeg->regs, 2, 1);
		s5p_jpeg_qtbl(jpeg->regs, 3, 1);

		/* Y, Cb, Cr use Huffman table 0 */
		jpeg_htbl_ac(jpeg->regs, 1);
		jpeg_htbl_dc(jpeg->regs, 1);
		jpeg_htbl_ac(jpeg->regs, 2);
		jpeg_htbl_dc(jpeg->regs, 2);
		jpeg_htbl_ac(jpeg->regs, 3);
		jpeg_htbl_dc(jpeg->regs, 3);
		s5p_jpeg_htbl_ac(jpeg->regs, 1);
		s5p_jpeg_htbl_dc(jpeg->regs, 1);
		s5p_jpeg_htbl_ac(jpeg->regs, 2);
		s5p_jpeg_htbl_dc(jpeg->regs, 2);
		s5p_jpeg_htbl_ac(jpeg->regs, 3);
		s5p_jpeg_htbl_dc(jpeg->regs, 3);
	} else { /* S5P_JPEG_DECODE */
		jpeg_rst_int_enable(jpeg->regs, true);
		jpeg_data_num_int_enable(jpeg->regs, true);
		jpeg_final_mcu_num_int_enable(jpeg->regs, true);
		s5p_jpeg_rst_int_enable(jpeg->regs, true);
		s5p_jpeg_data_num_int_enable(jpeg->regs, true);
		s5p_jpeg_final_mcu_num_int_enable(jpeg->regs, true);
		if (ctx->cap_q.fmt->fourcc == V4L2_PIX_FMT_YUYV)
			jpeg_outform_raw(jpeg->regs, S5P_JPEG_RAW_OUT_422);
			s5p_jpeg_outform_raw(jpeg->regs, S5P_JPEG_RAW_OUT_422);
		else
			jpeg_outform_raw(jpeg->regs, S5P_JPEG_RAW_OUT_420);
		jpeg_jpgadr(jpeg->regs, src_addr);
		jpeg_imgadr(jpeg->regs, dst_addr);
			s5p_jpeg_outform_raw(jpeg->regs, S5P_JPEG_RAW_OUT_420);
		s5p_jpeg_jpgadr(jpeg->regs, src_addr);
		s5p_jpeg_imgadr(jpeg->regs, dst_addr);
	}

	jpeg_start(jpeg->regs);
	s5p_jpeg_start(jpeg->regs);

	spin_unlock_irqrestore(&ctx->jpeg->slock, flags);
}
@@ -1203,22 +1205,23 @@ static irqreturn_t s5p_jpeg_irq(int irq, void *dev_id)
	dst_buf = v4l2_m2m_dst_buf_remove(curr_ctx->fh.m2m_ctx);

	if (curr_ctx->mode == S5P_JPEG_ENCODE)
		enc_jpeg_too_large = jpeg_enc_stream_stat(jpeg->regs);
	timer_elapsed = jpeg_timer_stat(jpeg->regs);
	op_completed = jpeg_result_stat_ok(jpeg->regs);
		enc_jpeg_too_large = s5p_jpeg_enc_stream_stat(jpeg->regs);
	timer_elapsed = s5p_jpeg_timer_stat(jpeg->regs);
	op_completed = s5p_jpeg_result_stat_ok(jpeg->regs);
	if (curr_ctx->mode == S5P_JPEG_DECODE)
		op_completed = op_completed && jpeg_stream_stat_ok(jpeg->regs);
		op_completed = op_completed &&
					s5p_jpeg_stream_stat_ok(jpeg->regs);

	if (enc_jpeg_too_large) {
		state = VB2_BUF_STATE_ERROR;
		jpeg_clear_enc_stream_stat(jpeg->regs);
		s5p_jpeg_clear_enc_stream_stat(jpeg->regs);
	} else if (timer_elapsed) {
		state = VB2_BUF_STATE_ERROR;
		jpeg_clear_timer_stat(jpeg->regs);
		s5p_jpeg_clear_timer_stat(jpeg->regs);
	} else if (!op_completed) {
		state = VB2_BUF_STATE_ERROR;
	} else {
		payload_size = jpeg_compressed_size(jpeg->regs);
		payload_size = s5p_jpeg_compressed_size(jpeg->regs);
	}

	dst_buf->v4l2_buf.timecode = src_buf->v4l2_buf.timecode;
@@ -1230,10 +1233,10 @@ static irqreturn_t s5p_jpeg_irq(int irq, void *dev_id)
	v4l2_m2m_buf_done(dst_buf, state);
	v4l2_m2m_job_finish(jpeg->m2m_dev, curr_ctx->fh.m2m_ctx);

	curr_ctx->subsampling = jpeg_get_subsampling_mode(jpeg->regs);
	curr_ctx->subsampling = s5p_jpeg_get_subsampling_mode(jpeg->regs);
	spin_unlock(&jpeg->slock);

	jpeg_clear_int(jpeg->regs);
	s5p_jpeg_clear_int(jpeg->regs);

	return IRQ_HANDLED;
}
+5 −0
Original line number Diff line number Diff line
@@ -42,10 +42,15 @@
#define EOI				0xd9
#define DHP				0xde

#define S5P_JPEG_ENCODE		0
#define S5P_JPEG_DECODE		1

/* Flags that indicate a format can be used for capture/output */
#define MEM2MEM_CAPTURE			(1 << 0)
#define MEM2MEM_OUTPUT			(1 << 1)



/**
 * struct s5p_jpeg - JPEG IP abstraction
 * @lock:		the mutex protecting this structure
+34 −48
Original line number Diff line number Diff line
@@ -9,27 +9,15 @@
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#ifndef JPEG_HW_H_
#define JPEG_HW_H_

#include <linux/io.h>
#include <linux/videodev2.h>

#include "jpeg-hw.h"
#include "jpeg-core.h"
#include "jpeg-regs.h"
#include "jpeg-hw-s5p.h"

#define S5P_JPEG_MIN_WIDTH		32
#define S5P_JPEG_MIN_HEIGHT		32
#define S5P_JPEG_MAX_WIDTH		8192
#define S5P_JPEG_MAX_HEIGHT		8192
#define S5P_JPEG_ENCODE			0
#define S5P_JPEG_DECODE			1
#define S5P_JPEG_RAW_IN_565		0
#define S5P_JPEG_RAW_IN_422		1
#define S5P_JPEG_RAW_OUT_422		0
#define S5P_JPEG_RAW_OUT_420		1

static inline void jpeg_reset(void __iomem *regs)
void s5p_jpeg_reset(void __iomem *regs)
{
	unsigned long reg;

@@ -42,12 +30,12 @@ static inline void jpeg_reset(void __iomem *regs)
	}
}

static inline void jpeg_poweron(void __iomem *regs)
void s5p_jpeg_poweron(void __iomem *regs)
{
	writel(S5P_POWER_ON, regs + S5P_JPGCLKCON);
}

static inline void jpeg_input_raw_mode(void __iomem *regs, unsigned long mode)
void s5p_jpeg_input_raw_mode(void __iomem *regs, unsigned long mode)
{
	unsigned long reg, m;

@@ -63,7 +51,7 @@ static inline void jpeg_input_raw_mode(void __iomem *regs, unsigned long mode)
	writel(reg, regs + S5P_JPGCMOD);
}

static inline void jpeg_input_raw_y16(void __iomem *regs, bool y16)
void s5p_jpeg_input_raw_y16(void __iomem *regs, bool y16)
{
	unsigned long reg;

@@ -75,7 +63,7 @@ static inline void jpeg_input_raw_y16(void __iomem *regs, bool y16)
	writel(reg, regs + S5P_JPGCMOD);
}

static inline void jpeg_proc_mode(void __iomem *regs, unsigned long mode)
void s5p_jpeg_proc_mode(void __iomem *regs, unsigned long mode)
{
	unsigned long reg, m;

@@ -90,7 +78,7 @@ static inline void jpeg_proc_mode(void __iomem *regs, unsigned long mode)
	writel(reg, regs + S5P_JPGMOD);
}

static inline void jpeg_subsampling_mode(void __iomem *regs, unsigned int mode)
void s5p_jpeg_subsampling_mode(void __iomem *regs, unsigned int mode)
{
	unsigned long reg, m;

@@ -105,12 +93,12 @@ static inline void jpeg_subsampling_mode(void __iomem *regs, unsigned int mode)
	writel(reg, regs + S5P_JPGMOD);
}

static inline unsigned int jpeg_get_subsampling_mode(void __iomem *regs)
unsigned int s5p_jpeg_get_subsampling_mode(void __iomem *regs)
{
	return readl(regs + S5P_JPGMOD) & S5P_SUBSAMPLING_MODE_MASK;
}

static inline void jpeg_dri(void __iomem *regs, unsigned int dri)
void s5p_jpeg_dri(void __iomem *regs, unsigned int dri)
{
	unsigned long reg;

@@ -125,7 +113,7 @@ static inline void jpeg_dri(void __iomem *regs, unsigned int dri)
	writel(reg, regs + S5P_JPGDRI_L);
}

static inline void jpeg_qtbl(void __iomem *regs, unsigned int t, unsigned int n)
void s5p_jpeg_qtbl(void __iomem *regs, unsigned int t, unsigned int n)
{
	unsigned long reg;

@@ -135,7 +123,7 @@ static inline void jpeg_qtbl(void __iomem *regs, unsigned int t, unsigned int n)
	writel(reg, regs + S5P_JPG_QTBL);
}

static inline void jpeg_htbl_ac(void __iomem *regs, unsigned int t)
void s5p_jpeg_htbl_ac(void __iomem *regs, unsigned int t)
{
	unsigned long reg;

@@ -146,7 +134,7 @@ static inline void jpeg_htbl_ac(void __iomem *regs, unsigned int t)
	writel(reg, regs + S5P_JPG_HTBL);
}

static inline void jpeg_htbl_dc(void __iomem *regs, unsigned int t)
void s5p_jpeg_htbl_dc(void __iomem *regs, unsigned int t)
{
	unsigned long reg;

@@ -157,7 +145,7 @@ static inline void jpeg_htbl_dc(void __iomem *regs, unsigned int t)
	writel(reg, regs + S5P_JPG_HTBL);
}

static inline void jpeg_y(void __iomem *regs, unsigned int y)
void s5p_jpeg_y(void __iomem *regs, unsigned int y)
{
	unsigned long reg;

@@ -172,7 +160,7 @@ static inline void jpeg_y(void __iomem *regs, unsigned int y)
	writel(reg, regs + S5P_JPGY_L);
}

static inline void jpeg_x(void __iomem *regs, unsigned int x)
void s5p_jpeg_x(void __iomem *regs, unsigned int x)
{
	unsigned long reg;

@@ -187,7 +175,7 @@ static inline void jpeg_x(void __iomem *regs, unsigned int x)
	writel(reg, regs + S5P_JPGX_L);
}

static inline void jpeg_rst_int_enable(void __iomem *regs, bool enable)
void s5p_jpeg_rst_int_enable(void __iomem *regs, bool enable)
{
	unsigned long reg;

@@ -198,7 +186,7 @@ static inline void jpeg_rst_int_enable(void __iomem *regs, bool enable)
	writel(reg, regs + S5P_JPGINTSE);
}

static inline void jpeg_data_num_int_enable(void __iomem *regs, bool enable)
void s5p_jpeg_data_num_int_enable(void __iomem *regs, bool enable)
{
	unsigned long reg;

@@ -209,7 +197,7 @@ static inline void jpeg_data_num_int_enable(void __iomem *regs, bool enable)
	writel(reg, regs + S5P_JPGINTSE);
}

static inline void jpeg_final_mcu_num_int_enable(void __iomem *regs, bool enbl)
void s5p_jpeg_final_mcu_num_int_enable(void __iomem *regs, bool enbl)
{
	unsigned long reg;

@@ -220,7 +208,7 @@ static inline void jpeg_final_mcu_num_int_enable(void __iomem *regs, bool enbl)
	writel(reg, regs + S5P_JPGINTSE);
}

static inline void jpeg_timer_enable(void __iomem *regs, unsigned long val)
void s5p_jpeg_timer_enable(void __iomem *regs, unsigned long val)
{
	unsigned long reg;

@@ -231,7 +219,7 @@ static inline void jpeg_timer_enable(void __iomem *regs, unsigned long val)
	writel(reg, regs + S5P_JPG_TIMER_SE);
}

static inline void jpeg_timer_disable(void __iomem *regs)
void s5p_jpeg_timer_disable(void __iomem *regs)
{
	unsigned long reg;

@@ -240,13 +228,13 @@ static inline void jpeg_timer_disable(void __iomem *regs)
	writel(reg, regs + S5P_JPG_TIMER_SE);
}

static inline int jpeg_timer_stat(void __iomem *regs)
int s5p_jpeg_timer_stat(void __iomem *regs)
{
	return (int)((readl(regs + S5P_JPG_TIMER_ST) & S5P_TIMER_INT_STAT_MASK)
		     >> S5P_TIMER_INT_STAT_SHIFT);
}

static inline void jpeg_clear_timer_stat(void __iomem *regs)
void s5p_jpeg_clear_timer_stat(void __iomem *regs)
{
	unsigned long reg;

@@ -255,7 +243,7 @@ static inline void jpeg_clear_timer_stat(void __iomem *regs)
	writel(reg, regs + S5P_JPG_TIMER_SE);
}

static inline void jpeg_enc_stream_int(void __iomem *regs, unsigned long size)
void s5p_jpeg_enc_stream_int(void __iomem *regs, unsigned long size)
{
	unsigned long reg;

@@ -266,13 +254,13 @@ static inline void jpeg_enc_stream_int(void __iomem *regs, unsigned long size)
	writel(reg, regs + S5P_JPG_ENC_STREAM_INTSE);
}

static inline int jpeg_enc_stream_stat(void __iomem *regs)
int s5p_jpeg_enc_stream_stat(void __iomem *regs)
{
	return (int)(readl(regs + S5P_JPG_ENC_STREAM_INTST) &
		     S5P_ENC_STREAM_INT_STAT_MASK);
}

static inline void jpeg_clear_enc_stream_stat(void __iomem *regs)
void s5p_jpeg_clear_enc_stream_stat(void __iomem *regs)
{
	unsigned long reg;

@@ -281,7 +269,7 @@ static inline void jpeg_clear_enc_stream_stat(void __iomem *regs)
	writel(reg, regs + S5P_JPG_ENC_STREAM_INTSE);
}

static inline void jpeg_outform_raw(void __iomem *regs, unsigned long format)
void s5p_jpeg_outform_raw(void __iomem *regs, unsigned long format)
{
	unsigned long reg, f;

@@ -296,17 +284,17 @@ static inline void jpeg_outform_raw(void __iomem *regs, unsigned long format)
	writel(reg, regs + S5P_JPG_OUTFORM);
}

static inline void jpeg_jpgadr(void __iomem *regs, unsigned long addr)
void s5p_jpeg_jpgadr(void __iomem *regs, unsigned long addr)
{
	writel(addr, regs + S5P_JPG_JPGADR);
}

static inline void jpeg_imgadr(void __iomem *regs, unsigned long addr)
void s5p_jpeg_imgadr(void __iomem *regs, unsigned long addr)
{
	writel(addr, regs + S5P_JPG_IMGADR);
}

static inline void jpeg_coef(void __iomem *regs, unsigned int i,
void s5p_jpeg_coef(void __iomem *regs, unsigned int i,
			     unsigned int j, unsigned int coef)
{
	unsigned long reg;
@@ -317,24 +305,24 @@ static inline void jpeg_coef(void __iomem *regs, unsigned int i,
	writel(reg, regs + S5P_JPG_COEF(i));
}

static inline void jpeg_start(void __iomem *regs)
void s5p_jpeg_start(void __iomem *regs)
{
	writel(1, regs + S5P_JSTART);
}

static inline int jpeg_result_stat_ok(void __iomem *regs)
int s5p_jpeg_result_stat_ok(void __iomem *regs)
{
	return (int)((readl(regs + S5P_JPGINTST) & S5P_RESULT_STAT_MASK)
		     >> S5P_RESULT_STAT_SHIFT);
}

static inline int jpeg_stream_stat_ok(void __iomem *regs)
int s5p_jpeg_stream_stat_ok(void __iomem *regs)
{
	return !(int)((readl(regs + S5P_JPGINTST) & S5P_STREAM_STAT_MASK)
		      >> S5P_STREAM_STAT_SHIFT);
}

static inline void jpeg_clear_int(void __iomem *regs)
void s5p_jpeg_clear_int(void __iomem *regs)
{
	unsigned long reg;

@@ -343,7 +331,7 @@ static inline void jpeg_clear_int(void __iomem *regs)
	reg = readl(regs + S5P_JPGOPR);
}

static inline unsigned int jpeg_compressed_size(void __iomem *regs)
unsigned int s5p_jpeg_compressed_size(void __iomem *regs)
{
	unsigned long jpeg_size = 0;

@@ -353,5 +341,3 @@ static inline unsigned int jpeg_compressed_size(void __iomem *regs)

	return (unsigned int)jpeg_size;
}

#endif /* JPEG_HW_H_ */
+63 −0
Original line number Diff line number Diff line
/* linux/drivers/media/platform/s5p-jpeg/jpeg-hw.h
 *
 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com
 *
 * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#ifndef JPEG_HW_S5P_H_
#define JPEG_HW_S5P_H_

#include <linux/io.h>
#include <linux/videodev2.h>

#include "jpeg-regs.h"

#define S5P_JPEG_MIN_WIDTH		32
#define S5P_JPEG_MIN_HEIGHT		32
#define S5P_JPEG_MAX_WIDTH		8192
#define S5P_JPEG_MAX_HEIGHT		8192
#define S5P_JPEG_RAW_IN_565		0
#define S5P_JPEG_RAW_IN_422		1
#define S5P_JPEG_RAW_OUT_422		0
#define S5P_JPEG_RAW_OUT_420		1

void s5p_jpeg_reset(void __iomem *regs);
void s5p_jpeg_poweron(void __iomem *regs);
void s5p_jpeg_input_raw_mode(void __iomem *regs, unsigned long mode);
void s5p_jpeg_input_raw_y16(void __iomem *regs, bool y16);
void s5p_jpeg_proc_mode(void __iomem *regs, unsigned long mode);
void s5p_jpeg_subsampling_mode(void __iomem *regs, unsigned int mode);
unsigned int s5p_jpeg_get_subsampling_mode(void __iomem *regs);
void s5p_jpeg_dri(void __iomem *regs, unsigned int dri);
void s5p_jpeg_qtbl(void __iomem *regs, unsigned int t, unsigned int n);
void s5p_jpeg_htbl_ac(void __iomem *regs, unsigned int t);
void s5p_jpeg_htbl_dc(void __iomem *regs, unsigned int t);
void s5p_jpeg_y(void __iomem *regs, unsigned int y);
void s5p_jpeg_x(void __iomem *regs, unsigned int x);
void s5p_jpeg_rst_int_enable(void __iomem *regs, bool enable);
void s5p_jpeg_data_num_int_enable(void __iomem *regs, bool enable);
void s5p_jpeg_final_mcu_num_int_enable(void __iomem *regs, bool enbl);
void s5p_jpeg_timer_enable(void __iomem *regs, unsigned long val);
void s5p_jpeg_timer_disable(void __iomem *regs);
int s5p_jpeg_timer_stat(void __iomem *regs);
void s5p_jpeg_clear_timer_stat(void __iomem *regs);
void s5p_jpeg_enc_stream_int(void __iomem *regs, unsigned long size);
int s5p_jpeg_enc_stream_stat(void __iomem *regs);
void s5p_jpeg_clear_enc_stream_stat(void __iomem *regs);
void s5p_jpeg_outform_raw(void __iomem *regs, unsigned long format);
void s5p_jpeg_jpgadr(void __iomem *regs, unsigned long addr);
void s5p_jpeg_imgadr(void __iomem *regs, unsigned long addr);
void s5p_jpeg_coef(void __iomem *regs, unsigned int i,
			     unsigned int j, unsigned int coef);
void s5p_jpeg_start(void __iomem *regs);
int s5p_jpeg_result_stat_ok(void __iomem *regs);
int s5p_jpeg_stream_stat_ok(void __iomem *regs);
void s5p_jpeg_clear_int(void __iomem *regs);
unsigned int s5p_jpeg_compressed_size(void __iomem *regs);

#endif /* JPEG_HW_S5P_H_ */