hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
....@@ -1,34 +1,22 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * Copyright 2015 Freescale Semiconductor, Inc.
34 *
45 * Freescale DCU drm device driver
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
106 */
117
128 #include <linux/backlight.h>
139 #include <linux/of_graph.h>
1410
15
-#include <drm/drmP.h>
1611 #include <drm/drm_atomic_helper.h>
17
-#include <drm/drm_crtc_helper.h>
12
+#include <drm/drm_bridge.h>
1813 #include <drm/drm_of.h>
1914 #include <drm/drm_panel.h>
15
+#include <drm/drm_probe_helper.h>
16
+#include <drm/drm_simple_kms_helper.h>
2017
2118 #include "fsl_dcu_drm_drv.h"
2219 #include "fsl_tcon.h"
23
-
24
-static void fsl_dcu_drm_encoder_destroy(struct drm_encoder *encoder)
25
-{
26
- drm_encoder_cleanup(encoder);
27
-}
28
-
29
-static const struct drm_encoder_funcs encoder_funcs = {
30
- .destroy = fsl_dcu_drm_encoder_destroy,
31
-};
3220
3321 int fsl_dcu_drm_encoder_create(struct fsl_dcu_drm_device *fsl_dev,
3422 struct drm_crtc *crtc)
....@@ -42,8 +30,8 @@
4230 if (fsl_dev->tcon)
4331 fsl_tcon_bypass_enable(fsl_dev->tcon);
4432
45
- ret = drm_encoder_init(fsl_dev->drm, encoder, &encoder_funcs,
46
- DRM_MODE_ENCODER_LVDS, NULL);
33
+ ret = drm_simple_encoder_init(fsl_dev->drm, encoder,
34
+ DRM_MODE_ENCODER_LVDS);
4735 if (ret < 0)
4836 return ret;
4937
....@@ -52,10 +40,7 @@
5240
5341 static void fsl_dcu_drm_connector_destroy(struct drm_connector *connector)
5442 {
55
- struct fsl_dcu_drm_connector *fsl_con = to_fsl_dcu_connector(connector);
56
-
5743 drm_connector_unregister(connector);
58
- drm_panel_detach(fsl_con->panel);
5944 drm_connector_cleanup(connector);
6045 }
6146
....@@ -70,21 +55,14 @@
7055 static int fsl_dcu_drm_connector_get_modes(struct drm_connector *connector)
7156 {
7257 struct fsl_dcu_drm_connector *fsl_connector;
73
- int (*get_modes)(struct drm_panel *panel);
74
- int num_modes = 0;
7558
7659 fsl_connector = to_fsl_dcu_connector(connector);
77
- if (fsl_connector->panel && fsl_connector->panel->funcs &&
78
- fsl_connector->panel->funcs->get_modes) {
79
- get_modes = fsl_connector->panel->funcs->get_modes;
80
- num_modes = get_modes(fsl_connector->panel);
81
- }
82
-
83
- return num_modes;
60
+ return drm_panel_get_modes(fsl_connector->panel, connector);
8461 }
8562
86
-static int fsl_dcu_drm_connector_mode_valid(struct drm_connector *connector,
87
- struct drm_display_mode *mode)
63
+static enum drm_mode_status
64
+fsl_dcu_drm_connector_mode_valid(struct drm_connector *connector,
65
+ struct drm_display_mode *mode)
8866 {
8967 if (mode->hdisplay & 0xf)
9068 return MODE_ERROR;
....@@ -120,12 +98,6 @@
12098 ret = drm_connector_attach_encoder(connector, encoder);
12199 if (ret < 0)
122100 goto err_sysfs;
123
-
124
- ret = drm_panel_attach(panel, connector);
125
- if (ret) {
126
- dev_err(fsl_dev->dev, "failed to attach panel\n");
127
- goto err_sysfs;
128
- }
129101
130102 return 0;
131103
....@@ -163,5 +135,5 @@
163135 return fsl_dcu_attach_panel(fsl_dev, panel);
164136 }
165137
166
- return drm_bridge_attach(&fsl_dev->encoder, bridge, NULL);
138
+ return drm_bridge_attach(&fsl_dev->encoder, bridge, NULL, 0);
167139 }