1 /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
3 * Rockchip ISP1 Driver - Common definitions
5 * Copyright (C) 2019 Collabora, Ltd.
7 * Based on Rockchip ISP1 driver by Rockchip Electronics Co., Ltd.
8 * Copyright (C) 2017 Rockchip Electronics Co., Ltd.
11 #ifndef _RKISP1_COMMON_H
12 #define _RKISP1_COMMON_H
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>
22 #include "rkisp1-regs.h"
23 #include "uapi/rkisp1-config.h"
25 #define RKISP1_ISP_SD_SRC BIT(0)
26 #define RKISP1_ISP_SD_SINK BIT(1)
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
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
40 #define RKISP1_DEFAULT_WIDTH 800
41 #define RKISP1_DEFAULT_HEIGHT 600
43 #define RKISP1_DRIVER_NAME "rkisp1"
44 #define RKISP1_BUS_INFO "platform:" RKISP1_DRIVER_NAME
46 #define RKISP1_MAX_BUS_CLK 8
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)
58 enum rkisp1_stream_id {
63 enum rkisp1_fmt_raw_pat_type {
71 RKISP1_ISP_PAD_SINK_VIDEO,
72 RKISP1_ISP_PAD_SINK_PARAMS,
73 RKISP1_ISP_PAD_SOURCE_VIDEO,
74 RKISP1_ISP_PAD_SOURCE_STATS,
79 * struct rkisp1_sensor_async - Sensor information
80 * @mbus: media bus configuration
82 struct rkisp1_sensor_async {
83 struct v4l2_async_subdev asd;
85 enum v4l2_mbus_type mbus_type;
86 unsigned int mbus_flags;
87 struct v4l2_subdev *sd;
88 struct v4l2_ctrl *pixel_rate_ctrl;
93 * struct rkisp1_isp - ISP sub-device
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
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
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;
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;
125 struct rkisp1_buffer {
126 struct vb2_v4l2_buffer vb;
127 struct list_head queue;
129 u32 buff_addr[VIDEO_MAX_PLANES];
134 struct rkisp1_dummy_buffer {
140 struct rkisp1_device;
143 * struct rkisp1_capture - ISP capture video device
145 * @pix.fmt: buffer format
146 * @pix.info: pixel information
147 * @pix.cfg: pixel configuration
149 * @buf.lock: lock to protect buf_queue
150 * @buf.queue: queued buffer list
151 * @buf.dummy: dummy space to store dropped data
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
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;
165 wait_queue_head_t done;
166 unsigned int sp_y_stride;
168 /* protects queue, curr and next */
170 struct list_head queue;
171 struct rkisp1_dummy_buffer dummy;
172 struct rkisp1_buffer *curr;
173 struct rkisp1_buffer *next;
176 const struct rkisp1_capture_fmt_cfg *cfg;
177 const struct v4l2_format_info *info;
178 struct v4l2_pix_format_mplane fmt;
183 * struct rkisp1_stats - ISP Statistics device
185 * @lock: locks the buffer list 'stat' and 'is_streaming'
186 * @stat: stats buffer list
188 struct rkisp1_stats {
189 struct rkisp1_vdev_node vnode;
190 struct rkisp1_device *rkisp1;
192 spinlock_t lock; /* locks 'is_streaming', and 'stats' */
193 struct list_head stat;
194 struct v4l2_format vdev_fmt;
199 * struct rkisp1_params - ISP input parameters device
201 * @cur_params: Current ISP parameters
202 * @is_first_params: the first params should take effect immediately
204 struct rkisp1_params {
205 struct rkisp1_vdev_node vnode;
206 struct rkisp1_device *rkisp1;
208 spinlock_t config_lock;
209 struct list_head params;
210 struct rkisp1_params_cfg cur_params;
211 struct v4l2_format vdev_fmt;
213 bool is_first_params;
215 enum v4l2_quantization quantization;
216 enum rkisp1_fmt_raw_pat_type raw_type;
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;
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];
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.
252 struct rkisp1_device {
253 void __iomem *base_addr;
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;
273 * struct rkisp1_isp_mbus_info - ISP pad format info
275 * Translate mbus_code to hardware format values
277 * @bus_width: used for parallel
279 struct rkisp1_isp_mbus_info {
281 enum v4l2_pixel_encoding pixel_enc;
285 enum rkisp1_fmt_raw_pat_type bayer_pat;
286 unsigned int direction;
290 rkisp1_write(struct rkisp1_device *rkisp1, u32 val, unsigned int addr)
292 writel(val, rkisp1->base_addr + addr);
295 static inline u32 rkisp1_read(struct rkisp1_device *rkisp1, unsigned int addr)
297 return readl(rkisp1->base_addr + addr);
300 void rkisp1_sd_adjust_crop_rect(struct v4l2_rect *crop,
301 const struct v4l2_rect *bounds);
303 void rkisp1_sd_adjust_crop(struct v4l2_rect *crop,
304 const struct v4l2_mbus_framefmt *bounds);
306 const struct rkisp1_isp_mbus_info *rkisp1_isp_mbus_info_get(u32 mbus_code);
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);
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);
319 int rkisp1_capture_devs_register(struct rkisp1_device *rkisp1);
320 void rkisp1_capture_devs_unregister(struct rkisp1_device *rkisp1);
322 int rkisp1_isp_register(struct rkisp1_device *rkisp1);
323 void rkisp1_isp_unregister(struct rkisp1_device *rkisp1);
325 int rkisp1_resizer_devs_register(struct rkisp1_device *rkisp1);
326 void rkisp1_resizer_devs_unregister(struct rkisp1_device *rkisp1);
328 int rkisp1_stats_register(struct rkisp1_device *rkisp1);
329 void rkisp1_stats_unregister(struct rkisp1_device *rkisp1);
331 int rkisp1_params_register(struct rkisp1_device *rkisp1);
332 void rkisp1_params_unregister(struct rkisp1_device *rkisp1);
334 #endif /* _RKISP1_COMMON_H */