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