1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) Rockchip Electronics Co., Ltd. */
3 #include <linux/clk.h>
4 #include <linux/proc_fs.h>
5 #include <linux/sem.h>
6 #include <linux/seq_file.h>
7
8 #include "dev.h"
9 #include "procfs.h"
10 #include "version.h"
11 #include "regs.h"
12 #include "regs_v2x.h"
13 #include "isp_params_v3x.h"
14 #include "isp_params_v32.h"
15
16 #ifdef CONFIG_PROC_FS
17
isp20_show(struct rkisp_device * dev,struct seq_file * p)18 static void isp20_show(struct rkisp_device *dev, struct seq_file *p)
19 {
20 u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
21 static const char * const effect[] = {
22 "BLACKWHITE",
23 "NEGATIVE",
24 "SEPIA",
25 "COLOR_SEL",
26 "EMBOSS",
27 "SKETCH",
28 "SHARPEN",
29 "RKSHARPEN"
30 };
31 u32 val;
32
33 val = rkisp_read(dev, ISP_DPCC0_MODE, false);
34 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC0", (val & 1) ? "ON" : "OFF", val);
35 val = rkisp_read(dev, ISP_DPCC1_MODE, false);
36 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC1", (val & 1) ? "ON" : "OFF", val);
37 val = rkisp_read(dev, ISP_DPCC2_MODE, false);
38 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC2", (val & 1) ? "ON" : "OFF", val);
39 val = rkisp_read(dev, ISP_BLS_CTRL, false);
40 seq_printf(p, "%-10s %s(0x%x)\n", "BLS", (val & 1) ? "ON" : "OFF", val);
41 val = rkisp_read(dev, CIF_ISP_CTRL, false);
42 seq_printf(p, "%-10s %s(0x%x)\n", "SDG",
43 (val & CIF_ISP_CTRL_ISP_GAMMA_IN_ENA) ? "ON" : "OFF", val);
44 val = rkisp_read(dev, ISP_LSC_CTRL, false);
45 seq_printf(p, "%-10s %s(0x%x)\n", "LSC", (val & 1) ? "ON" : "OFF", val);
46 val = rkisp_read(dev, CIF_ISP_CTRL, false);
47 seq_printf(p, "%-10s %s(0x%x) (gain: 0x%08x, 0x%08x)\n", "AWBGAIN",
48 (val & CIF_ISP_CTRL_ISP_AWB_ENA) ? "ON" : "OFF", val,
49 rkisp_read(dev, CIF_ISP_AWB_GAIN_G_V12, false),
50 rkisp_read(dev, CIF_ISP_AWB_GAIN_RB_V12, false));
51 val = rkisp_read(dev, ISP_DEBAYER_CONTROL, false);
52 seq_printf(p, "%-10s %s(0x%x)\n", "DEBAYER", (val & 1) ? "ON" : "OFF", val);
53 val = rkisp_read(dev, ISP_CCM_CTRL, false);
54 seq_printf(p, "%-10s %s(0x%x)\n", "CCM", (val & 1) ? "ON" : "OFF", val);
55 val = rkisp_read(dev, ISP_GAMMA_OUT_CTRL, false);
56 seq_printf(p, "%-10s %s(0x%x)\n", "GAMMA_OUT", (val & 1) ? "ON" : "OFF", val);
57 val = rkisp_read(dev, CPROC_CTRL, false);
58 seq_printf(p, "%-10s %s(0x%x)\n", "CPROC", (val & 1) ? "ON" : "OFF", val);
59 val = rkisp_read(dev, CIF_IMG_EFF_CTRL, false);
60 seq_printf(p, "%-10s %s(0x%x) (effect: %s)\n", "IE",
61 (val & 1) ? "ON" : "OFF", val,
62 effect[(val & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
63 val = rkisp_read(dev, ISP_WDR_CTRL0, false);
64 seq_printf(p, "%-10s %s(0x%x)\n", "WDR", (val & 1) ? "ON" : "OFF", val);
65 val = rkisp_read(dev, ISP_HDRTMO_CTRL, false);
66 seq_printf(p, "%-10s %s(0x%x)\n", "HDRTMO", (val & 1) ? "ON" : "OFF", val);
67 val = rkisp_read(dev, ISP_HDRMGE_CTRL, false);
68 seq_printf(p, "%-10s %s(0x%x)\n", "HDRMGE", (val & 1) ? "ON" : "OFF", val);
69 val = rkisp_read(dev, ISP_RAWNR_CTRL, false);
70 seq_printf(p, "%-10s %s(0x%x)\n", "RAWNR", (val & 1) ? "ON" : "OFF", val);
71 val = rkisp_read(dev, ISP_GIC_CONTROL, false);
72 seq_printf(p, "%-10s %s(0x%x)\n", "GIC", (val & 1) ? "ON" : "OFF", val);
73 val = rkisp_read(dev, ISP_DHAZ_CTRL, false);
74 seq_printf(p, "%-10s %s(0x%x)\n", "DHAZ", (val & 1) ? "ON" : "OFF", val);
75 val = rkisp_read(dev, ISP_3DLUT_CTRL, false);
76 seq_printf(p, "%-10s %s(0x%x)\n", "3DLUT", (val & 1) ? "ON" : "OFF", val);
77 val = rkisp_read(dev, ISP_GAIN_CTRL, false);
78 seq_printf(p, "%-10s %s(0x%x)\n", "GAIN", val ? "ON" : "OFF", val);
79 val = rkisp_read(dev, ISP_LDCH_STS, false);
80 seq_printf(p, "%-10s %s(0x%x)\n", "LDCH", (val & 1) ? "ON" : "OFF", val);
81 val = rkisp_read(dev, ISP_CTRL, false);
82 seq_printf(p, "%-10s %s(0x%x)\n", "CSM",
83 (val & full_range_flg) ? "FULL" : "LIMITED", val);
84
85 val = rkisp_read(dev, ISP_AFM_CTRL, false);
86 seq_printf(p, "%-10s %s(0x%x)\n", "SIAF", (val & 1) ? "ON" : "OFF", val);
87 val = rkisp_read(dev, CIF_ISP_AWB_PROP_V10, false);
88 seq_printf(p, "%-10s %s(0x%x)\n", "SIAWB",
89 (val & CIF_ISP_AWB_ENABLE) ? "ON" : "OFF", val);
90 val = rkisp_read(dev, ISP_YUVAE_CTRL, false);
91 seq_printf(p, "%-10s %s(0x%x)\n", "YUVAE", (val & 1) ? "ON" : "OFF", val);
92 val = rkisp_read(dev, ISP_HIST_HIST_CTRL, false);
93 seq_printf(p, "%-10s %s(0x%x)\n", "SIHST", (val & 1) ? "ON" : "OFF", val);
94 val = rkisp_read(dev, ISP_RAWAF_CTRL, false);
95 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAF", (val & 1) ? "ON" : "OFF", val);
96 val = rkisp_read(dev, ISP_RAWAWB_CTRL, false);
97 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAWB", (val & 1) ? "ON" : "OFF", val);
98 val = rkisp_read(dev, ISP_RAWAE_LITE_CTRL, false);
99 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE0", (val & 1) ? "ON" : "OFF", val);
100 val = rkisp_read(dev, RAWAE_BIG2_BASE, false);
101 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE1", (val & 1) ? "ON" : "OFF", val);
102 val = rkisp_read(dev, RAWAE_BIG3_BASE, false);
103 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE2", (val & 1) ? "ON" : "OFF", val);
104 val = rkisp_read(dev, RAWAE_BIG1_BASE, false);
105 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE3", (val & 1) ? "ON" : "OFF", val);
106 val = rkisp_read(dev, ISP_RAWHIST_LITE_CTRL, false);
107 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST0", (val & 1) ? "ON" : "OFF", val);
108 val = rkisp_read(dev, ISP_RAWHIST_BIG2_BASE, false);
109 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST1", (val & 1) ? "ON" : "OFF", val);
110 val = rkisp_read(dev, ISP_RAWHIST_BIG3_BASE, false);
111 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST2", (val & 1) ? "ON" : "OFF", val);
112 val = rkisp_read(dev, ISP_RAWHIST_BIG1_BASE, false);
113 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val);
114 }
115
isp21_show(struct rkisp_device * dev,struct seq_file * p)116 static void isp21_show(struct rkisp_device *dev, struct seq_file *p)
117 {
118 u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
119 static const char * const effect[] = {
120 "BLACKWHITE",
121 "NEGATIVE",
122 "SEPIA",
123 "COLOR_SEL",
124 "EMBOSS",
125 "SKETCH",
126 "SHARPEN",
127 "RKSHARPEN"
128 };
129 u32 val, tmp;
130
131 val = rkisp_read(dev, ISP_DPCC0_MODE, false);
132 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC0", (val & 1) ? "ON" : "OFF", val);
133 val = rkisp_read(dev, ISP_DPCC1_MODE, false);
134 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC1", (val & 1) ? "ON" : "OFF", val);
135 val = rkisp_read(dev, ISP_BLS_CTRL, false);
136 seq_printf(p, "%-10s %s(0x%x)\n", "BLS", (val & 1) ? "ON" : "OFF", val);
137 val = rkisp_read(dev, CIF_ISP_CTRL, false);
138 seq_printf(p, "%-10s %s(0x%x)\n", "SDG",
139 (val & CIF_ISP_CTRL_ISP_GAMMA_IN_ENA) ? "ON" : "OFF", val);
140 val = rkisp_read(dev, ISP_LSC_CTRL, false);
141 seq_printf(p, "%-10s %s(0x%x)\n", "LSC", (val & 1) ? "ON" : "OFF", val);
142 val = rkisp_read(dev, CIF_ISP_CTRL, false);
143 seq_printf(p, "%-10s %s(0x%x) (gain: 0x%08x, 0x%08x)\n", "AWBGAIN",
144 (val & CIF_ISP_CTRL_ISP_AWB_ENA) ? "ON" : "OFF", val,
145 rkisp_read(dev, CIF_ISP_AWB_GAIN_G_V12, false),
146 rkisp_read(dev, CIF_ISP_AWB_GAIN_RB_V12, false));
147 val = rkisp_read(dev, ISP_DEBAYER_CONTROL, false);
148 seq_printf(p, "%-10s %s(0x%x)\n", "DEBAYER", (val & 1) ? "ON" : "OFF", val);
149 val = rkisp_read(dev, ISP_CCM_CTRL, false);
150 seq_printf(p, "%-10s %s(0x%x)\n", "CCM", (val & 1) ? "ON" : "OFF", val);
151 val = rkisp_read(dev, ISP_GAMMA_OUT_CTRL, false);
152 seq_printf(p, "%-10s %s(0x%x)\n", "GAMMA_OUT", (val & 1) ? "ON" : "OFF", val);
153 val = rkisp_read(dev, CPROC_CTRL, false);
154 seq_printf(p, "%-10s %s(0x%x)\n", "CPROC", (val & 1) ? "ON" : "OFF", val);
155 val = rkisp_read(dev, CIF_IMG_EFF_CTRL, false);
156 seq_printf(p, "%-10s %s(0x%x) (effect: %s)\n", "IE",
157 (val & 1) ? "ON" : "OFF", val,
158 effect[(val & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
159 val = rkisp_read(dev, ISP21_DRC_CTRL0, false);
160 seq_printf(p, "%-10s %s(0x%x)\n", "HDRDRC", (val & 1) ? "ON" : "OFF", val);
161 val = rkisp_read(dev, ISP_HDRMGE_CTRL, false);
162 seq_printf(p, "%-10s %s(0x%x)\n", "HDRMGE", (val & 1) ? "ON" : "OFF", val);
163 val = rkisp_read(dev, ISP21_BAYNR_CTRL, false);
164 seq_printf(p, "%-10s %s(0x%x)\n", "BAYNR", (val & 1) ? "ON" : "OFF", val);
165 val = rkisp_read(dev, ISP21_BAY3D_CTRL, false);
166 seq_printf(p, "%-10s %s(0x%x)\n", "BAY3D", (val & 1) ? "ON" : "OFF", val);
167 val = rkisp_read(dev, ISP21_YNR_GLOBAL_CTRL, false);
168 seq_printf(p, "%-10s %s(0x%x)\n", "YNR", (val & 1) ? "ON" : "OFF", val);
169 val = rkisp_read(dev, ISP21_CNR_CTRL, false);
170 seq_printf(p, "%-10s %s(0x%x)\n", "CNR", (val & 1) ? "ON" : "OFF", val);
171 val = rkisp_read(dev, ISP21_SHARP_SHARP_EN, false);
172 seq_printf(p, "%-10s %s(0x%x)\n", "SHARP", (val & 1) ? "ON" : "OFF", val);
173 val = rkisp_read(dev, ISP_GIC_CONTROL, false);
174 seq_printf(p, "%-10s %s(0x%x)\n", "GIC", (val & 1) ? "ON" : "OFF", val);
175 val = rkisp_read(dev, ISP_DHAZ_CTRL, false);
176 seq_printf(p, "%-10s %s(0x%x)\n", "DHAZ", (val & 1) ? "ON" : "OFF", val);
177 val = rkisp_read(dev, ISP_3DLUT_CTRL, false);
178 seq_printf(p, "%-10s %s(0x%x)\n", "3DLUT", (val & 1) ? "ON" : "OFF", val);
179 val = rkisp_read(dev, ISP_LDCH_STS, false);
180 seq_printf(p, "%-10s %s(0x%x)\n", "LDCH", (val & 1) ? "ON" : "OFF", val);
181 val = rkisp_read(dev, ISP_CTRL, false);
182 tmp = rkisp_read(dev, ISP_CC_COEFF_0, false);
183 seq_printf(p, "%-10s %s(0x%x), y_offs:0x%x c_offs:0x%x\n"
184 "\t coeff Y:0x%x 0x%x 0x%x CB:0x%x 0x%x 0x%x CR:0x%x 0x%x 0x%x\n",
185 "CSM", (val & full_range_flg) ? "FULL" : "LIMIT", val,
186 (tmp >> 24) & 0x3f,
187 (tmp >> 16) & 0xff ? (tmp >> 16) & 0xff : 128,
188 tmp & 0x1ff,
189 rkisp_read(dev, ISP_CC_COEFF_1, false),
190 rkisp_read(dev, ISP_CC_COEFF_2, false),
191 rkisp_read(dev, ISP_CC_COEFF_3, false),
192 rkisp_read(dev, ISP_CC_COEFF_4, false),
193 rkisp_read(dev, ISP_CC_COEFF_5, false),
194 rkisp_read(dev, ISP_CC_COEFF_6, false),
195 rkisp_read(dev, ISP_CC_COEFF_7, false),
196 rkisp_read(dev, ISP_CC_COEFF_8, false));
197 val = rkisp_read(dev, ISP_AFM_CTRL, false);
198 seq_printf(p, "%-10s %s(0x%x)\n", "SIAF", (val & 1) ? "ON" : "OFF", val);
199 val = rkisp_read(dev, CIF_ISP_AWB_PROP_V10, false);
200 seq_printf(p, "%-10s %s(0x%x)\n", "SIAWB",
201 (val & CIF_ISP_AWB_ENABLE) ? "ON" : "OFF", val);
202 val = rkisp_read(dev, ISP_YUVAE_CTRL, false);
203 seq_printf(p, "%-10s %s(0x%x)\n", "YUVAE", (val & 1) ? "ON" : "OFF", val);
204 val = rkisp_read(dev, ISP_HIST_HIST_CTRL, false);
205 seq_printf(p, "%-10s %s(0x%x)\n", "SIHST", (val & 1) ? "ON" : "OFF", val);
206 val = rkisp_read(dev, ISP_RAWAF_CTRL, false);
207 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAF", (val & 1) ? "ON" : "OFF", val);
208 val = rkisp_read(dev, ISP21_RAWAWB_CTRL, false);
209 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAWB", (val & 1) ? "ON" : "OFF", val);
210 val = rkisp_read(dev, ISP_RAWAE_LITE_CTRL, false);
211 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE0", (val & 1) ? "ON" : "OFF", val);
212 val = rkisp_read(dev, RAWAE_BIG2_BASE, false);
213 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE1", (val & 1) ? "ON" : "OFF", val);
214 val = rkisp_read(dev, RAWAE_BIG3_BASE, false);
215 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE2", (val & 1) ? "ON" : "OFF", val);
216 val = rkisp_read(dev, RAWAE_BIG1_BASE, false);
217 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE3", (val & 1) ? "ON" : "OFF", val);
218 val = rkisp_read(dev, ISP_RAWHIST_LITE_CTRL, false);
219 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST0", (val & 1) ? "ON" : "OFF", val);
220 val = rkisp_read(dev, ISP_RAWHIST_BIG2_BASE, false);
221 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST1", (val & 1) ? "ON" : "OFF", val);
222 val = rkisp_read(dev, ISP_RAWHIST_BIG3_BASE, false);
223 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST2", (val & 1) ? "ON" : "OFF", val);
224 val = rkisp_read(dev, ISP_RAWHIST_BIG1_BASE, false);
225 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val);
226 }
227
isp30_show(struct rkisp_device * dev,struct seq_file * p)228 static void isp30_show(struct rkisp_device *dev, struct seq_file *p)
229 {
230 u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
231 static const char * const effect[] = {
232 "BLACKWHITE",
233 "NEGATIVE",
234 "SEPIA",
235 "COLOR_SEL",
236 "EMBOSS",
237 "SKETCH",
238 "SHARPEN",
239 "RKSHARPEN"
240 };
241 u32 val, tmp;
242
243 val = rkisp_read(dev, ISP3X_CMSK_CTRL0, false);
244 seq_printf(p, "%-10s %s(0x%x)\n", "CMSK", (val & 1) ? "ON" : "OFF", val);
245 val = rkisp_read(dev, ISP3X_DPCC0_MODE, false);
246 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC0", (val & 1) ? "ON" : "OFF", val);
247 val = rkisp_read(dev, ISP3X_DPCC1_MODE, false);
248 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC1", (val & 1) ? "ON" : "OFF", val);
249 val = rkisp_read(dev, ISP3X_DPCC2_MODE, false);
250 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC2", (val & 1) ? "ON" : "OFF", val);
251 val = rkisp_read(dev, ISP3X_BLS_CTRL, false);
252 seq_printf(p, "%-10s %s(0x%x)\n", "BLS", (val & 1) ? "ON" : "OFF", val);
253 val = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
254 seq_printf(p, "%-10s %s(0x%x)\n", "SDG", (val & BIT(6)) ? "ON" : "OFF", val);
255 val = rkisp_read(dev, ISP3X_LSC_CTRL, false);
256 seq_printf(p, "%-10s %s(0x%x)\n", "LSC", (val & 1) ? "ON" : "OFF", val);
257 val = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
258 seq_printf(p, "%-10s %s(0x%x) (gain: 0x%08x, 0x%08x)\n", "AWBGAIN",
259 (val & BIT(7)) ? "ON" : "OFF", val,
260 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_G, false),
261 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_RB, false));
262 val = rkisp_read(dev, ISP3X_DEBAYER_CONTROL, false);
263 seq_printf(p, "%-10s %s(0x%x)\n", "DEBAYER", (val & 1) ? "ON" : "OFF", val);
264 val = rkisp_read(dev, ISP3X_CCM_CTRL, false);
265 seq_printf(p, "%-10s %s(0x%x)\n", "CCM", (val & 1) ? "ON" : "OFF", val);
266 val = rkisp_read(dev, ISP3X_GAMMA_OUT_CTRL, false);
267 seq_printf(p, "%-10s %s(0x%x)\n", "GAMMA_OUT", (val & 1) ? "ON" : "OFF", val);
268 val = rkisp_read(dev, ISP3X_CPROC_CTRL, false);
269 seq_printf(p, "%-10s %s(0x%x)\n", "CPROC", (val & 1) ? "ON" : "OFF", val);
270 val = rkisp_read(dev, ISP3X_IMG_EFF_CTRL, false);
271 seq_printf(p, "%-10s %s(0x%x) (effect: %s)\n", "IE", (val & 1) ? "ON" : "OFF", val,
272 effect[(val & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
273 val = rkisp_read(dev, ISP3X_DRC_CTRL0, false);
274 seq_printf(p, "%-10s %s(0x%x)\n", "HDRDRC", (val & 1) ? "ON" : "OFF", val);
275 val = rkisp_read(dev, ISP3X_HDRMGE_CTRL, false);
276 seq_printf(p, "%-10s %s(0x%x)\n", "HDRMGE", (val & 1) ? "ON" : "OFF", val);
277 val = rkisp_read(dev, ISP3X_BAYNR_CTRL, false);
278 seq_printf(p, "%-10s %s(0x%x)\n", "BAYNR", (val & 1) ? "ON" : "OFF", val);
279 val = rkisp_read(dev, ISP3X_BAY3D_CTRL, false);
280 seq_printf(p, "%-10s %s(0x%x)\n", "BAY3D", (val & 1) ? "ON" : "OFF", val);
281 val = rkisp_read(dev, ISP3X_YNR_GLOBAL_CTRL, false);
282 seq_printf(p, "%-10s %s(0x%x)\n", "YNR", (val & 1) ? "ON" : "OFF", val);
283 val = rkisp_read(dev, ISP3X_CNR_CTRL, false);
284 seq_printf(p, "%-10s %s(0x%x)\n", "CNR", (val & 1) ? "ON" : "OFF", val);
285 val = rkisp_read(dev, ISP3X_SHARP_EN, false);
286 seq_printf(p, "%-10s %s(0x%x)\n", "SHARP", (val & 1) ? "ON" : "OFF", val);
287 val = rkisp_read(dev, ISP3X_GIC_CONTROL, false);
288 seq_printf(p, "%-10s %s(0x%x)\n", "GIC", (val & 1) ? "ON" : "OFF", val);
289 val = rkisp_read(dev, ISP3X_DHAZ_CTRL, false);
290 seq_printf(p, "%-10s %s(0x%x)\n", "DHAZ", (val & 1) ? "ON" : "OFF", val);
291 val = rkisp_read(dev, ISP3X_3DLUT_CTRL, false);
292 seq_printf(p, "%-10s %s(0x%x)\n", "3DLUT", (val & 1) ? "ON" : "OFF", val);
293 val = rkisp_read(dev, ISP3X_LDCH_STS, false);
294 seq_printf(p, "%-10s %s(0x%x)\n", "LDCH", (val & 1) ? "ON" : "OFF", val);
295 val = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
296 tmp = rkisp_read(dev, ISP3X_ISP_CC_COEFF_0, false);
297 seq_printf(p, "%-10s %s(0x%x), y_offs:0x%x c_offs:0x%x\n"
298 "\t coeff Y:0x%x 0x%x 0x%x CB:0x%x 0x%x 0x%x CR:0x%x 0x%x 0x%x\n",
299 "CSM", (val & full_range_flg) ? "FULL" : "LIMIT", val,
300 (tmp >> 24) & 0x3f,
301 (tmp >> 16) & 0xff ? (tmp >> 16) & 0xff : 128,
302 tmp & 0x1ff,
303 rkisp_read(dev, ISP3X_ISP_CC_COEFF_1, false),
304 rkisp_read(dev, ISP3X_ISP_CC_COEFF_2, false),
305 rkisp_read(dev, ISP3X_ISP_CC_COEFF_3, false),
306 rkisp_read(dev, ISP3X_ISP_CC_COEFF_4, false),
307 rkisp_read(dev, ISP3X_ISP_CC_COEFF_5, false),
308 rkisp_read(dev, ISP3X_ISP_CC_COEFF_6, false),
309 rkisp_read(dev, ISP3X_ISP_CC_COEFF_7, false),
310 rkisp_read(dev, ISP3X_ISP_CC_COEFF_8, false));
311 val = rkisp_read(dev, ISP3X_CAC_CTRL, false);
312 seq_printf(p, "%-10s %s(0x%x)\n", "CAC", (val & 1) ? "ON" : "OFF", val);
313 val = rkisp_read(dev, ISP3X_GAIN_CTRL, false);
314 seq_printf(p, "%-10s %s(0x%x)\n", "GAIN", (val & 1) ? "ON" : "OFF", val);
315 val = rkisp_read(dev, ISP3X_RAWAF_CTRL, false);
316 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAF", (val & 1) ? "ON" : "OFF", val);
317 val = rkisp_read(dev, ISP3X_RAWAWB_CTRL, false);
318 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAWB", (val & 1) ? "ON" : "OFF", val);
319 val = rkisp_read(dev, ISP3X_RAWAE_LITE_CTRL, false);
320 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE0", (val & 1) ? "ON" : "OFF", val);
321 val = rkisp_read(dev, ISP3X_RAWAE_BIG2_BASE, false);
322 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE1", (val & 1) ? "ON" : "OFF", val);
323 val = rkisp_read(dev, ISP3X_RAWAE_BIG3_BASE, false);
324 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE2", (val & 1) ? "ON" : "OFF", val);
325 val = rkisp_read(dev, ISP3X_RAWAE_BIG1_BASE, false);
326 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE3", (val & 1) ? "ON" : "OFF", val);
327 val = rkisp_read(dev, ISP3X_RAWHIST_LITE_CTRL, false);
328 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST0", (val & 1) ? "ON" : "OFF", val);
329 val = rkisp_read(dev, ISP3X_RAWHIST_BIG2_BASE, false);
330 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST1", (val & 1) ? "ON" : "OFF", val);
331 val = rkisp_read(dev, ISP3X_RAWHIST_BIG3_BASE, false);
332 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST2", (val & 1) ? "ON" : "OFF", val);
333 val = rkisp_read(dev, ISP3X_RAWHIST_BIG1_BASE, false);
334 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val);
335 val = rkisp_read(dev, ISP3X_ISP_CTRL1, true);
336 seq_printf(p, "%-10s %s(0x%x)\n", "BigMode", val & BIT(28) ? "ON" : "OFF", val);
337 val = rkisp_read(dev, ISP3X_ISP_DEBUG1, true);
338 seq_printf(p, "%-10s space full status group (0x%x)\n"
339 "\t ibuf2:0x%x ibuf1:0x%x ibuf0:0x%x mpfbc_infifo:0x%x\n"
340 "\t r1fifo:0x%x r0fifo:0x%x outfifo:0x%x lafifo:0x%x\n",
341 "DEBUG1", val,
342 val >> 28, (val >> 24) & 0xf, (val >> 20) & 0xf, (val >> 16) & 0xf,
343 (val >> 12) & 0xf, (val >> 8) & 0xf, (val >> 4) & 0xf, val & 0xf);
344 val = rkisp_read(dev, ISP3X_ISP_DEBUG2, true);
345 seq_printf(p, "%-10s 0x%x\n"
346 "\t bay3d_fifo_full iir:%d cur:%d\n"
347 "\t module outform vertical counter:%d, out frame counter:%d\n"
348 "\t isp output line counter:%d\n",
349 "DEBUG2", val, !!(val & BIT(31)), !!(val & BIT(30)),
350 (val >> 16) & 0x3fff, (val >> 14) & 0x3, val & 0x3fff);
351 val = rkisp_read(dev, ISP3X_ISP_DEBUG3, true);
352 seq_printf(p, "%-10s isp pipeline group (0x%x)\n"
353 "\t mge(%d %d) rawnr(%d %d) bay3d(%d %d) tmo(%d %d)\n"
354 "\t gic(%d %d) dbr(%d %d) debayer(%d %d) dhaz(%d %d)\n"
355 "\t lut3d(%d %d) ldch(%d %d) ynr(%d %d) shp(%d %d)\n"
356 "\t cgc(%d %d) cac(%d %d) isp_out(%d %d) isp_in(%d %d)\n",
357 "DEBUG3", val,
358 !!(val & BIT(31)), !!(val & BIT(30)), !!(val & BIT(29)), !!(val & BIT(28)),
359 !!(val & BIT(27)), !!(val & BIT(26)), !!(val & BIT(25)), !!(val & BIT(24)),
360 !!(val & BIT(23)), !!(val & BIT(22)), !!(val & BIT(21)), !!(val & BIT(20)),
361 !!(val & BIT(19)), !!(val & BIT(18)), !!(val & BIT(17)), !!(val & BIT(16)),
362 !!(val & BIT(15)), !!(val & BIT(14)), !!(val & BIT(13)), !!(val & BIT(12)),
363 !!(val & BIT(11)), !!(val & BIT(10)), !!(val & BIT(9)), !!(val & BIT(8)),
364 !!(val & BIT(7)), !!(val & BIT(6)), !!(val & BIT(5)), !!(val & BIT(4)),
365 !!(val & BIT(3)), !!(val & BIT(2)), !!(val & BIT(1)), !!(val & BIT(0)));
366 }
367
isp30_unite_show(struct rkisp_device * dev,struct seq_file * p)368 static void isp30_unite_show(struct rkisp_device *dev, struct seq_file *p)
369 {
370 u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
371 static const char * const effect[] = {
372 "BLACKWHITE",
373 "NEGATIVE",
374 "SEPIA",
375 "COLOR_SEL",
376 "EMBOSS",
377 "SKETCH",
378 "SHARPEN",
379 "RKSHARPEN"
380 };
381 u32 v0, v1;
382
383 v0 = rkisp_read(dev, ISP3X_CMSK_CTRL0, false);
384 v1 = rkisp_next_read(dev, ISP3X_CMSK_CTRL0, false);
385 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
386 "CMSK",
387 (v0 & 1) ? "ON" : "OFF",
388 v0, (v1 & 1) ? "ON" : "OFF", v1);
389 v0 = rkisp_read(dev, ISP3X_DPCC0_MODE, false);
390 v1 = rkisp_next_read(dev, ISP3X_DPCC0_MODE, false);
391 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
392 "DPCC0",
393 (v0 & 1) ? "ON" : "OFF", v0,
394 (v1 & 1) ? "ON" : "OFF", v1);
395 v0 = rkisp_read(dev, ISP3X_DPCC1_MODE, false);
396 v1 = rkisp_next_read(dev, ISP3X_DPCC1_MODE, false);
397 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
398 "DPCC1",
399 (v0 & 1) ? "ON" : "OFF", v0,
400 (v1 & 1) ? "ON" : "OFF", v1);
401 v0 = rkisp_read(dev, ISP3X_DPCC2_MODE, false);
402 v1 = rkisp_next_read(dev, ISP3X_DPCC2_MODE, false);
403 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
404 "DPCC2",
405 (v0 & 1) ? "ON" : "OFF", v0,
406 (v1 & 1) ? "ON" : "OFF", v1);
407 v0 = rkisp_read(dev, ISP3X_BLS_CTRL, false);
408 v1 = rkisp_next_read(dev, ISP3X_BLS_CTRL, false);
409 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
410 "BLS",
411 (v0 & 1) ? "ON" : "OFF", v0,
412 (v1 & 1) ? "ON" : "OFF", v1);
413 v0 = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
414 v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL0, false);
415 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
416 "SDG",
417 (v0 & BIT(6)) ? "ON" : "OFF", v0,
418 (v1 & BIT(6)) ? "ON" : "OFF", v1);
419 v0 = rkisp_read(dev, ISP3X_LSC_CTRL, false);
420 v1 = rkisp_next_read(dev, ISP3X_LSC_CTRL, false);
421 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
422 "LSC",
423 (v0 & 1) ? "ON" : "OFF", v0,
424 (v1 & 1) ? "ON" : "OFF", v1);
425 v0 = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
426 v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL0, false);
427 seq_printf(p, "%-10s Left %s(0x%x) gain:0x%08x 0x%08x, Right %s(0x%x) gain:0x%08x 0x%08x\n",
428 "AWBGAIN",
429 (v0 & BIT(7)) ? "ON" : "OFF", v0,
430 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_G, false),
431 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_RB, false),
432 (v1 & BIT(7)) ? "ON" : "OFF", v1,
433 rkisp_next_read(dev, ISP3X_ISP_AWB_GAIN0_G, false),
434 rkisp_next_read(dev, ISP3X_ISP_AWB_GAIN0_RB, false));
435 v0 = rkisp_read(dev, ISP3X_DEBAYER_CONTROL, false);
436 v1 = rkisp_next_read(dev, ISP3X_DEBAYER_CONTROL, false);
437 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
438 "DEBAYER",
439 (v0 & 1) ? "ON" : "OFF", v0,
440 (v1 & 1) ? "ON" : "OFF", v1);
441 v0 = rkisp_read(dev, ISP3X_CCM_CTRL, false);
442 v1 = rkisp_next_read(dev, ISP3X_CCM_CTRL, false);
443 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
444 "CCM",
445 (v0 & 1) ? "ON" : "OFF", v0,
446 (v1 & 1) ? "ON" : "OFF", v1);
447 v0 = rkisp_read(dev, ISP3X_GAMMA_OUT_CTRL, false);
448 v1 = rkisp_next_read(dev, ISP3X_GAMMA_OUT_CTRL, false);
449 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
450 "GAMMA_OUT",
451 (v0 & 1) ? "ON" : "OFF", v0,
452 (v1 & 1) ? "ON" : "OFF", v1);
453 v0 = rkisp_read(dev, ISP3X_CPROC_CTRL, false);
454 v1 = rkisp_next_read(dev, ISP3X_CPROC_CTRL, false);
455 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
456 "CPROC",
457 (v0 & 1) ? "ON" : "OFF", v0,
458 (v1 & 1) ? "ON" : "OFF", v1);
459 v0 = rkisp_read(dev, ISP3X_IMG_EFF_CTRL, false);
460 v1 = rkisp_next_read(dev, ISP3X_IMG_EFF_CTRL, false);
461 seq_printf(p, "%-10s Left %s(0x%x) effect:%s, Right %s(0x%x) effect:%s\n",
462 "IE",
463 (v0 & 1) ? "ON" : "OFF", v0,
464 effect[(v0 & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1],
465 (v1 & 1) ? "ON" : "OFF", v1,
466 effect[(v1 & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
467 v0 = rkisp_read(dev, ISP3X_DRC_CTRL0, false);
468 v1 = rkisp_next_read(dev, ISP3X_DRC_CTRL0, false);
469 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
470 "HDRDRC",
471 (v0 & 1) ? "ON" : "OFF", v0,
472 (v1 & 1) ? "ON" : "OFF", v1);
473 v0 = rkisp_read(dev, ISP3X_HDRMGE_CTRL, false);
474 v1 = rkisp_next_read(dev, ISP3X_HDRMGE_CTRL, false);
475 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
476 "HDRMGE",
477 (v0 & 1) ? "ON" : "OFF", v0,
478 (v1 & 1) ? "ON" : "OFF", v1);
479 v0 = rkisp_read(dev, ISP3X_BAYNR_CTRL, false);
480 v1 = rkisp_next_read(dev, ISP3X_BAYNR_CTRL, false);
481 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
482 "BAYNR",
483 (v0 & 1) ? "ON" : "OFF", v0,
484 (v1 & 1) ? "ON" : "OFF", v1);
485 v0 = rkisp_read(dev, ISP3X_BAY3D_CTRL, false);
486 v1 = rkisp_next_read(dev, ISP3X_BAY3D_CTRL, false);
487 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
488 "BAY3D",
489 (v0 & 1) ? "ON" : "OFF", v0,
490 (v1 & 1) ? "ON" : "OFF", v1);
491 v0 = rkisp_read(dev, ISP3X_YNR_GLOBAL_CTRL, false);
492 v1 = rkisp_next_read(dev, ISP3X_YNR_GLOBAL_CTRL, false);
493 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
494 "YNR",
495 (v0 & 1) ? "ON" : "OFF", v0,
496 (v1 & 1) ? "ON" : "OFF", v1);
497 v0 = rkisp_read(dev, ISP3X_CNR_CTRL, false);
498 v1 = rkisp_next_read(dev, ISP3X_CNR_CTRL, false);
499 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
500 "CNR",
501 (v0 & 1) ? "ON" : "OFF", v0,
502 (v1 & 1) ? "ON" : "OFF", v1);
503 v0 = rkisp_read(dev, ISP3X_SHARP_EN, false);
504 v1 = rkisp_next_read(dev, ISP3X_SHARP_EN, false);
505 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
506 "SHARP",
507 (v0 & 1) ? "ON" : "OFF", v0,
508 (v1 & 1) ? "ON" : "OFF", v1);
509 v0 = rkisp_read(dev, ISP3X_GIC_CONTROL, false);
510 v1 = rkisp_next_read(dev, ISP3X_GIC_CONTROL, false);
511 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
512 "GIC",
513 (v0 & 1) ? "ON" : "OFF", v0,
514 (v1 & 1) ? "ON" : "OFF", v1);
515 v0 = rkisp_read(dev, ISP3X_DHAZ_CTRL, false);
516 v1 = rkisp_next_read(dev, ISP3X_DHAZ_CTRL, false);
517 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
518 "DHAZ",
519 (v0 & 1) ? "ON" : "OFF", v0,
520 (v1 & 1) ? "ON" : "OFF", v1);
521 v0 = rkisp_read(dev, ISP3X_3DLUT_CTRL, false);
522 v1 = rkisp_next_read(dev, ISP3X_3DLUT_CTRL, false);
523 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
524 "3DLUT",
525 (v0 & 1) ? "ON" : "OFF", v0,
526 (v1 & 1) ? "ON" : "OFF", v1);
527 v0 = rkisp_read(dev, ISP3X_LDCH_STS, false);
528 v1 = rkisp_next_read(dev, ISP3X_LDCH_STS, false);
529 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
530 "LDCH",
531 (v0 & 1) ? "ON" : "OFF", v0,
532 (v1 & 1) ? "ON" : "OFF", v1);
533 v0 = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
534 v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL0, false);
535 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
536 "CSM",
537 (v0 & full_range_flg) ? "FULL" : "LIMIT", v0,
538 (v1 & full_range_flg) ? "FULL" : "LIMIT", v1);
539 v0 = rkisp_read(dev, ISP3X_CAC_CTRL, false);
540 v1 = rkisp_next_read(dev, ISP3X_CAC_CTRL, false);
541 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
542 "CAC",
543 (v0 & 1) ? "ON" : "OFF", v0,
544 (v1 & 1) ? "ON" : "OFF", v1);
545 v0 = rkisp_read(dev, ISP3X_GAIN_CTRL, false);
546 v1 = rkisp_next_read(dev, ISP3X_GAIN_CTRL, false);
547 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
548 "GAIN",
549 (v0 & 1) ? "ON" : "OFF", v0,
550 (v1 & 1) ? "ON" : "OFF", v1);
551 v0 = rkisp_read(dev, ISP3X_RAWAF_CTRL, false);
552 v1 = rkisp_next_read(dev, ISP3X_RAWAF_CTRL, false);
553 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
554 "RAWAF",
555 (v0 & 1) ? "ON" : "OFF", v0,
556 (v1 & 1) ? "ON" : "OFF", v1);
557 v0 = rkisp_read(dev, ISP3X_RAWAWB_CTRL, false);
558 v1 = rkisp_next_read(dev, ISP3X_RAWAWB_CTRL, false);
559 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
560 "RAWAWB",
561 (v0 & 1) ? "ON" : "OFF", v0,
562 (v1 & 1) ? "ON" : "OFF", v1);
563 v0 = rkisp_read(dev, ISP3X_RAWAE_LITE_CTRL, false);
564 v1 = rkisp_next_read(dev, ISP3X_RAWAE_LITE_CTRL, false);
565 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
566 "RAWAE0",
567 (v0 & 1) ? "ON" : "OFF", v0,
568 (v1 & 1) ? "ON" : "OFF", v1);
569 v0 = rkisp_read(dev, ISP3X_RAWAE_BIG2_BASE, false);
570 v1 = rkisp_next_read(dev, ISP3X_RAWAE_BIG2_BASE, false);
571 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
572 "RAWAE1",
573 (v0 & 1) ? "ON" : "OFF", v0,
574 (v1 & 1) ? "ON" : "OFF", v1);
575 v0 = rkisp_read(dev, ISP3X_RAWAE_BIG3_BASE, false);
576 v1 = rkisp_next_read(dev, ISP3X_RAWAE_BIG3_BASE, false);
577 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
578 "RAWAE2",
579 (v0 & 1) ? "ON" : "OFF", v0,
580 (v1 & 1) ? "ON" : "OFF", v1);
581 v0 = rkisp_read(dev, ISP3X_RAWAE_BIG1_BASE, false);
582 v1 = rkisp_next_read(dev, ISP3X_RAWAE_BIG1_BASE, false);
583 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
584 "RAWAE3",
585 (v0 & 1) ? "ON" : "OFF", v0,
586 (v1 & 1) ? "ON" : "OFF", v1);
587 v0 = rkisp_read(dev, ISP3X_RAWHIST_LITE_CTRL, false);
588 v1 = rkisp_next_read(dev, ISP3X_RAWHIST_LITE_CTRL, false);
589 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
590 "RAWHIST0",
591 (v0 & 1) ? "ON" : "OFF", v0,
592 (v1 & 1) ? "ON" : "OFF", v1);
593 v0 = rkisp_read(dev, ISP3X_RAWHIST_BIG2_BASE, false);
594 v1 = rkisp_next_read(dev, ISP3X_RAWHIST_BIG2_BASE, false);
595 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
596 "RAWHIST1",
597 (v0 & 1) ? "ON" : "OFF", v0,
598 (v1 & 1) ? "ON" : "OFF", v1);
599 v0 = rkisp_read(dev, ISP3X_RAWHIST_BIG3_BASE, false);
600 v1 = rkisp_next_read(dev, ISP3X_RAWHIST_BIG3_BASE, false);
601 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
602 "RAWHIST2",
603 (v0 & 1) ? "ON" : "OFF", v0,
604 (v1 & 1) ? "ON" : "OFF", v1);
605 v0 = rkisp_read(dev, ISP3X_RAWHIST_BIG1_BASE, false);
606 v1 = rkisp_next_read(dev, ISP3X_RAWHIST_BIG1_BASE, false);
607 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
608 "RAWHIST3",
609 (v0 & 1) ? "ON" : "OFF", v0,
610 (v1 & 1) ? "ON" : "OFF", v1);
611 v0 = rkisp_read(dev, ISP3X_ISP_CTRL1, true);
612 v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL1, true);
613 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
614 "BigMode",
615 v0 & BIT(28) ? "ON" : "OFF", v0,
616 v1 & BIT(28) ? "ON" : "OFF", v1);
617 v0 = rkisp_read(dev, ISP3X_ISP_DEBUG1, true);
618 v1 = rkisp_next_read(dev, ISP3X_ISP_DEBUG1, true);
619 seq_printf(p, "%-10s space full status group. Left:0x%x Right:0x%x\n"
620 "\t ibuf2(L:0x%x R:0x%x) ibuf1(L:0x%x R:0x%x)\n"
621 "\t ibuf0(L:0x%x R:0x%x) mpfbc_infifo(L:0x%x R:0x%x)\n"
622 "\t r1fifo(L:0x%x R:0x%x) r0fifo(L:0x%x R:0x%x)\n"
623 "\t outfifo(L:0x%x R:0x%x) lafifo(L:0x%x R:0x%x)\n",
624 "DEBUG1", v0, v1,
625 v0 >> 28, v1 >> 28, (v0 >> 24) & 0xf, (v1 >> 24) & 0xf,
626 (v0 >> 20) & 0xf, (v1 >> 20) & 0xf, (v0 >> 16) & 0xf, (v1 >> 16) & 0xf,
627 (v0 >> 12) & 0xf, (v1 >> 12) & 0xf, (v0 >> 8) & 0xf, (v1 >> 8) & 0xf,
628 (v0 >> 4) & 0xf, (v1 >> 4) & 0xf, v0 & 0xf, v1 & 0xf);
629 v0 = rkisp_read(dev, ISP3X_ISP_DEBUG2, true);
630 v1 = rkisp_next_read(dev, ISP3X_ISP_DEBUG2, true);
631 seq_printf(p, "%-10s Left:0x%x Right:0x%x\n"
632 "\t bay3d_fifo_full iir(L:%d R:%d) cur(L:%d R:%d)\n"
633 "\t module outform vertical counter(L:%d R:%d), out frame counter:(L:%d R:%d)\n"
634 "\t isp output line counter(L:%d R:%d)\n",
635 "DEBUG2", v0, v1,
636 !!(v0 & BIT(31)), !!(v1 & BIT(31)), !!(v0 & BIT(30)), !!(v1 & BIT(30)),
637 (v0 >> 16) & 0x3fff, (v1 >> 16) & 0x3fff, (v0 >> 14) & 0x3, (v1 >> 14) & 0x3,
638 v0 & 0x3fff, v1 & 0x3fff);
639 v0 = rkisp_read(dev, ISP3X_ISP_DEBUG3, true);
640 v1 = rkisp_next_read(dev, ISP3X_ISP_DEBUG3, true);
641 seq_printf(p, "%-10s isp pipeline group Left:0x%x Right:0x%x\n"
642 "\t mge(L:%d %d R:%d %d) rawnr(L:%d %d R:%d %d)\n"
643 "\t bay3d(L:%d %d R:%d %d) tmo(L:%d %d R:%d %d)\n"
644 "\t gic(L:%d %d R:%d %d) dbr(L:%d %d R:%d %d)\n"
645 "\t debayer(L:%d %d R:%d %d) dhaz(L:%d %d R:%d %d)\n"
646 "\t lut3d(L:%d %d R:%d %d) ldch(L:%d %d R:%d %d)\n"
647 "\t ynr(L:%d %d R:%d %d) shp(L:%d %d R:%d %d)\n"
648 "\t cgc(L:%d %d R:%d %d) cac(L:%d %d R:%d %d)\n"
649 "\t isp_out(L:%d %d R:%d %d) isp_in(L:%d %d R:%d %d)\n",
650 "DEBUG3", v0, v1,
651 !!(v0 & BIT(31)), !!(v0 & BIT(30)), !!(v1 & BIT(31)), !!(v1 & BIT(30)),
652 !!(v0 & BIT(29)), !!(v0 & BIT(28)), !!(v1 & BIT(29)), !!(v1 & BIT(28)),
653 !!(v0 & BIT(27)), !!(v0 & BIT(26)), !!(v1 & BIT(27)), !!(v1 & BIT(26)),
654 !!(v0 & BIT(25)), !!(v0 & BIT(24)), !!(v1 & BIT(25)), !!(v1 & BIT(24)),
655 !!(v0 & BIT(23)), !!(v0 & BIT(22)), !!(v1 & BIT(23)), !!(v1 & BIT(22)),
656 !!(v0 & BIT(21)), !!(v0 & BIT(20)), !!(v1 & BIT(21)), !!(v1 & BIT(20)),
657 !!(v0 & BIT(19)), !!(v0 & BIT(18)), !!(v1 & BIT(19)), !!(v1 & BIT(18)),
658 !!(v0 & BIT(17)), !!(v0 & BIT(16)), !!(v1 & BIT(17)), !!(v1 & BIT(16)),
659 !!(v0 & BIT(15)), !!(v0 & BIT(14)), !!(v1 & BIT(15)), !!(v1 & BIT(14)),
660 !!(v0 & BIT(13)), !!(v0 & BIT(12)), !!(v1 & BIT(13)), !!(v1 & BIT(12)),
661 !!(v0 & BIT(11)), !!(v0 & BIT(10)), !!(v1 & BIT(11)), !!(v1 & BIT(10)),
662 !!(v0 & BIT(9)), !!(v0 & BIT(8)), !!(v1 & BIT(9)), !!(v1 & BIT(8)),
663 !!(v0 & BIT(7)), !!(v0 & BIT(6)), !!(v1 & BIT(7)), !!(v1 & BIT(6)),
664 !!(v0 & BIT(5)), !!(v0 & BIT(4)), !!(v1 & BIT(5)), !!(v1 & BIT(4)),
665 !!(v0 & BIT(3)), !!(v0 & BIT(2)), !!(v1 & BIT(3)), !!(v1 & BIT(2)),
666 !!(v0 & BIT(1)), !!(v0 & BIT(0)), !!(v1 & BIT(1)), !!(v1 & BIT(0)));
667 }
668
isp32_show(struct rkisp_device * dev,struct seq_file * p)669 static void isp32_show(struct rkisp_device *dev, struct seq_file *p)
670 {
671 u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
672 static const char * const effect[] = {
673 "BLACKWHITE",
674 "NEGATIVE",
675 "SEPIA",
676 "COLOR_SEL",
677 "EMBOSS",
678 "SKETCH",
679 "SHARPEN",
680 "RKSHARPEN"
681 };
682 struct rkisp_isp_params_val_v32 *priv;
683 u32 val, tmp;
684
685 priv = (struct rkisp_isp_params_val_v32 *)dev->params_vdev.priv_val;
686
687 if (dev->isp_ver == ISP_V32) {
688 seq_printf(p, "%-10s %s warp:%d\n", "ISP2ENC",
689 dev->cap_dev.wrap_line ? "online" : "offline",
690 dev->cap_dev.wrap_line);
691 tmp = rkisp_read(dev, ISP32_MI_WR_VFLIP_CTRL, false);
692 val = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
693 seq_printf(p, "%-10s mirror:%d flip(mp:%d sp:%d bp:%d mpds:%d bpds:%d)\n",
694 "MIR_FLIP", !!(val & BIT(5)),
695 !!(tmp & BIT(0)), !!(tmp & BIT(1)), !!(tmp & BIT(2)),
696 !!(tmp & BIT(4)), !!(tmp & BIT(5)));
697 val = rkisp_read(dev, ISP3X_BAYNR_CTRL, false);
698 seq_printf(p, "%-10s %s(0x%x)\n", "BAYNR", (val & 1) ? "ON" : "OFF", val);
699 val = rkisp_read(dev, ISP3X_GIC_CONTROL, false);
700 seq_printf(p, "%-10s %s(0x%x)\n", "GIC", (val & 1) ? "ON" : "OFF", val);
701 val = rkisp_read(dev, ISP3X_CAC_CTRL, false);
702 seq_printf(p, "%-10s %s(0x%x)\n", "CAC", (val & 1) ? "ON" : "OFF", val);
703 val = rkisp_read(dev, ISP32_VSM_MODE, false);
704 seq_printf(p, "%-10s %s(0x%x)\n", "VSM", (val & 1) ? "ON" : "OFF", val);
705 }
706 val = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
707 seq_printf(p, "%-10s %s(0x%x)\n", "SDG", (val & BIT(6)) ? "ON" : "OFF", val);
708 seq_printf(p, "%-10s %s(0x%x) (gain0:0x%08x 0x%08x gain1:0x%x 0x%x)\n", "AWBGAIN",
709 (val & BIT(7)) ? "ON" : "OFF", val,
710 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_G, false),
711 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_RB, false),
712 rkisp_read(dev, ISP32_ISP_AWB1_GAIN_G, false),
713 rkisp_read(dev, ISP32_ISP_AWB1_GAIN_RB, false));
714 val = rkisp_read(dev, ISP3X_CMSK_CTRL0, false);
715 seq_printf(p, "%-10s %s(0x%x)\n", "CMSK", (val & 1) ? "ON" : "OFF", val);
716 val = rkisp_read(dev, ISP3X_DPCC0_MODE, false);
717 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC0", (val & 1) ? "ON" : "OFF", val);
718 val = rkisp_read(dev, ISP3X_DPCC1_MODE, false);
719 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC1", (val & 1) ? "ON" : "OFF", val);
720 val = rkisp_read(dev, ISP3X_BLS_CTRL, false);
721 seq_printf(p, "%-10s %s(0x%x)\n", "BLS", (val & 1) ? "ON" : "OFF", val);
722 val = rkisp_read(dev, ISP3X_LSC_CTRL, false);
723 seq_printf(p, "%-10s %s(0x%x)\n", "LSC", (val & 1) ? "ON" : "OFF", val);
724 val = rkisp_read(dev, ISP3X_DEBAYER_CONTROL, false);
725 seq_printf(p, "%-10s %s(0x%x)\n", "DEBAYER", (val & 1) ? "ON" : "OFF", val);
726 val = rkisp_read(dev, ISP3X_CCM_CTRL, false);
727 seq_printf(p, "%-10s %s(0x%x)\n", "CCM", (val & 1) ? "ON" : "OFF", val);
728 val = rkisp_read(dev, ISP3X_GAMMA_OUT_CTRL, false);
729 seq_printf(p, "%-10s %s(0x%x)\n", "GAMMA_OUT", (val & 1) ? "ON" : "OFF", val);
730 val = rkisp_read(dev, ISP3X_CPROC_CTRL, false);
731 seq_printf(p, "%-10s %s(0x%x)\n", "CPROC", (val & 1) ? "ON" : "OFF", val);
732 val = rkisp_read(dev, ISP3X_IMG_EFF_CTRL, false);
733 seq_printf(p, "%-10s %s(0x%x) (effect: %s)\n", "IE", (val & 1) ? "ON" : "OFF", val,
734 effect[(val & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
735 val = rkisp_read(dev, ISP3X_DRC_CTRL0, false);
736 seq_printf(p, "%-10s %s(0x%x)\n", "HDRDRC", (val & 1) ? "ON" : "OFF", val);
737 val = rkisp_read(dev, ISP3X_HDRMGE_CTRL, false);
738 seq_printf(p, "%-10s %s(0x%x)\n", "HDRMGE", (val & 1) ? "ON" : "OFF", val);
739 val = rkisp_read(dev, ISP3X_BAY3D_CTRL, false);
740 tmp = rkisp_read(dev, ISP32_BAY3D_CTRL1, false);
741 seq_printf(p, "%-10s %s(0x%x 0x%x) bypass:%d bwsaving:%d mode:(%s %s)\n", "BAY3D",
742 (val & 1) ? "ON" : "OFF", val, tmp, !!(val & BIT(1)), !!(val & BIT(13)),
743 (tmp & BIT(4)) ? "lo4x4" : ((tmp & BIT(3)) ? "lo4x8" : "lo8x8"),
744 priv->is_sram ? "sram" : "ddr");
745 val = rkisp_read(dev, ISP3X_YNR_GLOBAL_CTRL, false);
746 seq_printf(p, "%-10s %s(0x%x)\n", "YNR", (val & 1) ? "ON" : "OFF", val);
747 val = rkisp_read(dev, ISP3X_CNR_CTRL, false);
748 seq_printf(p, "%-10s %s(0x%x)\n", "CNR", (val & 1) ? "ON" : "OFF", val);
749 val = rkisp_read(dev, ISP3X_SHARP_EN, false);
750 seq_printf(p, "%-10s %s(0x%x)\n", "SHARP", (val & 1) ? "ON" : "OFF", val);
751 val = rkisp_read(dev, ISP3X_DHAZ_CTRL, false);
752 seq_printf(p, "%-10s %s(0x%x)\n", "DHAZ", (val & 1) ? "ON" : "OFF", val);
753 val = rkisp_read(dev, ISP3X_3DLUT_CTRL, false);
754 seq_printf(p, "%-10s %s(0x%x)\n", "3DLUT", (val & 1) ? "ON" : "OFF", val);
755 val = rkisp_read(dev, ISP3X_LDCH_STS, false);
756 seq_printf(p, "%-10s %s(0x%x)\n", "LDCH", (val & 1) ? "ON" : "OFF", val);
757 val = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
758 tmp = rkisp_read(dev, ISP3X_ISP_CC_COEFF_0, false);
759 seq_printf(p, "%-10s %s(0x%x), y_offs:0x%x c_offs:0x%x\n"
760 "\t coeff Y:0x%x 0x%x 0x%x CB:0x%x 0x%x 0x%x CR:0x%x 0x%x 0x%x\n",
761 "CSM", (val & full_range_flg) ? "FULL" : "LIMIT", val,
762 (tmp >> 24) & 0x3f,
763 (tmp >> 16) & 0xff ? (tmp >> 16) & 0xff : 128,
764 tmp & 0x1ff,
765 rkisp_read(dev, ISP3X_ISP_CC_COEFF_1, false),
766 rkisp_read(dev, ISP3X_ISP_CC_COEFF_2, false),
767 rkisp_read(dev, ISP3X_ISP_CC_COEFF_3, false),
768 rkisp_read(dev, ISP3X_ISP_CC_COEFF_4, false),
769 rkisp_read(dev, ISP3X_ISP_CC_COEFF_5, false),
770 rkisp_read(dev, ISP3X_ISP_CC_COEFF_6, false),
771 rkisp_read(dev, ISP3X_ISP_CC_COEFF_7, false),
772 rkisp_read(dev, ISP3X_ISP_CC_COEFF_8, false));
773 val = rkisp_read(dev, ISP3X_GAIN_CTRL, false);
774 seq_printf(p, "%-10s %s(0x%x)\n", "GAIN", (val & 1) ? "ON" : "OFF", val);
775 val = rkisp_read(dev, ISP3X_RAWAF_CTRL, false);
776 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAF", (val & 1) ? "ON" : "OFF", val);
777 val = rkisp_read(dev, ISP3X_RAWAWB_CTRL, false);
778 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAWB", (val & 1) ? "ON" : "OFF", val);
779 val = rkisp_read(dev, ISP3X_RAWAE_LITE_CTRL, false);
780 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE0", (val & 1) ? "ON" : "OFF", val);
781 val = rkisp_read(dev, ISP3X_RAWAE_BIG2_BASE, false);
782 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE1", (val & 1) ? "ON" : "OFF", val);
783 val = rkisp_read(dev, ISP3X_RAWAE_BIG1_BASE, false);
784 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE3", (val & 1) ? "ON" : "OFF", val);
785 val = rkisp_read(dev, ISP3X_RAWHIST_LITE_CTRL, false);
786 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST0", (val & 1) ? "ON" : "OFF", val);
787 val = rkisp_read(dev, ISP3X_RAWHIST_BIG2_BASE, false);
788 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST1", (val & 1) ? "ON" : "OFF", val);
789 val = rkisp_read(dev, ISP3X_RAWHIST_BIG1_BASE, false);
790 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val);
791 val = rkisp_read(dev, ISP3X_ISP_CTRL1, true);
792 seq_printf(p, "%-10s %s(0x%x)\n", "BigMode", val & BIT(28) ? "ON" : "OFF", val);
793 val = rkisp_read(dev, ISP32_BLS_ISP_OB_PREDGAIN, false);
794 seq_printf(p, "%-10s %s(0x%x)\n", "OB", val ? "ON" : "OFF", val);
795 val = rkisp_read(dev, ISP3X_ISP_DEBUG1, true);
796 seq_printf(p, "%-10s space full status group (0x%x)\n"
797 "\t ibuf2:0x%x ibuf1:0x%x ibuf0:0x%x mpfbc_infifo:0x%x\n"
798 "\t r1fifo:0x%x r0fifo:0x%x outfifo:0x%x lafifo:0x%x\n",
799 "DEBUG1", val,
800 val >> 28, (val >> 24) & 0xf, (val >> 20) & 0xf, (val >> 16) & 0xf,
801 (val >> 12) & 0xf, (val >> 8) & 0xf, (val >> 4) & 0xf, val & 0xf);
802 val = rkisp_read(dev, ISP3X_ISP_DEBUG2, true);
803 seq_printf(p, "%-10s 0x%x\n"
804 "\t bay3d_fifo_full iir:%d cur:%d\n"
805 "\t module outform vertical counter:%d, out frame counter:%d\n"
806 "\t isp output line counter:%d\n",
807 "DEBUG2", val, !!(val & BIT(31)), !!(val & BIT(30)),
808 (val >> 16) & 0x3fff, (val >> 14) & 0x3, val & 0x3fff);
809 val = rkisp_read(dev, ISP3X_ISP_DEBUG3, true);
810 seq_printf(p, "%-10s isp pipeline group (0x%x)\n"
811 "\t mge(%d %d) rawnr(%d %d) bay3d(%d %d) tmo(%d %d)\n"
812 "\t gic(%d %d) dbr(%d %d) debayer(%d %d) dhaz(%d %d)\n"
813 "\t lut3d(%d %d) ldch(%d %d) ynr(%d %d) shp(%d %d)\n"
814 "\t cgc(%d %d) cac(%d %d) isp_out(%d %d) isp_in(%d %d)\n",
815 "DEBUG3", val,
816 !!(val & BIT(31)), !!(val & BIT(30)), !!(val & BIT(29)), !!(val & BIT(28)),
817 !!(val & BIT(27)), !!(val & BIT(26)), !!(val & BIT(25)), !!(val & BIT(24)),
818 !!(val & BIT(23)), !!(val & BIT(22)), !!(val & BIT(21)), !!(val & BIT(20)),
819 !!(val & BIT(19)), !!(val & BIT(18)), !!(val & BIT(17)), !!(val & BIT(16)),
820 !!(val & BIT(15)), !!(val & BIT(14)), !!(val & BIT(13)), !!(val & BIT(12)),
821 !!(val & BIT(11)), !!(val & BIT(10)), !!(val & BIT(9)), !!(val & BIT(8)),
822 !!(val & BIT(7)), !!(val & BIT(6)), !!(val & BIT(5)), !!(val & BIT(4)),
823 !!(val & BIT(3)), !!(val & BIT(2)), !!(val & BIT(1)), !!(val & BIT(0)));
824 val = rkisp_read(dev, ISP32_ISP_DEBUG4, true);
825 seq_printf(p, "%-10s isp pipeline group (0x%x)\n"
826 "\t expd(%d %d) ynr(%d %d)\n",
827 "DEBUG4", val,
828 !!(val & BIT(3)), !!(val & BIT(2)), !!(val & BIT(1)), !!(val & BIT(0)));
829 }
830
isp_show(struct seq_file * p,void * v)831 static int isp_show(struct seq_file *p, void *v)
832 {
833 struct rkisp_device *dev = p->private;
834 struct rkisp_isp_subdev *sdev = &dev->isp_sdev;
835 struct rkisp_sensor_info *sensor = dev->active_sensor;
836 u32 val = 0;
837
838 seq_printf(p, "%-10s Version:v%02x.%02x.%02x\n",
839 dev->name,
840 RKISP_DRIVER_VERSION >> 16,
841 (RKISP_DRIVER_VERSION & 0xff00) >> 8,
842 RKISP_DRIVER_VERSION & 0x00ff);
843 for (val = 0; val < dev->hw_dev->num_clks; val++) {
844 seq_printf(p, "%-10s %ld\n",
845 dev->hw_dev->match_data->clks[val],
846 clk_get_rate(dev->hw_dev->clks[val]));
847 }
848
849 seq_printf(p, "%-10s Cnt:%d ErrCnt:%d\n",
850 "Interrupt",
851 dev->isp_isr_cnt,
852 dev->isp_err_cnt);
853
854 if (sensor && sensor->fi.interval.numerator)
855 val = sensor->fi.interval.denominator / sensor->fi.interval.numerator;
856 seq_printf(p, "%-10s %s Format:%s Size:%dx%d@%dfps Offset(%d,%d)\n",
857 "Input",
858 sensor ? sensor->sd->name : NULL,
859 sdev->in_fmt.name,
860 sdev->in_crop.width, sdev->in_crop.height, val,
861 sdev->in_crop.left, sdev->in_crop.top);
862
863 if (!(dev->isp_state & ISP_START))
864 return 0;
865
866 if (IS_HDR_RDBK(dev->hdr.op_mode)) {
867 seq_printf(p, "%-10s mode:frame%d (frame:%d rate:%dms %s time:%dms frameloss:%d) cnt(total:%d X1:%d X2:%d X3:%d)\n",
868 "Isp Read",
869 dev->rd_mode - 3,
870 dev->dmarx_dev.cur_frame.id,
871 (u32)(dev->dmarx_dev.cur_frame.timestamp - dev->dmarx_dev.pre_frame.timestamp) / 1000 / 1000,
872 (dev->isp_state & ISP_FRAME_END) ? "idle" : "working",
873 sdev->dbg.interval / 1000 / 1000,
874 sdev->dbg.frameloss,
875 dev->rdbk_cnt,
876 dev->rdbk_cnt_x1,
877 dev->rdbk_cnt_x2,
878 dev->rdbk_cnt_x3);
879 seq_printf(p, "\t hw link:%d idle:%d vir(mode:%d index:%d)\n",
880 dev->hw_dev->dev_link_num, dev->hw_dev->is_idle,
881 dev->multi_mode, dev->multi_index);
882 } else {
883 seq_printf(p, "%-10s frame:%d %s time:%dms v-blank:%dus\n",
884 "Isp online",
885 sdev->dbg.id,
886 (dev->isp_state & ISP_FRAME_END) ? "idle" : "working",
887 sdev->dbg.interval / 1000 / 1000,
888 sdev->dbg.delay / 1000);
889 }
890 if (dev->br_dev.en)
891 seq_printf(p, "%-10s rkispp%d Format:%s%s Size:%dx%d (frame:%d rate:%dms frameloss:%d)\n",
892 "Output",
893 dev->dev_id,
894 (dev->br_dev.work_mode & ISP_ISPP_FBC) ? "FBC" : "YUV",
895 (dev->br_dev.work_mode & ISP_ISPP_422) ? "422" : "420",
896 dev->br_dev.crop.width,
897 dev->br_dev.crop.height,
898 dev->br_dev.dbg.id,
899 dev->br_dev.dbg.interval / 1000 / 1000,
900 dev->br_dev.dbg.frameloss);
901 for (val = 0; val < RKISP_MAX_STREAM; val++) {
902 struct rkisp_stream *stream = &dev->cap_dev.stream[val];
903
904 if (!stream->streaming)
905 continue;
906 seq_printf(p, "%-10s %s Format:%c%c%c%c Size:%dx%d Dcrop(%d,%d|%dx%d) (frame:%d rate:%dms delay:%dms frameloss:%d)\n",
907 "Output",
908 stream->vnode.vdev.name,
909 stream->out_fmt.pixelformat,
910 stream->out_fmt.pixelformat >> 8,
911 stream->out_fmt.pixelformat >> 16,
912 stream->out_fmt.pixelformat >> 24,
913 stream->out_fmt.width,
914 stream->out_fmt.height,
915 stream->dcrop.left,
916 stream->dcrop.top,
917 stream->dcrop.width,
918 stream->dcrop.height,
919 stream->dbg.id,
920 stream->dbg.interval / 1000 / 1000,
921 stream->dbg.delay / 1000 / 1000,
922 stream->dbg.frameloss);
923 }
924
925 switch (dev->isp_ver) {
926 case ISP_V20:
927 if (IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V20))
928 isp20_show(dev, p);
929 break;
930 case ISP_V21:
931 if (IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V21))
932 isp21_show(dev, p);
933 break;
934 case ISP_V30:
935 if (IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V30)) {
936 if (dev->hw_dev->is_unite)
937 isp30_unite_show(dev, p);
938 else
939 isp30_show(dev, p);
940 }
941 break;
942 case ISP_V32:
943 case ISP_V32_L:
944 if (IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V32))
945 isp32_show(dev, p);
946 break;
947 default:
948 break;
949 }
950
951 seq_printf(p, "%-10s %s Cnt:%d\n\n",
952 "Monitor",
953 dev->hw_dev->monitor.is_en ? "ON" : "OFF",
954 dev->hw_dev->monitor.retry);
955 seq_printf(p, "%-10s mode:0x%x\n",
956 "Debug", dev->procfs.mode);
957 if (dev->procfs.mode & RKISP_PROCFS_DUMP_REG) {
958 int ret, i;
959
960 dev->procfs.is_fs_wait = true;
961 ret = wait_event_timeout(dev->procfs.fs_wait,
962 !dev->procfs.is_fs_wait,
963 msecs_to_jiffies(1000));
964 seq_printf(p, "****************HW REG*Ret:%d**************\n", ret);
965 for (i = 0; i < ISP3X_RAWAWB_RAM_DATA_BASE; i += 16) {
966 if (!dev->hw_dev->is_unite) {
967 seq_printf(p, "%04x: %08x %08x %08x %08x\n", i,
968 rkisp_read(dev, i, true),
969 rkisp_read(dev, i + 4, true),
970 rkisp_read(dev, i + 8, true),
971 rkisp_read(dev, i + 12, true));
972 } else {
973 seq_printf(p, "%04x: %08x %08x %08x %08x | %08x %08x %08x %08x\n", i,
974 rkisp_read(dev, i, true),
975 rkisp_read(dev, i + 4, true),
976 rkisp_read(dev, i + 8, true),
977 rkisp_read(dev, i + 12, true),
978 rkisp_next_read(dev, i, true),
979 rkisp_next_read(dev, i + 4, true),
980 rkisp_next_read(dev, i + 8, true),
981 rkisp_next_read(dev, i + 12, true));
982 }
983 }
984 }
985 return 0;
986 }
987
rkisp_proc_dump_mem(struct rkisp_device * dev)988 static void rkisp_proc_dump_mem(struct rkisp_device *dev)
989 {
990 const struct vb2_mem_ops *g_ops = dev->hw_dev->mem_ops;
991 void *iir_addr = NULL, *cur_addr = NULL, *ds_addr = NULL;
992 u32 iir_size, cur_size, ds_size;
993 struct file *fp = NULL;
994 char file[256];
995
996 if (!IS_ENABLED(CONFIG_NO_GKI))
997 return;
998
999 dev->procfs.is_fs_wait = true;
1000 wait_event_timeout(dev->procfs.fe_wait,
1001 !dev->procfs.is_fe_wait,
1002 msecs_to_jiffies(1000));
1003
1004 if (dev->isp_ver == ISP_V30) {
1005 struct rkisp_isp_params_val_v3x *p = dev->params_vdev.priv_val;
1006
1007 if (p->buf_3dnr_iir[0].mem_priv) {
1008 if (!p->buf_3dnr_iir[0].is_need_vaddr)
1009 p->buf_3dnr_iir[0].vaddr = g_ops->vaddr(p->buf_3dnr_iir[0].mem_priv);
1010 iir_addr = p->buf_3dnr_iir[0].vaddr;
1011 iir_size = p->buf_3dnr_iir[0].size;
1012 }
1013 if (p->buf_3dnr_cur[0].mem_priv) {
1014 if (!p->buf_3dnr_cur[0].is_need_vaddr)
1015 p->buf_3dnr_cur[0].vaddr = g_ops->vaddr(p->buf_3dnr_cur[0].mem_priv);
1016 cur_addr = p->buf_3dnr_cur[0].vaddr;
1017 cur_size = p->buf_3dnr_cur[0].size;
1018 }
1019 if (p->buf_3dnr_ds[0].mem_priv) {
1020 if (!p->buf_3dnr_ds[0].is_need_vaddr)
1021 p->buf_3dnr_ds[0].vaddr = g_ops->vaddr(p->buf_3dnr_ds[0].mem_priv);
1022 ds_addr = p->buf_3dnr_ds[0].vaddr;
1023 ds_size = p->buf_3dnr_ds[0].size;
1024 }
1025 }
1026
1027 if (iir_addr) {
1028 snprintf(file, sizeof(file), "/tmp/%s_bay3d_iir", dev->name);
1029 fp = filp_open(file, O_RDWR | O_CREAT, 0644);
1030 if (IS_ERR(fp)) {
1031 dev_err(dev->dev, "open %s fail\n", file);
1032 return;
1033 }
1034 kernel_write(fp, iir_addr, iir_size, &fp->f_pos);
1035 filp_close(fp, NULL);
1036 }
1037 if (cur_addr) {
1038 snprintf(file, sizeof(file), "/tmp/%s_bay3d_cur", dev->name);
1039 fp = filp_open(file, O_RDWR | O_CREAT, 0644);
1040 if (IS_ERR(fp)) {
1041 dev_err(dev->dev, "open %s fail\n", file);
1042 return;
1043 }
1044 kernel_write(fp, cur_addr, cur_size, &fp->f_pos);
1045 filp_close(fp, NULL);
1046 }
1047 if (ds_addr) {
1048 snprintf(file, sizeof(file), "/tmp/%s_bay3d_ds", dev->name);
1049 fp = filp_open(file, O_RDWR | O_CREAT, 0644);
1050 if (IS_ERR(fp)) {
1051 dev_err(dev->dev, "open %s fail\n", file);
1052 return;
1053 }
1054 kernel_write(fp, ds_addr, ds_size, &fp->f_pos);
1055 filp_close(fp, NULL);
1056 }
1057 }
1058
rkisp_proc_write(struct file * file,const char __user * user_buf,size_t user_len,loff_t * pos)1059 static ssize_t rkisp_proc_write(struct file *file,
1060 const char __user *user_buf,
1061 size_t user_len, loff_t *pos)
1062 {
1063 struct rkisp_device *dev = PDE_DATA(file_inode(file));
1064 char *tmp, *buf = vmalloc(user_len + 1);
1065 u32 val, reg;
1066 int ret;
1067
1068 if (!buf)
1069 return -ENOMEM;
1070 if (copy_from_user(buf, user_buf, user_len) != 0) {
1071 vfree(buf);
1072 return -EFAULT;
1073 }
1074 if (buf[user_len - 1] == '\n')
1075 buf[user_len - 1] = 0;
1076 else
1077 buf[user_len] = 0;
1078 dev_info(dev->dev, "%s cnt:%zu %s\n", __func__, user_len, buf);
1079 tmp = strstr(buf, "mode=");
1080 if (tmp) {
1081 tmp += 5;
1082 ret = kstrtou32(tmp, 16, &val);
1083 if (ret)
1084 goto end;
1085 dev->procfs.mode = val;
1086 if (val & RKISP_PROCFS_DUMP_MEM)
1087 rkisp_proc_dump_mem(dev);
1088 } else if (dev->procfs.mode &
1089 (RKISP_PROCFS_FIL_AIQ | RKISP_PROCFS_FIL_SW)) {
1090 char *p_reg, *p_val;
1091
1092 p_reg = buf;
1093 tmp = strstr(p_reg, "=");
1094 while (tmp) {
1095 *tmp = '\0';
1096 ret = kstrtou32(p_reg, 16, ®);
1097 if (ret)
1098 goto end;
1099 p_val = tmp + 1;
1100 tmp = strstr(p_val, " ");
1101 if (tmp) {
1102 *tmp = '\0';
1103 p_reg = tmp + 1;
1104 }
1105 ret = kstrtou32(p_val, 16, &val);
1106 if (ret)
1107 goto end;
1108 if (dev->procfs.mode & RKISP_PROCFS_FIL_SW)
1109 writel(val, dev->hw_dev->base_addr + reg);
1110 else
1111 rkisp_write(dev, reg, val, false);
1112
1113 tmp = strstr(p_reg, "=");
1114 }
1115 }
1116 end:
1117 vfree(buf);
1118 return user_len;
1119 }
1120
isp_open(struct inode * inode,struct file * file)1121 static int isp_open(struct inode *inode, struct file *file)
1122 {
1123 struct rkisp_device *data = PDE_DATA(inode);
1124
1125 return single_open(file, isp_show, data);
1126 }
1127
1128 static const struct proc_ops ops = {
1129 .proc_open = isp_open,
1130 .proc_read = seq_read,
1131 .proc_lseek = seq_lseek,
1132 .proc_release = single_release,
1133 .proc_write = rkisp_proc_write,
1134 };
1135
rkisp_proc_init(struct rkisp_device * dev)1136 int rkisp_proc_init(struct rkisp_device *dev)
1137 {
1138 memset(&dev->procfs, 0, sizeof(dev->procfs));
1139 dev->procfs.procfs = proc_create_data(dev->name, 0, NULL, &ops, dev);
1140 if (!dev->procfs.procfs)
1141 return -EINVAL;
1142 init_waitqueue_head(&dev->procfs.fs_wait);
1143 init_waitqueue_head(&dev->procfs.fe_wait);
1144 return 0;
1145 }
1146
rkisp_proc_cleanup(struct rkisp_device * dev)1147 void rkisp_proc_cleanup(struct rkisp_device *dev)
1148 {
1149 if (dev->procfs.procfs)
1150 remove_proc_entry(dev->name, NULL);
1151 dev->procfs.procfs = NULL;
1152 }
1153
1154 #endif /* CONFIG_PROC_FS */
1155