140 lines
4.1 KiB
C
140 lines
4.1 KiB
C
/*
|
|
* Copyright (c) 2016 MediaTek Inc.
|
|
* Author: Ming Hsiu Tsai <minghsiu.tsai@mediatek.com>
|
|
* Rick Chang <rick.chang@mediatek.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.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#ifndef _MTK_JPEG_CORE_H
|
|
#define _MTK_JPEG_CORE_H
|
|
|
|
#include <linux/interrupt.h>
|
|
#include <media/v4l2-ctrls.h>
|
|
#include <media/v4l2-device.h>
|
|
#include <media/v4l2-fh.h>
|
|
|
|
#define MTK_JPEG_NAME "mtk-jpeg"
|
|
|
|
#define MTK_JPEG_FMT_FLAG_DEC_OUTPUT BIT(0)
|
|
#define MTK_JPEG_FMT_FLAG_DEC_CAPTURE BIT(1)
|
|
|
|
#define MTK_JPEG_FMT_TYPE_OUTPUT 1
|
|
#define MTK_JPEG_FMT_TYPE_CAPTURE 2
|
|
|
|
#define MTK_JPEG_MIN_WIDTH 32
|
|
#define MTK_JPEG_MIN_HEIGHT 32
|
|
#define MTK_JPEG_MAX_WIDTH 8192
|
|
#define MTK_JPEG_MAX_HEIGHT 8192
|
|
|
|
#define MTK_JPEG_DEFAULT_SIZEIMAGE (1 * 1024 * 1024)
|
|
|
|
enum mtk_jpeg_ctx_state {
|
|
MTK_JPEG_INIT = 0,
|
|
MTK_JPEG_RUNNING,
|
|
MTK_JPEG_SOURCE_CHANGE,
|
|
};
|
|
|
|
/**
|
|
* struct mt_jpeg - JPEG IP abstraction
|
|
* @lock: the mutex protecting this structure
|
|
* @hw_lock: spinlock protecting the hw device resource
|
|
* @workqueue: decode work queue
|
|
* @dev: JPEG device
|
|
* @v4l2_dev: v4l2 device for mem2mem mode
|
|
* @m2m_dev: v4l2 mem2mem device data
|
|
* @alloc_ctx: videobuf2 memory allocator's context
|
|
* @dec_vdev: video device node for decoder mem2mem mode
|
|
* @dec_reg_base: JPEG registers mapping
|
|
* @clk_jdec: JPEG hw working clock
|
|
* @clk_jdec_smi: JPEG SMI bus clock
|
|
* @larb: SMI device
|
|
*/
|
|
struct mtk_jpeg_dev {
|
|
struct mutex lock;
|
|
spinlock_t hw_lock;
|
|
struct workqueue_struct *workqueue;
|
|
struct device *dev;
|
|
struct v4l2_device v4l2_dev;
|
|
struct v4l2_m2m_dev *m2m_dev;
|
|
void *alloc_ctx;
|
|
struct video_device *dec_vdev;
|
|
void __iomem *dec_reg_base;
|
|
struct clk *clk_jdec;
|
|
struct clk *clk_jdec_smi;
|
|
struct device *larb;
|
|
};
|
|
|
|
/**
|
|
* struct jpeg_fmt - driver's internal color format data
|
|
* @fourcc: the fourcc code, 0 if not applicable
|
|
* @h_sample: horizontal sample count of plane in 4 * 4 pixel image
|
|
* @v_sample: vertical sample count of plane in 4 * 4 pixel image
|
|
* @colplanes: number of color planes (1 for packed formats)
|
|
* @h_align: horizontal alignment order (align to 2^h_align)
|
|
* @v_align: vertical alignment order (align to 2^v_align)
|
|
* @flags: flags describing format applicability
|
|
*/
|
|
struct mtk_jpeg_fmt {
|
|
u32 fourcc;
|
|
int h_sample[VIDEO_MAX_PLANES];
|
|
int v_sample[VIDEO_MAX_PLANES];
|
|
int colplanes;
|
|
int h_align;
|
|
int v_align;
|
|
u32 flags;
|
|
};
|
|
|
|
/**
|
|
* mtk_jpeg_q_data - parameters of one queue
|
|
* @fmt: driver-specific format of this queue
|
|
* @w: image width
|
|
* @h: image height
|
|
* @bytesperline: distance in bytes between the leftmost pixels in two adjacent
|
|
* lines
|
|
* @sizeimage: image buffer size in bytes
|
|
*/
|
|
struct mtk_jpeg_q_data {
|
|
struct mtk_jpeg_fmt *fmt;
|
|
u32 w;
|
|
u32 h;
|
|
u32 bytesperline[VIDEO_MAX_PLANES];
|
|
u32 sizeimage[VIDEO_MAX_PLANES];
|
|
};
|
|
|
|
/**
|
|
* mtk_jpeg_ctx - the device context data
|
|
* @jpeg: JPEG IP device for this context
|
|
* @out_q: source (output) queue information
|
|
* @cap_q: destination (capture) queue queue information
|
|
* @fh: V4L2 file handle
|
|
* @dec_param parameters for HW decoding
|
|
* @state: state of the context
|
|
* @header_valid: set if header has been parsed and valid
|
|
* @colorspace: enum v4l2_colorspace; supplemental to pixelformat
|
|
* @ycbcr_enc: enum v4l2_ycbcr_encoding, Y'CbCr encoding
|
|
* @quantization: enum v4l2_quantization, colorspace quantization
|
|
* @xfer_func: enum v4l2_xfer_func, colorspace transfer function
|
|
*/
|
|
struct mtk_jpeg_ctx {
|
|
struct mtk_jpeg_dev *jpeg;
|
|
struct mtk_jpeg_q_data out_q;
|
|
struct mtk_jpeg_q_data cap_q;
|
|
struct v4l2_fh fh;
|
|
enum mtk_jpeg_ctx_state state;
|
|
|
|
enum v4l2_colorspace colorspace;
|
|
enum v4l2_ycbcr_encoding ycbcr_enc;
|
|
enum v4l2_quantization quantization;
|
|
enum v4l2_xfer_func xfer_func;
|
|
};
|
|
|
|
#endif /* _MTK_JPEG_CORE_H */
|