Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / drivers / media / platform / imagination / e5010-jpeg-enc.h
blob71f49ead68980c83fd81b19fd63d9abd47abef64
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3 * Imagination E5010 JPEG Encoder driver.
5 * Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
7 * Author: David Huang <d-huang@ti.com>
8 * Author: Devarsh Thakkar <devarsht@ti.com>
9 */
11 #include <media/v4l2-ctrls.h>
12 #include <media/v4l2-device.h>
13 #include <media/v4l2-fh.h>
15 #ifndef _E5010_JPEG_ENC_H
16 #define _E5010_JPEG_ENC_H
18 #define MAX_PLANES 2
19 #define HEADER_SIZE 0x025D
20 #define MIN_DIMENSION 64
21 #define MAX_DIMENSION 8192
22 #define DEFAULT_WIDTH 640
23 #define DEFAULT_HEIGHT 480
24 #define E5010_MODULE_NAME "e5010"
25 #define JPEG_MAX_BYTES_PER_PIXEL 2
27 /* JPEG marker definitions */
28 #define START_OF_IMAGE 0xFFD8
29 #define SOF_BASELINE_DCT 0xFFC0
30 #define END_OF_IMAGE 0xFFD9
31 #define START_OF_SCAN 0xFFDA
33 /* Definitions for the huffman table specification in the Marker segment */
34 #define DHT_MARKER 0xFFC4
35 #define LH_DC 0x001F
36 #define LH_AC 0x00B5
38 /* Definitions for the quantization table specification in the Marker segment */
39 #define DQT_MARKER 0xFFDB
40 #define ACMAX 0x03FF
41 #define DCMAX 0x07FF
43 /* Length and precision of the quantization table parameters */
44 #define LQPQ 0x00430
45 #define QMAX 255
47 /* Misc JPEG header definitions */
48 #define UC_NUM_COMP 3
49 #define PRECISION 8
50 #define HORZ_SAMPLING_FACTOR (2 << 4)
51 #define VERT_SAMPLING_FACTOR_422 1
52 #define VERT_SAMPLING_FACTOR_420 2
53 #define COMPONENTS_IN_SCAN 3
54 #define PELS_IN_BLOCK 64
56 /* Used for Qp table generation */
57 #define LUMINOSITY 10
58 #define CONTRAST 1
59 #define INCREASE 2
60 #define QP_TABLE_SIZE (8 * 8)
61 #define QP_TABLE_FIELD_OFFSET 0x04
64 * vb2 queue structure
65 * contains queue data information
67 * @fmt: format info
68 * @width: frame width
69 * @height: frame height
70 * @bytesperline: bytes per line in memory
71 * @size_image: image size in memory
73 struct e5010_q_data {
74 struct e5010_fmt *fmt;
75 u32 width;
76 u32 height;
77 u32 width_adjusted;
78 u32 height_adjusted;
79 u32 sizeimage[MAX_PLANES];
80 u32 bytesperline[MAX_PLANES];
81 u32 sequence;
82 struct v4l2_rect crop;
83 bool crop_set;
87 * Driver device structure
88 * Holds all memory handles and global parameters
89 * Shared by all instances
91 struct e5010_dev {
92 struct device *dev;
93 struct v4l2_device v4l2_dev;
94 struct v4l2_m2m_dev *m2m_dev;
95 struct video_device *vdev;
96 void __iomem *core_base;
97 void __iomem *mmu_base;
98 struct clk *clk;
99 struct e5010_context *last_context_run;
100 /* Protect access to device data */
101 struct mutex mutex;
102 /* Protect access to hardware*/
103 spinlock_t hw_lock;
107 * Driver context structure
108 * One of these exists for every m2m context
109 * Holds context specific data
111 struct e5010_context {
112 struct v4l2_fh fh;
113 struct e5010_dev *e5010;
114 struct e5010_q_data out_queue;
115 struct e5010_q_data cap_queue;
116 int quality;
117 bool update_qp;
118 struct v4l2_ctrl_handler ctrl_handler;
119 u8 luma_qp[QP_TABLE_SIZE];
120 u8 chroma_qp[QP_TABLE_SIZE];
124 * Buffer structure
125 * Contains info for all buffers
127 struct e5010_buffer {
128 struct v4l2_m2m_buffer buffer;
131 enum {
132 CHROMA_ORDER_CB_CR = 0, //UV ordering
133 CHROMA_ORDER_CR_CB = 1, //VU ordering
136 enum {
137 SUBSAMPLING_420 = 1,
138 SUBSAMPLING_422 = 2,
142 * e5010 format structure
143 * contains format information
145 struct e5010_fmt {
146 u32 fourcc;
147 unsigned int num_planes;
148 unsigned int type;
149 u32 subsampling;
150 u32 chroma_order;
151 const struct v4l2_frmsize_stepwise frmsize;
155 * struct e5010_ctrl - contains info for each supported v4l2 control
157 struct e5010_ctrl {
158 unsigned int cid;
159 enum v4l2_ctrl_type type;
160 unsigned char name[32];
161 int minimum;
162 int maximum;
163 int step;
164 int default_value;
165 unsigned char compound;
168 #endif