• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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