GNU Linux-libre 5.19-rc6-gnu
[releases.git] / drivers / staging / media / atomisp / pci / atomisp_compat_css20.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Support for Clovertrail PNW Camera Imaging ISP subsystem.
4  *
5  * Copyright (c) 2013 Intel Corporation. All Rights Reserved.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License version
9  * 2 as published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  *
17  */
18
19 #ifndef __ATOMISP_COMPAT_CSS20_H__
20 #define __ATOMISP_COMPAT_CSS20_H__
21
22 #include <media/v4l2-mediabus.h>
23
24 #include "ia_css.h"
25 #include "ia_css_types.h"
26 #include "ia_css_acc_types.h"
27 #include "sh_css_legacy.h"
28
29 #define ATOMISP_CSS2_PIPE_MAX   2
30 #define ATOMISP_CSS2_NUM_OFFLINE_INIT_CONTINUOUS_FRAMES     3
31 #define ATOMISP_CSS2_NUM_OFFLINE_INIT_CONTINUOUS_FRAMES_LOCK_EN     4
32 #define ATOMISP_CSS2_NUM_DVS_FRAME_DELAY     2
33
34 #define CSS_MIPI_FRAME_BUFFER_SIZE_1    0x60000
35 #define CSS_MIPI_FRAME_BUFFER_SIZE_2    0x80000
36
37 struct atomisp_device;
38 struct atomisp_sub_device;
39
40 #define MAX_STREAMS_PER_CHANNEL 2
41
42 /*
43  * These are used to indicate the css stream state, corresponding
44  * stream handling can be done via judging the different state.
45  */
46 enum atomisp_css_stream_state {
47         CSS_STREAM_UNINIT,
48         CSS_STREAM_CREATED,
49         CSS_STREAM_STARTED,
50         CSS_STREAM_STOPPED,
51 };
52
53 /*
54  *  Sensor of external ISP can send multiple steams with different mipi data
55  * type in the same virtual channel. This information needs to come from the
56  * sensor or external ISP
57  */
58 struct atomisp_css_isys_config_info {
59         unsigned int input_format;
60         unsigned int width;
61         unsigned int height;
62 };
63
64 struct atomisp_stream_env {
65         struct ia_css_stream *stream;
66         struct ia_css_stream_config stream_config;
67         struct ia_css_stream_info stream_info;
68         struct ia_css_pipe *pipes[IA_CSS_PIPE_ID_NUM];
69         struct ia_css_pipe *multi_pipes[IA_CSS_PIPE_ID_NUM];
70         struct ia_css_pipe_config pipe_configs[IA_CSS_PIPE_ID_NUM];
71         struct ia_css_pipe_extra_config pipe_extra_configs[IA_CSS_PIPE_ID_NUM];
72         bool update_pipe[IA_CSS_PIPE_ID_NUM];
73         enum atomisp_css_stream_state stream_state;
74         struct ia_css_stream *acc_stream;
75         enum atomisp_css_stream_state acc_stream_state;
76         struct ia_css_stream_config acc_stream_config;
77         unsigned int ch_id; /* virtual channel ID */
78         unsigned int isys_configs;
79         struct atomisp_css_isys_config_info isys_info[MAX_STREAMS_PER_CHANNEL];
80 };
81
82 struct atomisp_css_env {
83         struct ia_css_env isp_css_env;
84         struct ia_css_fw isp_css_fw;
85 };
86
87 struct atomisp_s3a_buf {
88         struct ia_css_isp_3a_statistics *s3a_data;
89         struct ia_css_isp_3a_statistics_map *s3a_map;
90         struct list_head list;
91 };
92
93 struct atomisp_dis_buf {
94         struct ia_css_isp_dvs_statistics *dis_data;
95         struct ia_css_isp_dvs_statistics_map *dvs_map;
96         struct list_head list;
97 };
98
99 struct atomisp_css_buffer {
100         struct ia_css_buffer css_buffer;
101 };
102
103 struct atomisp_css_event {
104         enum ia_css_pipe_id pipe;
105         struct ia_css_event event;
106 };
107
108 void atomisp_css_set_macc_config(struct atomisp_sub_device *asd,
109                                  struct ia_css_macc_config *macc_config);
110
111 void atomisp_css_set_ecd_config(struct atomisp_sub_device *asd,
112                                 struct ia_css_ecd_config *ecd_config);
113
114 void atomisp_css_set_ynr_config(struct atomisp_sub_device *asd,
115                                 struct ia_css_ynr_config *ynr_config);
116
117 void atomisp_css_set_fc_config(struct atomisp_sub_device *asd,
118                                struct ia_css_fc_config *fc_config);
119
120 void atomisp_css_set_aa_config(struct atomisp_sub_device *asd,
121                                struct ia_css_aa_config *aa_config);
122
123 void atomisp_css_set_baa_config(struct atomisp_sub_device *asd,
124                                 struct ia_css_aa_config *baa_config);
125
126 void atomisp_css_set_anr_config(struct atomisp_sub_device *asd,
127                                 struct ia_css_anr_config *anr_config);
128
129 void atomisp_css_set_xnr_config(struct atomisp_sub_device *asd,
130                                 struct ia_css_xnr_config *xnr_config);
131
132 void atomisp_css_set_cnr_config(struct atomisp_sub_device *asd,
133                                 struct ia_css_cnr_config *cnr_config);
134
135 void atomisp_css_set_ctc_config(struct atomisp_sub_device *asd,
136                                 struct ia_css_ctc_config *ctc_config);
137
138 void atomisp_css_set_yuv2rgb_cc_config(struct atomisp_sub_device *asd,
139                                        struct ia_css_cc_config *yuv2rgb_cc_config);
140
141 void atomisp_css_set_rgb2yuv_cc_config(struct atomisp_sub_device *asd,
142                                        struct ia_css_cc_config *rgb2yuv_cc_config);
143
144 void atomisp_css_set_anr_thres(struct atomisp_sub_device *asd,
145                                struct ia_css_anr_thres *anr_thres);
146
147 int atomisp_css_load_firmware(struct atomisp_device *isp);
148
149 void atomisp_css_set_dvs_6axis(struct atomisp_sub_device *asd,
150                                struct ia_css_dvs_6axis_config *dvs_6axis);
151
152 int atomisp_css_debug_dump_isp_binary(void);
153
154 int atomisp_css_dump_sp_raw_copy_linecount(bool reduced);
155
156 int atomisp_css_dump_blob_infor(struct atomisp_device *isp);
157
158 void atomisp_css_set_isp_config_id(struct atomisp_sub_device *asd,
159                                    uint32_t isp_config_id);
160
161 void atomisp_css_set_isp_config_applied_frame(struct atomisp_sub_device *asd,
162         struct ia_css_frame *output_frame);
163
164 int atomisp_get_css_dbgfunc(void);
165
166 int atomisp_set_css_dbgfunc(struct atomisp_device *isp, int opt);
167 struct ia_css_dvs_grid_info *atomisp_css_get_dvs_grid_info(
168     struct ia_css_grid_info *grid_info);
169 #endif