forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/gpu/drm/tve200/tve200_drv.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright (C) 2017 Linus Walleij <linus.walleij@linaro.org>
34 * Parts of this file were based on sources as follows:
....@@ -7,11 +8,6 @@
78 * Copyright (C) 2007 Dave Airlie <airlied@linux.ie>
89 * Copyright (C) 2011 Texas Instruments
910 * Copyright (C) 2017 Eric Anholt
10
- *
11
- * This program is free software and is provided to you under the terms of the
12
- * GNU General Public License version 2 as published by the Free Software
13
- * Foundation, and any use by you of this program is subject to the terms of
14
- * such GNU licence.
1511 */
1612
1713 /**
....@@ -41,16 +37,17 @@
4137 #include <linux/slab.h>
4238 #include <linux/version.h>
4339
44
-#include <drm/drmP.h>
4540 #include <drm/drm_atomic_helper.h>
46
-#include <drm/drm_crtc_helper.h>
41
+#include <drm/drm_bridge.h>
42
+#include <drm/drm_drv.h>
43
+#include <drm/drm_fb_cma_helper.h>
44
+#include <drm/drm_fb_helper.h>
4745 #include <drm/drm_gem_cma_helper.h>
4846 #include <drm/drm_gem_framebuffer_helper.h>
49
-#include <drm/drm_fb_helper.h>
50
-#include <drm/drm_fb_cma_helper.h>
51
-#include <drm/drm_panel.h>
5247 #include <drm/drm_of.h>
53
-#include <drm/drm_bridge.h>
48
+#include <drm/drm_panel.h>
49
+#include <drm/drm_probe_helper.h>
50
+#include <drm/drm_vblank.h>
5451
5552 #include "tve200_drm.h"
5653
....@@ -83,8 +80,8 @@
8380 if (ret && ret != -ENODEV)
8481 return ret;
8582 if (panel) {
86
- bridge = drm_panel_bridge_add(panel,
87
- DRM_MODE_CONNECTOR_Unknown);
83
+ bridge = drm_panel_bridge_add_typed(panel,
84
+ DRM_MODE_CONNECTOR_Unknown);
8885 if (IS_ERR(bridge)) {
8986 ret = PTR_ERR(bridge);
9087 goto out_bridge;
....@@ -113,7 +110,7 @@
113110 }
114111
115112 priv->panel = panel;
116
- priv->connector = panel->connector;
113
+ priv->connector = drm_panel_bridge_connector(bridge);
117114 priv->bridge = bridge;
118115
119116 dev_info(dev->dev, "attached to panel %s\n",
....@@ -126,12 +123,6 @@
126123 }
127124
128125 drm_mode_config_reset(dev);
129
-
130
- /*
131
- * Passing in 16 here will make the RGB656 mode the default
132
- * Passing in 32 will use XRGB8888 mode
133
- */
134
- drm_fb_cma_fbdev_init(dev, 16, 0);
135126 drm_kms_helper_poll_init(dev);
136127
137128 goto finish;
....@@ -147,9 +138,7 @@
147138 DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
148139
149140 static struct drm_driver tve200_drm_driver = {
150
- .driver_features =
151
- DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
152
- .lastclose = drm_fb_helper_lastclose,
141
+ .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
153142 .ioctls = NULL,
154143 .fops = &drm_fops,
155144 .name = "tve200",
....@@ -158,19 +147,7 @@
158147 .major = 1,
159148 .minor = 0,
160149 .patchlevel = 0,
161
- .dumb_create = drm_gem_cma_dumb_create,
162
- .gem_free_object_unlocked = drm_gem_cma_free_object,
163
- .gem_vm_ops = &drm_gem_cma_vm_ops,
164
-
165
- .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
166
- .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
167
- .gem_prime_import = drm_gem_prime_import,
168
- .gem_prime_export = drm_gem_prime_export,
169
- .gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
170
- .gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
171
- .gem_prime_vmap = drm_gem_cma_prime_vmap,
172
- .gem_prime_vunmap = drm_gem_cma_prime_vunmap,
173
- .gem_prime_mmap = drm_gem_cma_prime_mmap,
150
+ DRM_GEM_CMA_DRIVER_OPS,
174151 };
175152
176153 static int tve200_probe(struct platform_device *pdev)
....@@ -245,12 +222,18 @@
245222 if (ret < 0)
246223 goto clk_disable;
247224
225
+ /*
226
+ * Passing in 16 here will make the RGB565 mode the default
227
+ * Passing in 32 will use XRGB8888 mode
228
+ */
229
+ drm_fbdev_generic_setup(drm, 16);
230
+
248231 return 0;
249232
250233 clk_disable:
251234 clk_disable_unprepare(priv->pclk);
252235 dev_unref:
253
- drm_dev_unref(drm);
236
+ drm_dev_put(drm);
254237 return ret;
255238 }
256239
....@@ -260,12 +243,11 @@
260243 struct tve200_drm_dev_private *priv = drm->dev_private;
261244
262245 drm_dev_unregister(drm);
263
- drm_fb_cma_fbdev_fini(drm);
264246 if (priv->panel)
265247 drm_panel_bridge_remove(priv->bridge);
266248 drm_mode_config_cleanup(drm);
267249 clk_disable_unprepare(priv->pclk);
268
- drm_dev_unref(drm);
250
+ drm_dev_put(drm);
269251
270252 return 0;
271253 }