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
14 #ifdef CONFIG_PROC_FS
15
isp20_show(struct rkisp_device * dev,struct seq_file * p)16 static void isp20_show(struct rkisp_device *dev, struct seq_file *p)
17 {
18 u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
19 static const char * const effect[] = {
20 "BLACKWHITE",
21 "NEGATIVE",
22 "SEPIA",
23 "COLOR_SEL",
24 "EMBOSS",
25 "SKETCH",
26 "SHARPEN",
27 "RKSHARPEN"
28 };
29 u32 val;
30
31 val = rkisp_read(dev, ISP_DPCC0_MODE, false);
32 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC0", (val & 1) ? "ON" : "OFF", val);
33 val = rkisp_read(dev, ISP_DPCC1_MODE, false);
34 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC1", (val & 1) ? "ON" : "OFF", val);
35 val = rkisp_read(dev, ISP_DPCC2_MODE, false);
36 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC2", (val & 1) ? "ON" : "OFF", val);
37 val = rkisp_read(dev, ISP_BLS_CTRL, false);
38 seq_printf(p, "%-10s %s(0x%x)\n", "BLS", (val & 1) ? "ON" : "OFF", val);
39 val = rkisp_read(dev, CIF_ISP_CTRL, false);
40 seq_printf(p, "%-10s %s(0x%x)\n", "SDG",
41 (val & CIF_ISP_CTRL_ISP_GAMMA_IN_ENA) ? "ON" : "OFF", val);
42 val = rkisp_read(dev, ISP_LSC_CTRL, false);
43 seq_printf(p, "%-10s %s(0x%x)\n", "LSC", (val & 1) ? "ON" : "OFF", val);
44 val = rkisp_read(dev, CIF_ISP_CTRL, false);
45 seq_printf(p, "%-10s %s(0x%x) (gain: 0x%08x, 0x%08x)\n", "AWBGAIN",
46 (val & CIF_ISP_CTRL_ISP_AWB_ENA) ? "ON" : "OFF", val,
47 rkisp_read(dev, CIF_ISP_AWB_GAIN_G_V12, false),
48 rkisp_read(dev, CIF_ISP_AWB_GAIN_RB_V12, false));
49 val = rkisp_read(dev, ISP_DEBAYER_CONTROL, false);
50 seq_printf(p, "%-10s %s(0x%x)\n", "DEBAYER", (val & 1) ? "ON" : "OFF", val);
51 val = rkisp_read(dev, ISP_CCM_CTRL, false);
52 seq_printf(p, "%-10s %s(0x%x)\n", "CCM", (val & 1) ? "ON" : "OFF", val);
53 val = rkisp_read(dev, ISP_GAMMA_OUT_CTRL, false);
54 seq_printf(p, "%-10s %s(0x%x)\n", "GAMMA_OUT", (val & 1) ? "ON" : "OFF", val);
55 val = rkisp_read(dev, CPROC_CTRL, false);
56 seq_printf(p, "%-10s %s(0x%x)\n", "CPROC", (val & 1) ? "ON" : "OFF", val);
57 val = rkisp_read(dev, CIF_IMG_EFF_CTRL, false);
58 seq_printf(p, "%-10s %s(0x%x) (effect: %s)\n", "IE",
59 (val & 1) ? "ON" : "OFF", val,
60 effect[(val & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
61 val = rkisp_read(dev, ISP_WDR_CTRL0, false);
62 seq_printf(p, "%-10s %s(0x%x)\n", "WDR", (val & 1) ? "ON" : "OFF", val);
63 val = rkisp_read(dev, ISP_HDRTMO_CTRL, false);
64 seq_printf(p, "%-10s %s(0x%x)\n", "HDRTMO", (val & 1) ? "ON" : "OFF", val);
65 val = rkisp_read(dev, ISP_HDRMGE_CTRL, false);
66 seq_printf(p, "%-10s %s(0x%x)\n", "HDRMGE", (val & 1) ? "ON" : "OFF", val);
67 val = rkisp_read(dev, ISP_RAWNR_CTRL, false);
68 seq_printf(p, "%-10s %s(0x%x)\n", "RAWNR", (val & 1) ? "ON" : "OFF", val);
69 val = rkisp_read(dev, ISP_GIC_CONTROL, false);
70 seq_printf(p, "%-10s %s(0x%x)\n", "GIC", (val & 1) ? "ON" : "OFF", val);
71 val = rkisp_read(dev, ISP_DHAZ_CTRL, false);
72 seq_printf(p, "%-10s %s(0x%x)\n", "DHAZ", (val & 1) ? "ON" : "OFF", val);
73 val = rkisp_read(dev, ISP_3DLUT_CTRL, false);
74 seq_printf(p, "%-10s %s(0x%x)\n", "3DLUT", (val & 1) ? "ON" : "OFF", val);
75 val = rkisp_read(dev, ISP_GAIN_CTRL, false);
76 seq_printf(p, "%-10s %s(0x%x)\n", "GAIN", val ? "ON" : "OFF", val);
77 val = rkisp_read(dev, ISP_LDCH_STS, false);
78 seq_printf(p, "%-10s %s(0x%x)\n", "LDCH", (val & 1) ? "ON" : "OFF", val);
79 val = rkisp_read(dev, ISP_CTRL, false);
80 seq_printf(p, "%-10s %s(0x%x)\n", "CSM",
81 (val & full_range_flg) ? "FULL" : "LIMITED", val);
82
83 val = rkisp_read(dev, ISP_AFM_CTRL, false);
84 seq_printf(p, "%-10s %s(0x%x)\n", "SIAF", (val & 1) ? "ON" : "OFF", val);
85 val = rkisp_read(dev, CIF_ISP_AWB_PROP_V10, false);
86 seq_printf(p, "%-10s %s(0x%x)\n", "SIAWB",
87 (val & CIF_ISP_AWB_ENABLE) ? "ON" : "OFF", val);
88 val = rkisp_read(dev, ISP_YUVAE_CTRL, false);
89 seq_printf(p, "%-10s %s(0x%x)\n", "YUVAE", (val & 1) ? "ON" : "OFF", val);
90 val = rkisp_read(dev, ISP_HIST_HIST_CTRL, false);
91 seq_printf(p, "%-10s %s(0x%x)\n", "SIHST", (val & 1) ? "ON" : "OFF", val);
92 val = rkisp_read(dev, ISP_RAWAF_CTRL, false);
93 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAF", (val & 1) ? "ON" : "OFF", val);
94 val = rkisp_read(dev, ISP_RAWAWB_CTRL, false);
95 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAWB", (val & 1) ? "ON" : "OFF", val);
96 val = rkisp_read(dev, ISP_RAWAE_LITE_CTRL, false);
97 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE0", (val & 1) ? "ON" : "OFF", val);
98 val = rkisp_read(dev, RAWAE_BIG2_BASE, false);
99 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE1", (val & 1) ? "ON" : "OFF", val);
100 val = rkisp_read(dev, RAWAE_BIG3_BASE, false);
101 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE2", (val & 1) ? "ON" : "OFF", val);
102 val = rkisp_read(dev, RAWAE_BIG1_BASE, false);
103 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE3", (val & 1) ? "ON" : "OFF", val);
104 val = rkisp_read(dev, ISP_RAWHIST_LITE_CTRL, false);
105 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST0", (val & 1) ? "ON" : "OFF", val);
106 val = rkisp_read(dev, ISP_RAWHIST_BIG2_BASE, false);
107 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST1", (val & 1) ? "ON" : "OFF", val);
108 val = rkisp_read(dev, ISP_RAWHIST_BIG3_BASE, false);
109 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST2", (val & 1) ? "ON" : "OFF", val);
110 val = rkisp_read(dev, ISP_RAWHIST_BIG1_BASE, false);
111 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val);
112 }
113
isp21_show(struct rkisp_device * dev,struct seq_file * p)114 static void isp21_show(struct rkisp_device *dev, struct seq_file *p)
115 {
116 u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
117 static const char * const effect[] = {
118 "BLACKWHITE",
119 "NEGATIVE",
120 "SEPIA",
121 "COLOR_SEL",
122 "EMBOSS",
123 "SKETCH",
124 "SHARPEN",
125 "RKSHARPEN"
126 };
127 u32 val, tmp;
128
129 val = rkisp_read(dev, ISP_DPCC0_MODE, false);
130 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC0", (val & 1) ? "ON" : "OFF", val);
131 val = rkisp_read(dev, ISP_DPCC1_MODE, false);
132 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC1", (val & 1) ? "ON" : "OFF", val);
133 val = rkisp_read(dev, ISP_BLS_CTRL, false);
134 seq_printf(p, "%-10s %s(0x%x)\n", "BLS", (val & 1) ? "ON" : "OFF", val);
135 val = rkisp_read(dev, CIF_ISP_CTRL, false);
136 seq_printf(p, "%-10s %s(0x%x)\n", "SDG",
137 (val & CIF_ISP_CTRL_ISP_GAMMA_IN_ENA) ? "ON" : "OFF", val);
138 val = rkisp_read(dev, ISP_LSC_CTRL, false);
139 seq_printf(p, "%-10s %s(0x%x)\n", "LSC", (val & 1) ? "ON" : "OFF", val);
140 val = rkisp_read(dev, CIF_ISP_CTRL, false);
141 seq_printf(p, "%-10s %s(0x%x) (gain: 0x%08x, 0x%08x)\n", "AWBGAIN",
142 (val & CIF_ISP_CTRL_ISP_AWB_ENA) ? "ON" : "OFF", val,
143 rkisp_read(dev, CIF_ISP_AWB_GAIN_G_V12, false),
144 rkisp_read(dev, CIF_ISP_AWB_GAIN_RB_V12, false));
145 val = rkisp_read(dev, ISP_DEBAYER_CONTROL, false);
146 seq_printf(p, "%-10s %s(0x%x)\n", "DEBAYER", (val & 1) ? "ON" : "OFF", val);
147 val = rkisp_read(dev, ISP_CCM_CTRL, false);
148 seq_printf(p, "%-10s %s(0x%x)\n", "CCM", (val & 1) ? "ON" : "OFF", val);
149 val = rkisp_read(dev, ISP_GAMMA_OUT_CTRL, false);
150 seq_printf(p, "%-10s %s(0x%x)\n", "GAMMA_OUT", (val & 1) ? "ON" : "OFF", val);
151 val = rkisp_read(dev, CPROC_CTRL, false);
152 seq_printf(p, "%-10s %s(0x%x)\n", "CPROC", (val & 1) ? "ON" : "OFF", val);
153 val = rkisp_read(dev, CIF_IMG_EFF_CTRL, false);
154 seq_printf(p, "%-10s %s(0x%x) (effect: %s)\n", "IE",
155 (val & 1) ? "ON" : "OFF", val,
156 effect[(val & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
157 val = rkisp_read(dev, ISP21_DRC_CTRL0, false);
158 seq_printf(p, "%-10s %s(0x%x)\n", "HDRDRC", (val & 1) ? "ON" : "OFF", val);
159 val = rkisp_read(dev, ISP_HDRMGE_CTRL, false);
160 seq_printf(p, "%-10s %s(0x%x)\n", "HDRMGE", (val & 1) ? "ON" : "OFF", val);
161 val = rkisp_read(dev, ISP21_BAYNR_CTRL, false);
162 seq_printf(p, "%-10s %s(0x%x)\n", "BAYNR", (val & 1) ? "ON" : "OFF", val);
163 val = rkisp_read(dev, ISP21_BAY3D_CTRL, false);
164 seq_printf(p, "%-10s %s(0x%x)\n", "BAY3D", (val & 1) ? "ON" : "OFF", val);
165 val = rkisp_read(dev, ISP21_YNR_GLOBAL_CTRL, false);
166 seq_printf(p, "%-10s %s(0x%x)\n", "YNR", (val & 1) ? "ON" : "OFF", val);
167 val = rkisp_read(dev, ISP21_CNR_CTRL, false);
168 seq_printf(p, "%-10s %s(0x%x)\n", "CNR", (val & 1) ? "ON" : "OFF", val);
169 val = rkisp_read(dev, ISP21_SHARP_SHARP_EN, false);
170 seq_printf(p, "%-10s %s(0x%x)\n", "SHARP", (val & 1) ? "ON" : "OFF", val);
171 val = rkisp_read(dev, ISP_GIC_CONTROL, false);
172 seq_printf(p, "%-10s %s(0x%x)\n", "GIC", (val & 1) ? "ON" : "OFF", val);
173 val = rkisp_read(dev, ISP_DHAZ_CTRL, false);
174 seq_printf(p, "%-10s %s(0x%x)\n", "DHAZ", (val & 1) ? "ON" : "OFF", val);
175 val = rkisp_read(dev, ISP_3DLUT_CTRL, false);
176 seq_printf(p, "%-10s %s(0x%x)\n", "3DLUT", (val & 1) ? "ON" : "OFF", val);
177 val = rkisp_read(dev, ISP_LDCH_STS, false);
178 seq_printf(p, "%-10s %s(0x%x)\n", "LDCH", (val & 1) ? "ON" : "OFF", val);
179 val = rkisp_read(dev, ISP_CTRL, false);
180 tmp = rkisp_read(dev, ISP_CC_COEFF_0, false);
181 seq_printf(p, "%-10s %s(0x%x), y_offs:0x%x c_offs:0x%x\n"
182 "\t coeff Y:0x%x 0x%x 0x%x CB:0x%x 0x%x 0x%x CR:0x%x 0x%x 0x%x\n",
183 "CSM", (val & full_range_flg) ? "FULL" : "LIMIT", val,
184 (tmp >> 24) & 0x3f,
185 (tmp >> 16) & 0xff ? (tmp >> 16) & 0xff : 128,
186 tmp & 0x1ff,
187 rkisp_read(dev, ISP_CC_COEFF_1, false),
188 rkisp_read(dev, ISP_CC_COEFF_2, false),
189 rkisp_read(dev, ISP_CC_COEFF_3, false),
190 rkisp_read(dev, ISP_CC_COEFF_4, false),
191 rkisp_read(dev, ISP_CC_COEFF_5, false),
192 rkisp_read(dev, ISP_CC_COEFF_6, false),
193 rkisp_read(dev, ISP_CC_COEFF_7, false),
194 rkisp_read(dev, ISP_CC_COEFF_8, false));
195 val = rkisp_read(dev, ISP_AFM_CTRL, false);
196 seq_printf(p, "%-10s %s(0x%x)\n", "SIAF", (val & 1) ? "ON" : "OFF", val);
197 val = rkisp_read(dev, CIF_ISP_AWB_PROP_V10, false);
198 seq_printf(p, "%-10s %s(0x%x)\n", "SIAWB",
199 (val & CIF_ISP_AWB_ENABLE) ? "ON" : "OFF", val);
200 val = rkisp_read(dev, ISP_YUVAE_CTRL, false);
201 seq_printf(p, "%-10s %s(0x%x)\n", "YUVAE", (val & 1) ? "ON" : "OFF", val);
202 val = rkisp_read(dev, ISP_HIST_HIST_CTRL, false);
203 seq_printf(p, "%-10s %s(0x%x)\n", "SIHST", (val & 1) ? "ON" : "OFF", val);
204 val = rkisp_read(dev, ISP_RAWAF_CTRL, false);
205 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAF", (val & 1) ? "ON" : "OFF", val);
206 val = rkisp_read(dev, ISP21_RAWAWB_CTRL, false);
207 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAWB", (val & 1) ? "ON" : "OFF", val);
208 val = rkisp_read(dev, ISP_RAWAE_LITE_CTRL, false);
209 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE0", (val & 1) ? "ON" : "OFF", val);
210 val = rkisp_read(dev, RAWAE_BIG2_BASE, false);
211 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE1", (val & 1) ? "ON" : "OFF", val);
212 val = rkisp_read(dev, RAWAE_BIG3_BASE, false);
213 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE2", (val & 1) ? "ON" : "OFF", val);
214 val = rkisp_read(dev, RAWAE_BIG1_BASE, false);
215 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE3", (val & 1) ? "ON" : "OFF", val);
216 val = rkisp_read(dev, ISP_RAWHIST_LITE_CTRL, false);
217 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST0", (val & 1) ? "ON" : "OFF", val);
218 val = rkisp_read(dev, ISP_RAWHIST_BIG2_BASE, false);
219 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST1", (val & 1) ? "ON" : "OFF", val);
220 val = rkisp_read(dev, ISP_RAWHIST_BIG3_BASE, false);
221 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST2", (val & 1) ? "ON" : "OFF", val);
222 val = rkisp_read(dev, ISP_RAWHIST_BIG1_BASE, false);
223 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val);
224 }
225
isp30_show(struct rkisp_device * dev,struct seq_file * p)226 static void isp30_show(struct rkisp_device *dev, struct seq_file *p)
227 {
228 u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
229 static const char * const effect[] = {
230 "BLACKWHITE",
231 "NEGATIVE",
232 "SEPIA",
233 "COLOR_SEL",
234 "EMBOSS",
235 "SKETCH",
236 "SHARPEN",
237 "RKSHARPEN"
238 };
239 u32 val, tmp;
240
241 val = rkisp_read(dev, ISP3X_CMSK_CTRL0, false);
242 seq_printf(p, "%-10s %s(0x%x)\n", "CMSK", (val & 1) ? "ON" : "OFF", val);
243 val = rkisp_read(dev, ISP3X_DPCC0_MODE, false);
244 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC0", (val & 1) ? "ON" : "OFF", val);
245 val = rkisp_read(dev, ISP3X_DPCC1_MODE, false);
246 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC1", (val & 1) ? "ON" : "OFF", val);
247 val = rkisp_read(dev, ISP3X_DPCC2_MODE, false);
248 seq_printf(p, "%-10s %s(0x%x)\n", "DPCC2", (val & 1) ? "ON" : "OFF", val);
249 val = rkisp_read(dev, ISP3X_BLS_CTRL, false);
250 seq_printf(p, "%-10s %s(0x%x)\n", "BLS", (val & 1) ? "ON" : "OFF", val);
251 val = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
252 seq_printf(p, "%-10s %s(0x%x)\n", "SDG", (val & BIT(6)) ? "ON" : "OFF", val);
253 val = rkisp_read(dev, ISP3X_LSC_CTRL, false);
254 seq_printf(p, "%-10s %s(0x%x)\n", "LSC", (val & 1) ? "ON" : "OFF", val);
255 val = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
256 seq_printf(p, "%-10s %s(0x%x) (gain: 0x%08x, 0x%08x)\n", "AWBGAIN",
257 (val & BIT(7)) ? "ON" : "OFF", val,
258 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_G, false),
259 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_RB, false));
260 val = rkisp_read(dev, ISP3X_DEBAYER_CONTROL, false);
261 seq_printf(p, "%-10s %s(0x%x)\n", "DEBAYER", (val & 1) ? "ON" : "OFF", val);
262 val = rkisp_read(dev, ISP3X_CCM_CTRL, false);
263 seq_printf(p, "%-10s %s(0x%x)\n", "CCM", (val & 1) ? "ON" : "OFF", val);
264 val = rkisp_read(dev, ISP3X_GAMMA_OUT_CTRL, false);
265 seq_printf(p, "%-10s %s(0x%x)\n", "GAMMA_OUT", (val & 1) ? "ON" : "OFF", val);
266 val = rkisp_read(dev, ISP3X_CPROC_CTRL, false);
267 seq_printf(p, "%-10s %s(0x%x)\n", "CPROC", (val & 1) ? "ON" : "OFF", val);
268 val = rkisp_read(dev, ISP3X_IMG_EFF_CTRL, false);
269 seq_printf(p, "%-10s %s(0x%x) (effect: %s)\n", "IE", (val & 1) ? "ON" : "OFF", val,
270 effect[(val & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
271 val = rkisp_read(dev, ISP3X_DRC_CTRL0, false);
272 seq_printf(p, "%-10s %s(0x%x)\n", "HDRDRC", (val & 1) ? "ON" : "OFF", val);
273 val = rkisp_read(dev, ISP3X_HDRMGE_CTRL, false);
274 seq_printf(p, "%-10s %s(0x%x)\n", "HDRMGE", (val & 1) ? "ON" : "OFF", val);
275 val = rkisp_read(dev, ISP3X_BAYNR_CTRL, false);
276 seq_printf(p, "%-10s %s(0x%x)\n", "BAYNR", (val & 1) ? "ON" : "OFF", val);
277 val = rkisp_read(dev, ISP3X_BAY3D_CTRL, false);
278 seq_printf(p, "%-10s %s(0x%x)\n", "BAY3D", (val & 1) ? "ON" : "OFF", val);
279 val = rkisp_read(dev, ISP3X_YNR_GLOBAL_CTRL, false);
280 seq_printf(p, "%-10s %s(0x%x)\n", "YNR", (val & 1) ? "ON" : "OFF", val);
281 val = rkisp_read(dev, ISP3X_CNR_CTRL, false);
282 seq_printf(p, "%-10s %s(0x%x)\n", "CNR", (val & 1) ? "ON" : "OFF", val);
283 val = rkisp_read(dev, ISP3X_SHARP_EN, false);
284 seq_printf(p, "%-10s %s(0x%x)\n", "SHARP", (val & 1) ? "ON" : "OFF", val);
285 val = rkisp_read(dev, ISP3X_GIC_CONTROL, false);
286 seq_printf(p, "%-10s %s(0x%x)\n", "GIC", (val & 1) ? "ON" : "OFF", val);
287 val = rkisp_read(dev, ISP3X_DHAZ_CTRL, false);
288 seq_printf(p, "%-10s %s(0x%x)\n", "DHAZ", (val & 1) ? "ON" : "OFF", val);
289 val = rkisp_read(dev, ISP3X_3DLUT_CTRL, false);
290 seq_printf(p, "%-10s %s(0x%x)\n", "3DLUT", (val & 1) ? "ON" : "OFF", val);
291 val = rkisp_read(dev, ISP3X_LDCH_STS, false);
292 seq_printf(p, "%-10s %s(0x%x)\n", "LDCH", (val & 1) ? "ON" : "OFF", val);
293 val = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
294 tmp = rkisp_read(dev, ISP3X_ISP_CC_COEFF_0, false);
295 seq_printf(p, "%-10s %s(0x%x), y_offs:0x%x c_offs:0x%x\n"
296 "\t coeff Y:0x%x 0x%x 0x%x CB:0x%x 0x%x 0x%x CR:0x%x 0x%x 0x%x\n",
297 "CSM", (val & full_range_flg) ? "FULL" : "LIMIT", val,
298 (tmp >> 24) & 0x3f,
299 (tmp >> 16) & 0xff ? (tmp >> 16) & 0xff : 128,
300 tmp & 0x1ff,
301 rkisp_read(dev, ISP3X_ISP_CC_COEFF_1, false),
302 rkisp_read(dev, ISP3X_ISP_CC_COEFF_2, false),
303 rkisp_read(dev, ISP3X_ISP_CC_COEFF_3, false),
304 rkisp_read(dev, ISP3X_ISP_CC_COEFF_4, false),
305 rkisp_read(dev, ISP3X_ISP_CC_COEFF_5, false),
306 rkisp_read(dev, ISP3X_ISP_CC_COEFF_6, false),
307 rkisp_read(dev, ISP3X_ISP_CC_COEFF_7, false),
308 rkisp_read(dev, ISP3X_ISP_CC_COEFF_8, false));
309 val = rkisp_read(dev, ISP3X_CAC_CTRL, false);
310 seq_printf(p, "%-10s %s(0x%x)\n", "CAC", (val & 1) ? "ON" : "OFF", val);
311 val = rkisp_read(dev, ISP3X_GAIN_CTRL, false);
312 seq_printf(p, "%-10s %s(0x%x)\n", "GAIN", (val & 1) ? "ON" : "OFF", val);
313 val = rkisp_read(dev, ISP3X_RAWAF_CTRL, false);
314 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAF", (val & 1) ? "ON" : "OFF", val);
315 val = rkisp_read(dev, ISP3X_RAWAWB_CTRL, false);
316 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAWB", (val & 1) ? "ON" : "OFF", val);
317 val = rkisp_read(dev, ISP3X_RAWAE_LITE_CTRL, false);
318 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE0", (val & 1) ? "ON" : "OFF", val);
319 val = rkisp_read(dev, ISP3X_RAWAE_BIG2_BASE, false);
320 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE1", (val & 1) ? "ON" : "OFF", val);
321 val = rkisp_read(dev, ISP3X_RAWAE_BIG3_BASE, false);
322 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE2", (val & 1) ? "ON" : "OFF", val);
323 val = rkisp_read(dev, ISP3X_RAWAE_BIG1_BASE, false);
324 seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE3", (val & 1) ? "ON" : "OFF", val);
325 val = rkisp_read(dev, ISP3X_RAWHIST_LITE_CTRL, false);
326 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST0", (val & 1) ? "ON" : "OFF", val);
327 val = rkisp_read(dev, ISP3X_RAWHIST_BIG2_BASE, false);
328 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST1", (val & 1) ? "ON" : "OFF", val);
329 val = rkisp_read(dev, ISP3X_RAWHIST_BIG3_BASE, false);
330 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST2", (val & 1) ? "ON" : "OFF", val);
331 val = rkisp_read(dev, ISP3X_RAWHIST_BIG1_BASE, false);
332 seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val);
333 val = rkisp_read(dev, ISP3X_ISP_CTRL1, true);
334 seq_printf(p, "%-10s %s(0x%x)\n", "BigMode", val & BIT(28) ? "ON" : "OFF", val);
335 val = rkisp_read(dev, ISP3X_ISP_DEBUG1, true);
336 seq_printf(p, "%-10s space full status group (0x%x)\n"
337 "\t ibuf2:0x%x ibuf1:0x%x ibuf0:0x%x mpfbc_infifo:0x%x\n"
338 "\t r1fifo:0x%x r0fifo:0x%x outfifo:0x%x lafifo:0x%x\n",
339 "DEBUG1", val,
340 val >> 28, (val >> 24) & 0xf, (val >> 20) & 0xf, (val >> 16) & 0xf,
341 (val >> 12) & 0xf, (val >> 8) & 0xf, (val >> 4) & 0xf, val & 0xf);
342 val = rkisp_read(dev, ISP3X_ISP_DEBUG2, true);
343 seq_printf(p, "%-10s 0x%x\n"
344 "\t bay3d_fifo_full iir:%d cur:%d\n"
345 "\t module outform vertical counter:%d, out frame counter:%d\n"
346 "\t isp output line counter:%d\n",
347 "DEBUG2", val, !!(val & BIT(31)), !!(val & BIT(30)),
348 (val >> 16) & 0x3fff, (val >> 14) & 0x3, val & 0x3fff);
349 val = rkisp_read(dev, ISP3X_ISP_DEBUG3, true);
350 seq_printf(p, "%-10s isp pipeline group (0x%x)\n"
351 "\t mge(%d %d) rawnr(%d %d) bay3d(%d %d) tmo(%d %d)\n"
352 "\t gic(%d %d) dbr(%d %d) debayer(%d %d) dhaz(%d %d)\n"
353 "\t lut3d(%d %d) ldch(%d %d) ynr(%d %d) shp(%d %d)\n"
354 "\t cgc(%d %d) cac(%d %d) isp_out(%d %d) isp_in(%d %d)\n",
355 "DEBUG3", val,
356 !!(val & BIT(31)), !!(val & BIT(30)), !!(val & BIT(29)), !!(val & BIT(28)),
357 !!(val & BIT(27)), !!(val & BIT(26)), !!(val & BIT(25)), !!(val & BIT(24)),
358 !!(val & BIT(23)), !!(val & BIT(22)), !!(val & BIT(21)), !!(val & BIT(20)),
359 !!(val & BIT(19)), !!(val & BIT(18)), !!(val & BIT(17)), !!(val & BIT(16)),
360 !!(val & BIT(15)), !!(val & BIT(14)), !!(val & BIT(13)), !!(val & BIT(12)),
361 !!(val & BIT(11)), !!(val & BIT(10)), !!(val & BIT(9)), !!(val & BIT(8)),
362 !!(val & BIT(7)), !!(val & BIT(6)), !!(val & BIT(5)), !!(val & BIT(4)),
363 !!(val & BIT(3)), !!(val & BIT(2)), !!(val & BIT(1)), !!(val & BIT(0)));
364 }
365
isp30_unite_show(struct rkisp_device * dev,struct seq_file * p)366 static void isp30_unite_show(struct rkisp_device *dev, struct seq_file *p)
367 {
368 u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
369 static const char * const effect[] = {
370 "BLACKWHITE",
371 "NEGATIVE",
372 "SEPIA",
373 "COLOR_SEL",
374 "EMBOSS",
375 "SKETCH",
376 "SHARPEN",
377 "RKSHARPEN"
378 };
379 u32 v0, v1;
380
381 v0 = rkisp_read(dev, ISP3X_CMSK_CTRL0, false);
382 v1 = rkisp_next_read(dev, ISP3X_CMSK_CTRL0, false);
383 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
384 "CMSK",
385 (v0 & 1) ? "ON" : "OFF",
386 v0, (v1 & 1) ? "ON" : "OFF", v1);
387 v0 = rkisp_read(dev, ISP3X_DPCC0_MODE, false);
388 v1 = rkisp_next_read(dev, ISP3X_DPCC0_MODE, false);
389 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
390 "DPCC0",
391 (v0 & 1) ? "ON" : "OFF", v0,
392 (v1 & 1) ? "ON" : "OFF", v1);
393 v0 = rkisp_read(dev, ISP3X_DPCC1_MODE, false);
394 v1 = rkisp_next_read(dev, ISP3X_DPCC1_MODE, false);
395 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
396 "DPCC1",
397 (v0 & 1) ? "ON" : "OFF", v0,
398 (v1 & 1) ? "ON" : "OFF", v1);
399 v0 = rkisp_read(dev, ISP3X_DPCC2_MODE, false);
400 v1 = rkisp_next_read(dev, ISP3X_DPCC2_MODE, false);
401 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
402 "DPCC2",
403 (v0 & 1) ? "ON" : "OFF", v0,
404 (v1 & 1) ? "ON" : "OFF", v1);
405 v0 = rkisp_read(dev, ISP3X_BLS_CTRL, false);
406 v1 = rkisp_next_read(dev, ISP3X_BLS_CTRL, false);
407 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
408 "BLS",
409 (v0 & 1) ? "ON" : "OFF", v0,
410 (v1 & 1) ? "ON" : "OFF", v1);
411 v0 = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
412 v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL0, false);
413 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
414 "SDG",
415 (v0 & BIT(6)) ? "ON" : "OFF", v0,
416 (v1 & BIT(6)) ? "ON" : "OFF", v1);
417 v0 = rkisp_read(dev, ISP3X_LSC_CTRL, false);
418 v1 = rkisp_next_read(dev, ISP3X_LSC_CTRL, false);
419 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
420 "LSC",
421 (v0 & 1) ? "ON" : "OFF", v0,
422 (v1 & 1) ? "ON" : "OFF", v1);
423 v0 = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
424 v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL0, false);
425 seq_printf(p, "%-10s Left %s(0x%x) gain:0x%08x 0x%08x, Right %s(0x%x) gain:0x%08x 0x%08x\n",
426 "AWBGAIN",
427 (v0 & BIT(7)) ? "ON" : "OFF", v0,
428 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_G, false),
429 rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_RB, false),
430 (v1 & BIT(7)) ? "ON" : "OFF", v1,
431 rkisp_next_read(dev, ISP3X_ISP_AWB_GAIN0_G, false),
432 rkisp_next_read(dev, ISP3X_ISP_AWB_GAIN0_RB, false));
433 v0 = rkisp_read(dev, ISP3X_DEBAYER_CONTROL, false);
434 v1 = rkisp_next_read(dev, ISP3X_DEBAYER_CONTROL, false);
435 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
436 "DEBAYER",
437 (v0 & 1) ? "ON" : "OFF", v0,
438 (v1 & 1) ? "ON" : "OFF", v1);
439 v0 = rkisp_read(dev, ISP3X_CCM_CTRL, false);
440 v1 = rkisp_next_read(dev, ISP3X_CCM_CTRL, false);
441 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
442 "CCM",
443 (v0 & 1) ? "ON" : "OFF", v0,
444 (v1 & 1) ? "ON" : "OFF", v1);
445 v0 = rkisp_read(dev, ISP3X_GAMMA_OUT_CTRL, false);
446 v1 = rkisp_next_read(dev, ISP3X_GAMMA_OUT_CTRL, false);
447 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
448 "GAMMA_OUT",
449 (v0 & 1) ? "ON" : "OFF", v0,
450 (v1 & 1) ? "ON" : "OFF", v1);
451 v0 = rkisp_read(dev, ISP3X_CPROC_CTRL, false);
452 v1 = rkisp_next_read(dev, ISP3X_CPROC_CTRL, false);
453 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
454 "CPROC",
455 (v0 & 1) ? "ON" : "OFF", v0,
456 (v1 & 1) ? "ON" : "OFF", v1);
457 v0 = rkisp_read(dev, ISP3X_IMG_EFF_CTRL, false);
458 v1 = rkisp_next_read(dev, ISP3X_IMG_EFF_CTRL, false);
459 seq_printf(p, "%-10s Left %s(0x%x) effect:%s, Right %s(0x%x) effect:%s\n",
460 "IE",
461 (v0 & 1) ? "ON" : "OFF", v0,
462 effect[(v0 & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1],
463 (v1 & 1) ? "ON" : "OFF", v1,
464 effect[(v1 & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
465 v0 = rkisp_read(dev, ISP3X_DRC_CTRL0, false);
466 v1 = rkisp_next_read(dev, ISP3X_DRC_CTRL0, false);
467 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
468 "HDRDRC",
469 (v0 & 1) ? "ON" : "OFF", v0,
470 (v1 & 1) ? "ON" : "OFF", v1);
471 v0 = rkisp_read(dev, ISP3X_HDRMGE_CTRL, false);
472 v1 = rkisp_next_read(dev, ISP3X_HDRMGE_CTRL, false);
473 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
474 "HDRMGE",
475 (v0 & 1) ? "ON" : "OFF", v0,
476 (v1 & 1) ? "ON" : "OFF", v1);
477 v0 = rkisp_read(dev, ISP3X_BAYNR_CTRL, false);
478 v1 = rkisp_next_read(dev, ISP3X_BAYNR_CTRL, false);
479 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
480 "BAYNR",
481 (v0 & 1) ? "ON" : "OFF", v0,
482 (v1 & 1) ? "ON" : "OFF", v1);
483 v0 = rkisp_read(dev, ISP3X_BAY3D_CTRL, false);
484 v1 = rkisp_next_read(dev, ISP3X_BAY3D_CTRL, false);
485 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
486 "BAY3D",
487 (v0 & 1) ? "ON" : "OFF", v0,
488 (v1 & 1) ? "ON" : "OFF", v1);
489 v0 = rkisp_read(dev, ISP3X_YNR_GLOBAL_CTRL, false);
490 v1 = rkisp_next_read(dev, ISP3X_YNR_GLOBAL_CTRL, false);
491 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
492 "YNR",
493 (v0 & 1) ? "ON" : "OFF", v0,
494 (v1 & 1) ? "ON" : "OFF", v1);
495 v0 = rkisp_read(dev, ISP3X_CNR_CTRL, false);
496 v1 = rkisp_next_read(dev, ISP3X_CNR_CTRL, false);
497 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
498 "CNR",
499 (v0 & 1) ? "ON" : "OFF", v0,
500 (v1 & 1) ? "ON" : "OFF", v1);
501 v0 = rkisp_read(dev, ISP3X_SHARP_EN, false);
502 v1 = rkisp_next_read(dev, ISP3X_SHARP_EN, false);
503 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
504 "SHARP",
505 (v0 & 1) ? "ON" : "OFF", v0,
506 (v1 & 1) ? "ON" : "OFF", v1);
507 v0 = rkisp_read(dev, ISP3X_GIC_CONTROL, false);
508 v1 = rkisp_next_read(dev, ISP3X_GIC_CONTROL, false);
509 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
510 "GIC",
511 (v0 & 1) ? "ON" : "OFF", v0,
512 (v1 & 1) ? "ON" : "OFF", v1);
513 v0 = rkisp_read(dev, ISP3X_DHAZ_CTRL, false);
514 v1 = rkisp_next_read(dev, ISP3X_DHAZ_CTRL, false);
515 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
516 "DHAZ",
517 (v0 & 1) ? "ON" : "OFF", v0,
518 (v1 & 1) ? "ON" : "OFF", v1);
519 v0 = rkisp_read(dev, ISP3X_3DLUT_CTRL, false);
520 v1 = rkisp_next_read(dev, ISP3X_3DLUT_CTRL, false);
521 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
522 "3DLUT",
523 (v0 & 1) ? "ON" : "OFF", v0,
524 (v1 & 1) ? "ON" : "OFF", v1);
525 v0 = rkisp_read(dev, ISP3X_LDCH_STS, false);
526 v1 = rkisp_next_read(dev, ISP3X_LDCH_STS, false);
527 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
528 "LDCH",
529 (v0 & 1) ? "ON" : "OFF", v0,
530 (v1 & 1) ? "ON" : "OFF", v1);
531 v0 = rkisp_read(dev, ISP3X_ISP_CTRL0, false);
532 v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL0, false);
533 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
534 "CSM",
535 (v0 & full_range_flg) ? "FULL" : "LIMIT", v0,
536 (v1 & full_range_flg) ? "FULL" : "LIMIT", v1);
537 v0 = rkisp_read(dev, ISP3X_CAC_CTRL, false);
538 v1 = rkisp_next_read(dev, ISP3X_CAC_CTRL, false);
539 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
540 "CAC",
541 (v0 & 1) ? "ON" : "OFF", v0,
542 (v1 & 1) ? "ON" : "OFF", v1);
543 v0 = rkisp_read(dev, ISP3X_GAIN_CTRL, false);
544 v1 = rkisp_next_read(dev, ISP3X_GAIN_CTRL, false);
545 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
546 "GAIN",
547 (v0 & 1) ? "ON" : "OFF", v0,
548 (v1 & 1) ? "ON" : "OFF", v1);
549 v0 = rkisp_read(dev, ISP3X_RAWAF_CTRL, false);
550 v1 = rkisp_next_read(dev, ISP3X_RAWAF_CTRL, false);
551 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
552 "RAWAF",
553 (v0 & 1) ? "ON" : "OFF", v0,
554 (v1 & 1) ? "ON" : "OFF", v1);
555 v0 = rkisp_read(dev, ISP3X_RAWAWB_CTRL, false);
556 v1 = rkisp_next_read(dev, ISP3X_RAWAWB_CTRL, false);
557 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
558 "RAWAWB",
559 (v0 & 1) ? "ON" : "OFF", v0,
560 (v1 & 1) ? "ON" : "OFF", v1);
561 v0 = rkisp_read(dev, ISP3X_RAWAE_LITE_CTRL, false);
562 v1 = rkisp_next_read(dev, ISP3X_RAWAE_LITE_CTRL, false);
563 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
564 "RAWAE0",
565 (v0 & 1) ? "ON" : "OFF", v0,
566 (v1 & 1) ? "ON" : "OFF", v1);
567 v0 = rkisp_read(dev, ISP3X_RAWAE_BIG2_BASE, false);
568 v1 = rkisp_next_read(dev, ISP3X_RAWAE_BIG2_BASE, false);
569 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
570 "RAWAE1",
571 (v0 & 1) ? "ON" : "OFF", v0,
572 (v1 & 1) ? "ON" : "OFF", v1);
573 v0 = rkisp_read(dev, ISP3X_RAWAE_BIG3_BASE, false);
574 v1 = rkisp_next_read(dev, ISP3X_RAWAE_BIG3_BASE, false);
575 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
576 "RAWAE2",
577 (v0 & 1) ? "ON" : "OFF", v0,
578 (v1 & 1) ? "ON" : "OFF", v1);
579 v0 = rkisp_read(dev, ISP3X_RAWAE_BIG1_BASE, false);
580 v1 = rkisp_next_read(dev, ISP3X_RAWAE_BIG1_BASE, false);
581 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
582 "RAWAE3",
583 (v0 & 1) ? "ON" : "OFF", v0,
584 (v1 & 1) ? "ON" : "OFF", v1);
585 v0 = rkisp_read(dev, ISP3X_RAWHIST_LITE_CTRL, false);
586 v1 = rkisp_next_read(dev, ISP3X_RAWHIST_LITE_CTRL, false);
587 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
588 "RAWHIST0",
589 (v0 & 1) ? "ON" : "OFF", v0,
590 (v1 & 1) ? "ON" : "OFF", v1);
591 v0 = rkisp_read(dev, ISP3X_RAWHIST_BIG2_BASE, false);
592 v1 = rkisp_next_read(dev, ISP3X_RAWHIST_BIG2_BASE, false);
593 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
594 "RAWHIST1",
595 (v0 & 1) ? "ON" : "OFF", v0,
596 (v1 & 1) ? "ON" : "OFF", v1);
597 v0 = rkisp_read(dev, ISP3X_RAWHIST_BIG3_BASE, false);
598 v1 = rkisp_next_read(dev, ISP3X_RAWHIST_BIG3_BASE, false);
599 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
600 "RAWHIST2",
601 (v0 & 1) ? "ON" : "OFF", v0,
602 (v1 & 1) ? "ON" : "OFF", v1);
603 v0 = rkisp_read(dev, ISP3X_RAWHIST_BIG1_BASE, false);
604 v1 = rkisp_next_read(dev, ISP3X_RAWHIST_BIG1_BASE, false);
605 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
606 "RAWHIST3",
607 (v0 & 1) ? "ON" : "OFF", v0,
608 (v1 & 1) ? "ON" : "OFF", v1);
609 v0 = rkisp_read(dev, ISP3X_ISP_CTRL1, true);
610 v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL1, true);
611 seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n",
612 "BigMode",
613 v0 & BIT(28) ? "ON" : "OFF", v0,
614 v1 & BIT(28) ? "ON" : "OFF", v1);
615 v0 = rkisp_read(dev, ISP3X_ISP_DEBUG1, true);
616 v1 = rkisp_next_read(dev, ISP3X_ISP_DEBUG1, true);
617 seq_printf(p, "%-10s space full status group. Left:0x%x Right:0x%x\n"
618 "\t ibuf2(L:0x%x R:0x%x) ibuf1(L:0x%x R:0x%x)\n"
619 "\t ibuf0(L:0x%x R:0x%x) mpfbc_infifo(L:0x%x R:0x%x)\n"
620 "\t r1fifo(L:0x%x R:0x%x) r0fifo(L:0x%x R:0x%x)\n"
621 "\t outfifo(L:0x%x R:0x%x) lafifo(L:0x%x R:0x%x)\n",
622 "DEBUG1", v0, v1,
623 v0 >> 28, v1 >> 28, (v0 >> 24) & 0xf, (v1 >> 24) & 0xf,
624 (v0 >> 20) & 0xf, (v1 >> 20) & 0xf, (v0 >> 16) & 0xf, (v1 >> 16) & 0xf,
625 (v0 >> 12) & 0xf, (v1 >> 12) & 0xf, (v0 >> 8) & 0xf, (v1 >> 8) & 0xf,
626 (v0 >> 4) & 0xf, (v1 >> 4) & 0xf, v0 & 0xf, v1 & 0xf);
627 v0 = rkisp_read(dev, ISP3X_ISP_DEBUG2, true);
628 v1 = rkisp_next_read(dev, ISP3X_ISP_DEBUG2, true);
629 seq_printf(p, "%-10s Left:0x%x Right:0x%x\n"
630 "\t bay3d_fifo_full iir(L:%d R:%d) cur(L:%d R:%d)\n"
631 "\t module outform vertical counter(L:%d R:%d), out frame counter:(L:%d R:%d)\n"
632 "\t isp output line counter(L:%d R:%d)\n",
633 "DEBUG2", v0, v1,
634 !!(v0 & BIT(31)), !!(v1 & BIT(31)), !!(v0 & BIT(30)), !!(v1 & BIT(30)),
635 (v0 >> 16) & 0x3fff, (v1 >> 16) & 0x3fff, (v0 >> 14) & 0x3, (v1 >> 14) & 0x3,
636 v0 & 0x3fff, v1 & 0x3fff);
637 v0 = rkisp_read(dev, ISP3X_ISP_DEBUG3, true);
638 v1 = rkisp_next_read(dev, ISP3X_ISP_DEBUG3, true);
639 seq_printf(p, "%-10s isp pipeline group Left:0x%x Right:0x%x\n"
640 "\t mge(L:%d %d R:%d %d) rawnr(L:%d %d R:%d %d)\n"
641 "\t bay3d(L:%d %d R:%d %d) tmo(L:%d %d R:%d %d)\n"
642 "\t gic(L:%d %d R:%d %d) dbr(L:%d %d R:%d %d)\n"
643 "\t debayer(L:%d %d R:%d %d) dhaz(L:%d %d R:%d %d)\n"
644 "\t lut3d(L:%d %d R:%d %d) ldch(L:%d %d R:%d %d)\n"
645 "\t ynr(L:%d %d R:%d %d) shp(L:%d %d R:%d %d)\n"
646 "\t cgc(L:%d %d R:%d %d) cac(L:%d %d R:%d %d)\n"
647 "\t isp_out(L:%d %d R:%d %d) isp_in(L:%d %d R:%d %d)\n",
648 "DEBUG3", v0, v1,
649 !!(v0 & BIT(31)), !!(v0 & BIT(30)), !!(v1 & BIT(31)), !!(v1 & BIT(30)),
650 !!(v0 & BIT(29)), !!(v0 & BIT(28)), !!(v1 & BIT(29)), !!(v1 & BIT(28)),
651 !!(v0 & BIT(27)), !!(v0 & BIT(26)), !!(v1 & BIT(27)), !!(v1 & BIT(26)),
652 !!(v0 & BIT(25)), !!(v0 & BIT(24)), !!(v1 & BIT(25)), !!(v1 & BIT(24)),
653 !!(v0 & BIT(23)), !!(v0 & BIT(22)), !!(v1 & BIT(23)), !!(v1 & BIT(22)),
654 !!(v0 & BIT(21)), !!(v0 & BIT(20)), !!(v1 & BIT(21)), !!(v1 & BIT(20)),
655 !!(v0 & BIT(19)), !!(v0 & BIT(18)), !!(v1 & BIT(19)), !!(v1 & BIT(18)),
656 !!(v0 & BIT(17)), !!(v0 & BIT(16)), !!(v1 & BIT(17)), !!(v1 & BIT(16)),
657 !!(v0 & BIT(15)), !!(v0 & BIT(14)), !!(v1 & BIT(15)), !!(v1 & BIT(14)),
658 !!(v0 & BIT(13)), !!(v0 & BIT(12)), !!(v1 & BIT(13)), !!(v1 & BIT(12)),
659 !!(v0 & BIT(11)), !!(v0 & BIT(10)), !!(v1 & BIT(11)), !!(v1 & BIT(10)),
660 !!(v0 & BIT(9)), !!(v0 & BIT(8)), !!(v1 & BIT(9)), !!(v1 & BIT(8)),
661 !!(v0 & BIT(7)), !!(v0 & BIT(6)), !!(v1 & BIT(7)), !!(v1 & BIT(6)),
662 !!(v0 & BIT(5)), !!(v0 & BIT(4)), !!(v1 & BIT(5)), !!(v1 & BIT(4)),
663 !!(v0 & BIT(3)), !!(v0 & BIT(2)), !!(v1 & BIT(3)), !!(v1 & BIT(2)),
664 !!(v0 & BIT(1)), !!(v0 & BIT(0)), !!(v1 & BIT(1)), !!(v1 & BIT(0)));
665 }
666
isp_show(struct seq_file * p,void * v)667 static int isp_show(struct seq_file *p, void *v)
668 {
669 struct rkisp_device *dev = p->private;
670 struct rkisp_isp_subdev *sdev = &dev->isp_sdev;
671 struct rkisp_sensor_info *sensor = dev->active_sensor;
672 u32 val = 0;
673
674 seq_printf(p, "%-10s Version:v%02x.%02x.%02x\n",
675 dev->name,
676 RKISP_DRIVER_VERSION >> 16,
677 (RKISP_DRIVER_VERSION & 0xff00) >> 8,
678 RKISP_DRIVER_VERSION & 0x00ff);
679 for (val = 0; val < dev->hw_dev->num_clks; val++) {
680 seq_printf(p, "%-10s %ld\n",
681 dev->hw_dev->match_data->clks[val],
682 clk_get_rate(dev->hw_dev->clks[val]));
683 }
684 if (!(dev->isp_state & ISP_START))
685 return 0;
686
687 seq_printf(p, "%-10s Cnt:%d ErrCnt:%d\n",
688 "Interrupt",
689 dev->isp_isr_cnt,
690 dev->isp_err_cnt);
691
692 if (sensor && sensor->fi.interval.numerator)
693 val = sensor->fi.interval.denominator / sensor->fi.interval.numerator;
694 seq_printf(p, "%-10s %s Format:%s Size:%dx%d@%dfps Offset(%d,%d)\n",
695 "Input",
696 sensor ? sensor->sd->name : NULL,
697 sdev->in_fmt.name,
698 sdev->in_crop.width, sdev->in_crop.height, val,
699 sdev->in_crop.left, sdev->in_crop.top);
700 if (IS_HDR_RDBK(dev->hdr.op_mode))
701 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",
702 "Isp Read",
703 dev->rd_mode - 3,
704 dev->dmarx_dev.cur_frame.id,
705 (u32)(dev->dmarx_dev.cur_frame.timestamp - dev->dmarx_dev.pre_frame.timestamp) / 1000 / 1000,
706 (dev->isp_state & ISP_FRAME_END) ? "idle" : "working",
707 sdev->dbg.interval / 1000 / 1000,
708 sdev->dbg.frameloss,
709 dev->rdbk_cnt,
710 dev->rdbk_cnt_x1,
711 dev->rdbk_cnt_x2,
712 dev->rdbk_cnt_x3);
713 else
714 seq_printf(p, "%-10s frame:%d %s time:%dms v-blank:%dus\n",
715 "Isp online",
716 sdev->dbg.id,
717 (dev->isp_state & ISP_FRAME_END) ? "idle" : "working",
718 sdev->dbg.interval / 1000 / 1000,
719 sdev->dbg.delay / 1000);
720
721 if (dev->br_dev.en)
722 seq_printf(p, "%-10s rkispp%d Format:%s%s Size:%dx%d (frame:%d rate:%dms frameloss:%d)\n",
723 "Output",
724 dev->dev_id,
725 (dev->br_dev.work_mode & ISP_ISPP_FBC) ? "FBC" : "YUV",
726 (dev->br_dev.work_mode & ISP_ISPP_422) ? "422" : "420",
727 dev->br_dev.crop.width,
728 dev->br_dev.crop.height,
729 dev->br_dev.dbg.id,
730 dev->br_dev.dbg.interval / 1000 / 1000,
731 dev->br_dev.dbg.frameloss);
732 for (val = 0; val < RKISP_MAX_STREAM; val++) {
733 struct rkisp_stream *stream = &dev->cap_dev.stream[val];
734
735 if (!stream->streaming)
736 continue;
737 seq_printf(p, "%-10s %s Format:%c%c%c%c Size:%dx%d (frame:%d rate:%dms delay:%dms frameloss:%d)\n",
738 "Output",
739 stream->vnode.vdev.name,
740 stream->out_fmt.pixelformat,
741 stream->out_fmt.pixelformat >> 8,
742 stream->out_fmt.pixelformat >> 16,
743 stream->out_fmt.pixelformat >> 24,
744 stream->out_fmt.width,
745 stream->out_fmt.height,
746 stream->dbg.id,
747 stream->dbg.interval / 1000 / 1000,
748 stream->dbg.delay / 1000 / 1000,
749 stream->dbg.frameloss);
750 }
751
752 switch (dev->isp_ver) {
753 case ISP_V20:
754 isp20_show(dev, p);
755 break;
756 case ISP_V21:
757 isp21_show(dev, p);
758 break;
759 case ISP_V30:
760 if (dev->hw_dev->is_unite)
761 isp30_unite_show(dev, p);
762 else
763 isp30_show(dev, p);
764 break;
765 default:
766 break;
767 }
768
769 seq_printf(p, "%-10s %s Cnt:%d\n",
770 "Monitor",
771 dev->hw_dev->monitor.is_en ? "ON" : "OFF",
772 dev->hw_dev->monitor.retry);
773 return 0;
774 }
775
isp_open(struct inode * inode,struct file * file)776 static int isp_open(struct inode *inode, struct file *file)
777 {
778 struct rkisp_device *data = PDE_DATA(inode);
779
780 return single_open(file, isp_show, data);
781 }
782
783 static const struct proc_ops ops = {
784 .proc_open = isp_open,
785 .proc_read = seq_read,
786 .proc_lseek = seq_lseek,
787 .proc_release = single_release,
788 };
789
rkisp_proc_init(struct rkisp_device * dev)790 int rkisp_proc_init(struct rkisp_device *dev)
791 {
792 dev->procfs = proc_create_data(dev->name, 0, NULL, &ops, dev);
793 if (!dev->procfs)
794 return -EINVAL;
795 return 0;
796 }
797
rkisp_proc_cleanup(struct rkisp_device * dev)798 void rkisp_proc_cleanup(struct rkisp_device *dev)
799 {
800 if (dev->procfs)
801 remove_proc_entry(dev->name, NULL);
802 dev->procfs = NULL;
803 }
804
805 #endif /* CONFIG_PROC_FS */
806