forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/gpu/drm/vc4/vc4_vec.c
....@@ -1,17 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright (C) 2016 Broadcom
3
- *
4
- * This program is free software; you can redistribute it and/or modify it
5
- * under the terms of the GNU General Public License version 2 as published by
6
- * the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope that it will be useful, but WITHOUT
9
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11
- * more details.
12
- *
13
- * You should have received a copy of the GNU General Public License along with
14
- * this program. If not, see <http://www.gnu.org/licenses/>.
154 */
165
176 /**
....@@ -25,9 +14,10 @@
2514 */
2615
2716 #include <drm/drm_atomic_helper.h>
28
-#include <drm/drm_crtc_helper.h>
2917 #include <drm/drm_edid.h>
3018 #include <drm/drm_panel.h>
19
+#include <drm/drm_probe_helper.h>
20
+#include <drm/drm_simple_kms_helper.h>
3121 #include <linux/clk.h>
3222 #include <linux/component.h>
3323 #include <linux/of_graph.h>
....@@ -176,6 +166,8 @@
176166 struct clk *clock;
177167
178168 const struct vc4_vec_tv_mode *tv_mode;
169
+
170
+ struct debugfs_regset32 regset;
179171 };
180172
181173 #define VEC_READ(offset) readl(vec->regs + (offset))
....@@ -223,58 +215,32 @@
223215 void (*mode_set)(struct vc4_vec *vec);
224216 };
225217
226
-#define VEC_REG(reg) { reg, #reg }
227
-static const struct {
228
- u32 reg;
229
- const char *name;
230
-} vec_regs[] = {
231
- VEC_REG(VEC_WSE_CONTROL),
232
- VEC_REG(VEC_WSE_WSS_DATA),
233
- VEC_REG(VEC_WSE_VPS_DATA1),
234
- VEC_REG(VEC_WSE_VPS_CONTROL),
235
- VEC_REG(VEC_REVID),
236
- VEC_REG(VEC_CONFIG0),
237
- VEC_REG(VEC_SCHPH),
238
- VEC_REG(VEC_CLMP0_START),
239
- VEC_REG(VEC_CLMP0_END),
240
- VEC_REG(VEC_FREQ3_2),
241
- VEC_REG(VEC_FREQ1_0),
242
- VEC_REG(VEC_CONFIG1),
243
- VEC_REG(VEC_CONFIG2),
244
- VEC_REG(VEC_INTERRUPT_CONTROL),
245
- VEC_REG(VEC_INTERRUPT_STATUS),
246
- VEC_REG(VEC_FCW_SECAM_B),
247
- VEC_REG(VEC_SECAM_GAIN_VAL),
248
- VEC_REG(VEC_CONFIG3),
249
- VEC_REG(VEC_STATUS0),
250
- VEC_REG(VEC_MASK0),
251
- VEC_REG(VEC_CFG),
252
- VEC_REG(VEC_DAC_TEST),
253
- VEC_REG(VEC_DAC_CONFIG),
254
- VEC_REG(VEC_DAC_MISC),
218
+static const struct debugfs_reg32 vec_regs[] = {
219
+ VC4_REG32(VEC_WSE_CONTROL),
220
+ VC4_REG32(VEC_WSE_WSS_DATA),
221
+ VC4_REG32(VEC_WSE_VPS_DATA1),
222
+ VC4_REG32(VEC_WSE_VPS_CONTROL),
223
+ VC4_REG32(VEC_REVID),
224
+ VC4_REG32(VEC_CONFIG0),
225
+ VC4_REG32(VEC_SCHPH),
226
+ VC4_REG32(VEC_CLMP0_START),
227
+ VC4_REG32(VEC_CLMP0_END),
228
+ VC4_REG32(VEC_FREQ3_2),
229
+ VC4_REG32(VEC_FREQ1_0),
230
+ VC4_REG32(VEC_CONFIG1),
231
+ VC4_REG32(VEC_CONFIG2),
232
+ VC4_REG32(VEC_INTERRUPT_CONTROL),
233
+ VC4_REG32(VEC_INTERRUPT_STATUS),
234
+ VC4_REG32(VEC_FCW_SECAM_B),
235
+ VC4_REG32(VEC_SECAM_GAIN_VAL),
236
+ VC4_REG32(VEC_CONFIG3),
237
+ VC4_REG32(VEC_STATUS0),
238
+ VC4_REG32(VEC_MASK0),
239
+ VC4_REG32(VEC_CFG),
240
+ VC4_REG32(VEC_DAC_TEST),
241
+ VC4_REG32(VEC_DAC_CONFIG),
242
+ VC4_REG32(VEC_DAC_MISC),
255243 };
256
-
257
-#ifdef CONFIG_DEBUG_FS
258
-int vc4_vec_debugfs_regs(struct seq_file *m, void *unused)
259
-{
260
- struct drm_info_node *node = (struct drm_info_node *)m->private;
261
- struct drm_device *dev = node->minor->dev;
262
- struct vc4_dev *vc4 = to_vc4_dev(dev);
263
- struct vc4_vec *vec = vc4->vec;
264
- int i;
265
-
266
- if (!vec)
267
- return 0;
268
-
269
- for (i = 0; i < ARRAY_SIZE(vec_regs); i++) {
270
- seq_printf(m, "%s (0x%04x): 0x%08x\n",
271
- vec_regs[i].name, vec_regs[i].reg,
272
- VEC_READ(vec_regs[i].reg));
273
- }
274
-
275
- return 0;
276
-}
277
-#endif
278244
279245 static void vc4_vec_ntsc_mode_set(struct vc4_vec *vec)
280246 {
....@@ -291,7 +257,7 @@
291257 static const struct drm_display_mode ntsc_mode = {
292258 DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 13500,
293259 720, 720 + 14, 720 + 14 + 64, 720 + 14 + 64 + 60, 0,
294
- 480, 480 + 3, 480 + 3 + 3, 480 + 3 + 3 + 16, 0,
260
+ 480, 480 + 7, 480 + 7 + 6, 525, 0,
295261 DRM_MODE_FLAG_INTERLACE)
296262 };
297263
....@@ -313,7 +279,7 @@
313279 static const struct drm_display_mode pal_mode = {
314280 DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 13500,
315281 720, 720 + 20, 720 + 20 + 64, 720 + 20 + 64 + 60, 0,
316
- 576, 576 + 2, 576 + 2 + 3, 576 + 2 + 3 + 20, 0,
282
+ 576, 576 + 4, 576 + 4 + 6, 625, 0,
317283 DRM_MODE_FLAG_INTERLACE)
318284 };
319285
....@@ -408,10 +374,6 @@
408374
409375 return connector;
410376 }
411
-
412
-static const struct drm_encoder_funcs vc4_vec_encoder_funcs = {
413
- .destroy = drm_encoder_cleanup,
414
-};
415377
416378 static void vc4_vec_encoder_disable(struct drm_encoder *encoder)
417379 {
....@@ -587,6 +549,9 @@
587549 vec->regs = vc4_ioremap_regs(pdev, 0);
588550 if (IS_ERR(vec->regs))
589551 return PTR_ERR(vec->regs);
552
+ vec->regset.base = vec->regs;
553
+ vec->regset.regs = vec_regs;
554
+ vec->regset.nregs = ARRAY_SIZE(vec_regs);
590555
591556 vec->clock = devm_clk_get(dev, NULL);
592557 if (IS_ERR(vec->clock)) {
....@@ -598,8 +563,7 @@
598563
599564 pm_runtime_enable(dev);
600565
601
- drm_encoder_init(drm, vec->encoder, &vc4_vec_encoder_funcs,
602
- DRM_MODE_ENCODER_TVDAC, NULL);
566
+ drm_simple_encoder_init(drm, vec->encoder, DRM_MODE_ENCODER_TVDAC);
603567 drm_encoder_helper_add(vec->encoder, &vc4_vec_encoder_helper_funcs);
604568
605569 vec->connector = vc4_vec_connector_init(drm, vec);
....@@ -612,6 +576,8 @@
612576
613577 vc4->vec = vec;
614578
579
+ vc4_debugfs_add_regset32(drm, "vec_regs", &vec->regset);
580
+
615581 return 0;
616582
617583 err_destroy_encoder: