media: staging: rkisp1: group declaration of similar functions together
[linux-2.6-microblaze.git] / drivers / staging / media / rkisp1 / rkisp1-common.h
1 /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
2 /*
3  * Rockchip ISP1 Driver - Common definitions
4  *
5  * Copyright (C) 2019 Collabora, Ltd.
6  *
7  * Based on Rockchip ISP1 driver by Rockchip Electronics Co., Ltd.
8  * Copyright (C) 2017 Rockchip Electronics Co., Ltd.
9  */
10
11 #ifndef _RKISP1_COMMON_H
12 #define _RKISP1_COMMON_H
13
14 #include <linux/clk.h>
15 #include <linux/mutex.h>
16 #include <media/media-device.h>
17 #include <media/media-entity.h>
18 #include <media/v4l2-ctrls.h>
19 #include <media/v4l2-device.h>
20 #include <media/videobuf2-v4l2.h>
21
22 #include "rkisp1-regs.h"
23 #include "uapi/rkisp1-config.h"
24
25 #define RKISP1_ISP_SD_SRC BIT(0)
26 #define RKISP1_ISP_SD_SINK BIT(1)
27
28 #define RKISP1_ISP_MAX_WIDTH            4032
29 #define RKISP1_ISP_MAX_HEIGHT           3024
30 #define RKISP1_ISP_MIN_WIDTH            32
31 #define RKISP1_ISP_MIN_HEIGHT           32
32
33 #define RKISP1_RSZ_MP_SRC_MAX_WIDTH             4416
34 #define RKISP1_RSZ_MP_SRC_MAX_HEIGHT            3312
35 #define RKISP1_RSZ_SP_SRC_MAX_WIDTH             1920
36 #define RKISP1_RSZ_SP_SRC_MAX_HEIGHT            1920
37 #define RKISP1_RSZ_SRC_MIN_WIDTH                32
38 #define RKISP1_RSZ_SRC_MIN_HEIGHT               16
39
40 #define RKISP1_DEFAULT_WIDTH            800
41 #define RKISP1_DEFAULT_HEIGHT           600
42
43 #define RKISP1_DRIVER_NAME      "rkisp1"
44 #define RKISP1_BUS_INFO         "platform:" RKISP1_DRIVER_NAME
45
46 #define RKISP1_MAX_BUS_CLK      8
47
48 #define RKISP1_STATS_MEAS_MASK          (RKISP1_CIF_ISP_AWB_DONE |      \
49                                          RKISP1_CIF_ISP_AFM_FIN |       \
50                                          RKISP1_CIF_ISP_EXP_END |       \
51                                          RKISP1_CIF_ISP_HIST_MEASURE_RDY)
52 enum rkisp1_rsz_pad {
53         RKISP1_RSZ_PAD_SINK,
54         RKISP1_RSZ_PAD_SRC,
55         RKISP1_RSZ_PAD_MAX
56 };
57
58 enum rkisp1_stream_id {
59         RKISP1_MAINPATH,
60         RKISP1_SELFPATH,
61 };
62
63 enum rkisp1_fmt_raw_pat_type {
64         RKISP1_RAW_RGGB = 0,
65         RKISP1_RAW_GRBG,
66         RKISP1_RAW_GBRG,
67         RKISP1_RAW_BGGR,
68 };
69
70 enum rkisp1_isp_pad {
71         RKISP1_ISP_PAD_SINK_VIDEO,
72         RKISP1_ISP_PAD_SINK_PARAMS,
73         RKISP1_ISP_PAD_SOURCE_VIDEO,
74         RKISP1_ISP_PAD_SOURCE_STATS,
75         RKISP1_ISP_PAD_MAX
76 };
77
78 /*
79  * struct rkisp1_sensor_async - Sensor information
80  * @mbus: media bus configuration
81  */
82 struct rkisp1_sensor_async {
83         struct v4l2_async_subdev asd;
84         unsigned int lanes;
85         enum v4l2_mbus_type mbus_type;
86         unsigned int mbus_flags;
87         struct v4l2_subdev *sd;
88         struct v4l2_ctrl *pixel_rate_ctrl;
89         struct phy *dphy;
90 };
91
92 /*
93  * struct rkisp1_isp - ISP sub-device
94  *
95  * See Cropping regions of ISP in rkisp1.c for details
96  * @sink_frm: input size, don't have to be equal to sensor size
97  * @sink_fmt: input format
98  * @sink_crop: crop for sink pad
99  * @src_fmt: output format
100  * @src_crop: output size
101  * @ops_lock: ops serialization
102  *
103  * @is_dphy_errctrl_disabled : if dphy errctrl is disabled (avoid endless interrupt)
104  * @frame_sequence: used to synchronize frame_id between video devices.
105  * @quantization: output quantization
106  */
107 struct rkisp1_isp {
108         struct v4l2_subdev sd;
109         struct media_pad pads[RKISP1_ISP_PAD_MAX];
110         struct v4l2_subdev_pad_config pad_cfg[RKISP1_ISP_PAD_MAX];
111         const struct rkisp1_isp_mbus_info *sink_fmt;
112         const struct rkisp1_isp_mbus_info *src_fmt;
113         struct mutex ops_lock;
114         bool is_dphy_errctrl_disabled;
115         atomic_t frame_sequence;
116 };
117
118 struct rkisp1_vdev_node {
119         struct vb2_queue buf_queue;
120         struct mutex vlock; /* ioctl serialization mutex */
121         struct video_device vdev;
122         struct media_pad pad;
123 };
124
125 struct rkisp1_buffer {
126         struct vb2_v4l2_buffer vb;
127         struct list_head queue;
128         union {
129                 u32 buff_addr[VIDEO_MAX_PLANES];
130                 void *vaddr;
131         };
132 };
133
134 struct rkisp1_dummy_buffer {
135         void *vaddr;
136         dma_addr_t dma_addr;
137         u32 size;
138 };
139
140 struct rkisp1_device;
141
142 /*
143  * struct rkisp1_capture - ISP capture video device
144  *
145  * @pix.fmt: buffer format
146  * @pix.info: pixel information
147  * @pix.cfg: pixel configuration
148  *
149  * @buf.lock: lock to protect buf_queue
150  * @buf.queue: queued buffer list
151  * @buf.dummy: dummy space to store dropped data
152  *
153  * rkisp1 use shadowsock registers, so it need two buffer at a time
154  * @buf.curr: the buffer used for current frame
155  * @buf.next: the buffer used for next frame
156  */
157 struct rkisp1_capture {
158         struct rkisp1_vdev_node vnode;
159         struct rkisp1_device *rkisp1;
160         enum rkisp1_stream_id id;
161         struct rkisp1_capture_ops *ops;
162         const struct rkisp1_capture_config *config;
163         bool is_streaming;
164         bool is_stopping;
165         wait_queue_head_t done;
166         unsigned int sp_y_stride;
167         struct {
168                 /* protects queue, curr and next */
169                 spinlock_t lock;
170                 struct list_head queue;
171                 struct rkisp1_dummy_buffer dummy;
172                 struct rkisp1_buffer *curr;
173                 struct rkisp1_buffer *next;
174         } buf;
175         struct {
176                 const struct rkisp1_capture_fmt_cfg *cfg;
177                 const struct v4l2_format_info *info;
178                 struct v4l2_pix_format_mplane fmt;
179         } pix;
180 };
181
182 /*
183  * struct rkisp1_stats - ISP Statistics device
184  *
185  * @lock: locks the buffer list 'stat' and 'is_streaming'
186  * @stat: stats buffer list
187  */
188 struct rkisp1_stats {
189         struct rkisp1_vdev_node vnode;
190         struct rkisp1_device *rkisp1;
191
192         spinlock_t lock; /* locks 'is_streaming', and 'stats' */
193         struct list_head stat;
194         struct v4l2_format vdev_fmt;
195         bool is_streaming;
196 };
197
198 /*
199  * struct rkisp1_params - ISP input parameters device
200  *
201  * @cur_params: Current ISP parameters
202  * @is_first_params: the first params should take effect immediately
203  */
204 struct rkisp1_params {
205         struct rkisp1_vdev_node vnode;
206         struct rkisp1_device *rkisp1;
207
208         spinlock_t config_lock;
209         struct list_head params;
210         struct rkisp1_params_cfg cur_params;
211         struct v4l2_format vdev_fmt;
212         bool is_streaming;
213         bool is_first_params;
214
215         enum v4l2_quantization quantization;
216         enum rkisp1_fmt_raw_pat_type raw_type;
217 };
218
219 struct rkisp1_resizer {
220         struct v4l2_subdev sd;
221         enum rkisp1_stream_id id;
222         struct rkisp1_device *rkisp1;
223         struct media_pad pads[RKISP1_RSZ_PAD_MAX];
224         struct v4l2_subdev_pad_config pad_cfg[RKISP1_RSZ_PAD_MAX];
225         const struct rkisp1_rsz_config *config;
226         enum v4l2_pixel_encoding pixel_enc;
227         struct mutex ops_lock;
228 };
229
230 struct rkisp1_debug {
231         struct dentry *debugfs_dir;
232         unsigned long data_loss;
233         unsigned long outform_size_error;
234         unsigned long img_stabilization_size_error;
235         unsigned long inform_size_error;
236         unsigned long mipi_error;
237         unsigned long stats_error;
238         unsigned long stop_timeout[2];
239         unsigned long frame_drop[2];
240 };
241
242 /*
243  * struct rkisp1_device - ISP platform device
244  * @base_addr: base register address
245  * @active_sensor: sensor in-use, set when streaming on
246  * @isp: ISP sub-device
247  * @rkisp1_capture: capture video device
248  * @stats: ISP statistics output device
249  * @params: ISP input parameters device
250  * @stream_lock: lock to serialize start/stop streaming in capture devices.
251  */
252 struct rkisp1_device {
253         void __iomem *base_addr;
254         int irq;
255         struct device *dev;
256         unsigned int clk_size;
257         struct clk_bulk_data clks[RKISP1_MAX_BUS_CLK];
258         struct v4l2_device v4l2_dev;
259         struct media_device media_dev;
260         struct v4l2_async_notifier notifier;
261         struct rkisp1_sensor_async *active_sensor;
262         struct rkisp1_isp isp;
263         struct rkisp1_resizer resizer_devs[2];
264         struct rkisp1_capture capture_devs[2];
265         struct rkisp1_stats stats;
266         struct rkisp1_params params;
267         struct media_pipeline pipe;
268         struct mutex stream_lock;
269         struct rkisp1_debug debug;
270 };
271
272 /*
273  * struct rkisp1_isp_mbus_info - ISP pad format info
274  *
275  * Translate mbus_code to hardware format values
276  *
277  * @bus_width: used for parallel
278  */
279 struct rkisp1_isp_mbus_info {
280         u32 mbus_code;
281         enum v4l2_pixel_encoding pixel_enc;
282         u32 mipi_dt;
283         u32 yuv_seq;
284         u8 bus_width;
285         enum rkisp1_fmt_raw_pat_type bayer_pat;
286         unsigned int direction;
287 };
288
289 static inline void
290 rkisp1_write(struct rkisp1_device *rkisp1, u32 val, unsigned int addr)
291 {
292         writel(val, rkisp1->base_addr + addr);
293 }
294
295 static inline u32 rkisp1_read(struct rkisp1_device *rkisp1, unsigned int addr)
296 {
297         return readl(rkisp1->base_addr + addr);
298 }
299
300 void rkisp1_sd_adjust_crop_rect(struct v4l2_rect *crop,
301                                 const struct v4l2_rect *bounds);
302
303 void rkisp1_sd_adjust_crop(struct v4l2_rect *crop,
304                            const struct v4l2_mbus_framefmt *bounds);
305
306 const struct rkisp1_isp_mbus_info *rkisp1_isp_mbus_info_get(u32 mbus_code);
307
308 void rkisp1_params_configure(struct rkisp1_params *params,
309                              enum rkisp1_fmt_raw_pat_type bayer_pat,
310                              enum v4l2_quantization quantization);
311 void rkisp1_params_disable(struct rkisp1_params *params);
312
313 void rkisp1_isp_isr(struct rkisp1_device *rkisp1);
314 void rkisp1_mipi_isr(struct rkisp1_device *rkisp1);
315 void rkisp1_capture_isr(struct rkisp1_device *rkisp1);
316 void rkisp1_stats_isr(struct rkisp1_stats *stats, u32 isp_ris);
317 void rkisp1_params_isr(struct rkisp1_device *rkisp1, u32 isp_mis);
318
319 int rkisp1_capture_devs_register(struct rkisp1_device *rkisp1);
320 void rkisp1_capture_devs_unregister(struct rkisp1_device *rkisp1);
321
322 int rkisp1_isp_register(struct rkisp1_device *rkisp1);
323 void rkisp1_isp_unregister(struct rkisp1_device *rkisp1);
324
325 int rkisp1_resizer_devs_register(struct rkisp1_device *rkisp1);
326 void rkisp1_resizer_devs_unregister(struct rkisp1_device *rkisp1);
327
328 int rkisp1_stats_register(struct rkisp1_device *rkisp1);
329 void rkisp1_stats_unregister(struct rkisp1_device *rkisp1);
330
331 int rkisp1_params_register(struct rkisp1_device *rkisp1);
332 void rkisp1_params_unregister(struct rkisp1_device *rkisp1);
333
334 #endif /* _RKISP1_COMMON_H */