forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 958e46acc8e900e8569dd467c1af9b8d2d019394
kernel/drivers/gpu/drm/vc4/vc4_dpi.c
....@@ -1,17 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright (C) 2016 Broadcom Limited
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 /**
....@@ -24,10 +13,11 @@
2413
2514 #include <drm/drm_atomic_helper.h>
2615 #include <drm/drm_bridge.h>
27
-#include <drm/drm_crtc_helper.h>
2816 #include <drm/drm_edid.h>
2917 #include <drm/drm_of.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>
....@@ -101,6 +91,8 @@
10191
10292 struct clk *pixel_clock;
10393 struct clk *core_clock;
94
+
95
+ struct debugfs_regset32 regset;
10496 };
10597
10698 #define DPI_READ(offset) readl(dpi->regs + (offset))
....@@ -118,39 +110,9 @@
118110 return container_of(encoder, struct vc4_dpi_encoder, base.base);
119111 }
120112
121
-#define DPI_REG(reg) { reg, #reg }
122
-static const struct {
123
- u32 reg;
124
- const char *name;
125
-} dpi_regs[] = {
126
- DPI_REG(DPI_C),
127
- DPI_REG(DPI_ID),
128
-};
129
-
130
-#ifdef CONFIG_DEBUG_FS
131
-int vc4_dpi_debugfs_regs(struct seq_file *m, void *unused)
132
-{
133
- struct drm_info_node *node = (struct drm_info_node *)m->private;
134
- struct drm_device *dev = node->minor->dev;
135
- struct vc4_dev *vc4 = to_vc4_dev(dev);
136
- struct vc4_dpi *dpi = vc4->dpi;
137
- int i;
138
-
139
- if (!dpi)
140
- return 0;
141
-
142
- for (i = 0; i < ARRAY_SIZE(dpi_regs); i++) {
143
- seq_printf(m, "%s (0x%04x): 0x%08x\n",
144
- dpi_regs[i].name, dpi_regs[i].reg,
145
- DPI_READ(dpi_regs[i].reg));
146
- }
147
-
148
- return 0;
149
-}
150
-#endif
151
-
152
-static const struct drm_encoder_funcs vc4_dpi_encoder_funcs = {
153
- .destroy = drm_encoder_cleanup,
113
+static const struct debugfs_reg32 dpi_regs[] = {
114
+ VC4_REG32(DPI_C),
115
+ VC4_REG32(DPI_ID),
154116 };
155117
156118 static void vc4_dpi_encoder_disable(struct drm_encoder *encoder)
....@@ -284,9 +246,10 @@
284246 }
285247
286248 if (panel)
287
- bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_DPI);
249
+ bridge = drm_panel_bridge_add_typed(panel,
250
+ DRM_MODE_CONNECTOR_DPI);
288251
289
- return drm_bridge_attach(dpi->encoder, bridge, NULL);
252
+ return drm_bridge_attach(dpi->encoder, bridge, NULL, 0);
290253 }
291254
292255 static int vc4_dpi_bind(struct device *dev, struct device *master, void *data)
....@@ -314,6 +277,9 @@
314277 dpi->regs = vc4_ioremap_regs(pdev, 0);
315278 if (IS_ERR(dpi->regs))
316279 return PTR_ERR(dpi->regs);
280
+ dpi->regset.base = dpi->regs;
281
+ dpi->regset.regs = dpi_regs;
282
+ dpi->regset.nregs = ARRAY_SIZE(dpi_regs);
317283
318284 if (DPI_READ(DPI_ID) != DPI_ID_VALUE) {
319285 dev_err(dev, "Port returned 0x%08x for ID instead of 0x%08x\n",
....@@ -340,8 +306,7 @@
340306 if (ret)
341307 DRM_ERROR("Failed to turn on core clock: %d\n", ret);
342308
343
- drm_encoder_init(drm, dpi->encoder, &vc4_dpi_encoder_funcs,
344
- DRM_MODE_ENCODER_DPI, NULL);
309
+ drm_simple_encoder_init(drm, dpi->encoder, DRM_MODE_ENCODER_DPI);
345310 drm_encoder_helper_add(dpi->encoder, &vc4_dpi_encoder_helper_funcs);
346311
347312 ret = vc4_dpi_init_bridge(dpi);
....@@ -352,6 +317,8 @@
352317
353318 vc4->dpi = dpi;
354319
320
+ vc4_debugfs_add_regset32(drm, "dpi_regs", &dpi->regset);
321
+
355322 return 0;
356323
357324 err_destroy_encoder: