summaryrefslogtreecommitdiff
path: root/drivers/media/platform/imx8/mxc-jpeg.h
blob: 1365c5ee3ba5be207bf53148c85ed353d3432989 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
 * Copyright (C) 2017 Freescale Semiconductor, Inc. All Rights Reserved.
 */
/*
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fh.h>

#ifndef _MXC_JPEG_CORE_H
#define _MXC_JPEG_CORE_H

#define MXC_JPEG_M2M_NAME		"mxc-jpeg"
#define MXC_JPEG_NAME			"mxc-jpeg"
#define MXC_IN_FORMAT			0
#define MXC_OUT_FORMAT			1
#define MXC_JPEG_INIT			0
#define MXC_JPEG_RUNNING		1
#define MXC_JPEG_FMT_TYPE_ENC		0
#define MXC_JPEG_FMT_TYPE_RAW		1
#define MXC_JPEG_NUM_FORMATS		4
#define MXC_JPEG_MIN_HEIGHT		0x8
#define MXC_JPEG_MIN_WIDTH		0x8
#define MXC_JPEG_MAX_HEIGHT		0x2000
#define MXC_JPEG_MAX_WIDTH		0x2000
#define MXC_JPEG_DEFAULT_SIZEIMAGE	10000
#define MXC_JPEG_DECODE			0
#define MXC_JPEG_ENCODE			1
#define MXC_JPEG_ENC_CONF		1
#define MXC_JPEG_ENC_DONE		0
#define SOF0				0xC0
#define SOF2				0xC2
#define MXC_JPEG_ENC_CONF_DONE		1


/**
 * struct jpeg_fmt - driver's internal color format data
 * @name:	format description
 * @fourcc:	fourcc code, 0 if not applicable
 * @depth:	number of bits per pixel
 * @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 mxc_jpeg_fmt {
	char	*name;
	u32	fourcc;
	int	depth;
	int	colplanes;
	int	memplanes;
	int	h_align;
	int	v_align;
	int	subsampling;
	u32	flags;
};
struct mxc_jpeg_desc {
	u32 next_descpt_ptr;
	u32 buf_base0;
	u32 buf_base1;
	u32 line_pitch;
	u32 stm_bufbase;
	u32 stm_bufsize;
	u16 w;
	u16 h;
	u32 stm_ctrl;
} __packed;

struct mxc_jpeg_q_data {
	struct mxc_jpeg_fmt	*fmt;
	u32			sizeimage[1];
	u32			bytesperline[2];
	int w;
	int h;
	u32			stride;
};
struct mxc_jpeg_ctx {
	struct mxc_jpeg_dev		*mxc_jpeg;
	struct mxc_jpeg_q_data		out_q;
	struct mxc_jpeg_q_data		cap_q;
	struct v4l2_rect		crop_rect;
	unsigned long			state;
	struct v4l2_fh			fh;
	unsigned int			mode;
	unsigned int			enc_state;
};

struct mxc_jpeg_dev {
	spinlock_t				hw_lock;
	unsigned int				mode;
	struct mutex			lock;
	struct mutex			lock2;
	//wait_queue_head_t		irq_queue;
	bool					enc;
	bool					dec;
	struct clk				*clk;
	struct platform_device			*pdev;
	struct device				*dev;
	void __iomem				*base_reg;
	void __iomem				*enc_reg;
	struct v4l2_device			v4l2_dev;
	struct v4l2_m2m_dev			*m2m_dev;
	struct video_device			*dec_vdev;
	unsigned int				irq;
	int					id;

	struct mxc_jpeg_desc			*cfg_desc;
	dma_addr_t				cfg_handle;
};
#endif