xref: /OK3568_Linux_fs/kernel/drivers/media/platform/rockchip/cif/subdev-itf.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Rockchip CIF Driver
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2020 Rockchip Electronics Co., Ltd.
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef _RKCIF_SDITF_H
9*4882a593Smuzhiyun #define _RKCIF_SDITF_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <linux/mutex.h>
12*4882a593Smuzhiyun #include <media/media-device.h>
13*4882a593Smuzhiyun #include <media/media-entity.h>
14*4882a593Smuzhiyun #include <media/v4l2-ctrls.h>
15*4882a593Smuzhiyun #include <media/v4l2-device.h>
16*4882a593Smuzhiyun #include <media/videobuf2-v4l2.h>
17*4882a593Smuzhiyun #include <media/v4l2-mc.h>
18*4882a593Smuzhiyun #include <linux/rk-camera-module.h>
19*4882a593Smuzhiyun #include "hw.h"
20*4882a593Smuzhiyun #include "../isp/isp_external.h"
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #define RKISP0_DEVNAME "rkisp0"
23*4882a593Smuzhiyun #define RKISP1_DEVNAME "rkisp1"
24*4882a593Smuzhiyun #define RKISP_UNITE_DEVNAME "rkisp-unite"
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define RKCIF_TOISP_CH0	0
27*4882a593Smuzhiyun #define RKCIF_TOISP_CH1	1
28*4882a593Smuzhiyun #define RKCIF_TOISP_CH2	2
29*4882a593Smuzhiyun #define TOISP_CH_MAX 3
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #define SDITF_PIXEL_RATE_MAX (1000000000)
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun struct capture_info {
34*4882a593Smuzhiyun 	unsigned int offset_x;
35*4882a593Smuzhiyun 	unsigned int offset_y;
36*4882a593Smuzhiyun 	unsigned int width;
37*4882a593Smuzhiyun 	unsigned int height;
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun enum toisp_link_mode {
41*4882a593Smuzhiyun 	TOISP_NONE,
42*4882a593Smuzhiyun 	TOISP0,
43*4882a593Smuzhiyun 	TOISP1,
44*4882a593Smuzhiyun 	TOISP_UNITE,
45*4882a593Smuzhiyun };
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun struct toisp_ch_info {
48*4882a593Smuzhiyun 	bool is_valid;
49*4882a593Smuzhiyun 	int id;
50*4882a593Smuzhiyun };
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun struct toisp_info {
53*4882a593Smuzhiyun 	struct toisp_ch_info ch_info[TOISP_CH_MAX];
54*4882a593Smuzhiyun 	enum toisp_link_mode link_mode;
55*4882a593Smuzhiyun };
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun struct sditf_work_struct {
58*4882a593Smuzhiyun 	struct work_struct	work;
59*4882a593Smuzhiyun 	struct rkisp_rx_buffer *buf;
60*4882a593Smuzhiyun };
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun struct sditf_priv {
63*4882a593Smuzhiyun 	struct device *dev;
64*4882a593Smuzhiyun 	struct v4l2_async_notifier notifier;
65*4882a593Smuzhiyun 	struct v4l2_subdev sd;
66*4882a593Smuzhiyun 	struct media_pad pads[2];
67*4882a593Smuzhiyun 	struct rkcif_device *cif_dev;
68*4882a593Smuzhiyun 	struct rkmodule_hdr_cfg	hdr_cfg;
69*4882a593Smuzhiyun 	struct capture_info cap_info;
70*4882a593Smuzhiyun 	struct rkisp_vicap_mode mode;
71*4882a593Smuzhiyun 	struct toisp_info toisp_inf;
72*4882a593Smuzhiyun 	struct v4l2_ctrl *pixel_rate;
73*4882a593Smuzhiyun 	struct v4l2_ctrl_handler ctrl_handler;
74*4882a593Smuzhiyun 	struct v4l2_subdev *sensor_sd;
75*4882a593Smuzhiyun 	struct sditf_work_struct buffree_work;
76*4882a593Smuzhiyun 	struct list_head buf_free_list;
77*4882a593Smuzhiyun 	int buf_num;
78*4882a593Smuzhiyun 	int num_sensors;
79*4882a593Smuzhiyun 	int combine_index;
80*4882a593Smuzhiyun 	bool is_combine_mode;
81*4882a593Smuzhiyun 	atomic_t power_cnt;
82*4882a593Smuzhiyun 	atomic_t stream_cnt;
83*4882a593Smuzhiyun };
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun extern struct platform_driver rkcif_subdev_driver;
86*4882a593Smuzhiyun void sditf_change_to_online(struct sditf_priv *priv);
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun #endif
89