forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /* Hisilicon Hibmc SoC drm driver
23 *
34 * Based on the bochs drm driver.
....@@ -8,23 +9,25 @@
89 * Rongrong Zou <zourongrong@huawei.com>
910 * Rongrong Zou <zourongrong@gmail.com>
1011 * Jianhua Li <lijianhua@huawei.com>
11
- *
12
- * This program is free software; you can redistribute it and/or modify
13
- * it under the terms of the GNU General Public License as published by
14
- * the Free Software Foundation; either version 2 of the License, or
15
- * (at your option) any later version.
16
- *
1712 */
1813
1914 #include <drm/drm_atomic_helper.h>
20
-#include <drm/drm_crtc_helper.h>
15
+#include <drm/drm_probe_helper.h>
16
+#include <drm/drm_print.h>
2117
2218 #include "hibmc_drm_drv.h"
2319 #include "hibmc_drm_regs.h"
2420
2521 static int hibmc_connector_get_modes(struct drm_connector *connector)
2622 {
27
- return drm_add_modes_noedid(connector, 800, 600);
23
+ int count;
24
+
25
+ count = drm_add_modes_noedid(connector,
26
+ connector->dev->mode_config.max_width,
27
+ connector->dev->mode_config.max_height);
28
+ drm_set_preferred_mode(connector, 1024, 768);
29
+
30
+ return count;
2831 }
2932
3033 static enum drm_mode_status hibmc_connector_mode_valid(struct drm_connector *connector,
....@@ -33,17 +36,10 @@
3336 return MODE_OK;
3437 }
3538
36
-static struct drm_encoder *
37
-hibmc_connector_best_encoder(struct drm_connector *connector)
38
-{
39
- return drm_encoder_find(connector->dev, NULL, connector->encoder_ids[0]);
40
-}
41
-
4239 static const struct drm_connector_helper_funcs
4340 hibmc_connector_helper_funcs = {
4441 .get_modes = hibmc_connector_get_modes,
4542 .mode_valid = hibmc_connector_mode_valid,
46
- .best_encoder = hibmc_connector_best_encoder,
4743 };
4844
4945 static const struct drm_connector_funcs hibmc_connector_funcs = {
....@@ -53,32 +49,6 @@
5349 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
5450 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
5551 };
56
-
57
-static struct drm_connector *
58
-hibmc_connector_init(struct hibmc_drm_private *priv)
59
-{
60
- struct drm_device *dev = priv->dev;
61
- struct drm_connector *connector;
62
- int ret;
63
-
64
- connector = devm_kzalloc(dev->dev, sizeof(*connector), GFP_KERNEL);
65
- if (!connector) {
66
- DRM_ERROR("failed to alloc memory when init connector\n");
67
- return ERR_PTR(-ENOMEM);
68
- }
69
-
70
- ret = drm_connector_init(dev, connector,
71
- &hibmc_connector_funcs,
72
- DRM_MODE_CONNECTOR_VGA);
73
- if (ret) {
74
- DRM_ERROR("failed to init connector: %d\n", ret);
75
- return ERR_PTR(ret);
76
- }
77
- drm_connector_helper_add(connector,
78
- &hibmc_connector_helper_funcs);
79
-
80
- return connector;
81
-}
8252
8353 static void hibmc_encoder_mode_set(struct drm_encoder *encoder,
8454 struct drm_display_mode *mode,
....@@ -107,32 +77,28 @@
10777 int hibmc_vdac_init(struct hibmc_drm_private *priv)
10878 {
10979 struct drm_device *dev = priv->dev;
110
- struct drm_encoder *encoder;
111
- struct drm_connector *connector;
80
+ struct drm_encoder *encoder = &priv->encoder;
81
+ struct drm_connector *connector = &priv->connector;
11282 int ret;
113
-
114
- connector = hibmc_connector_init(priv);
115
- if (IS_ERR(connector)) {
116
- DRM_ERROR("failed to create connector: %ld\n",
117
- PTR_ERR(connector));
118
- return PTR_ERR(connector);
119
- }
120
-
121
- encoder = devm_kzalloc(dev->dev, sizeof(*encoder), GFP_KERNEL);
122
- if (!encoder) {
123
- DRM_ERROR("failed to alloc memory when init encoder\n");
124
- return -ENOMEM;
125
- }
12683
12784 encoder->possible_crtcs = 0x1;
12885 ret = drm_encoder_init(dev, encoder, &hibmc_encoder_funcs,
12986 DRM_MODE_ENCODER_DAC, NULL);
13087 if (ret) {
131
- DRM_ERROR("failed to init encoder: %d\n", ret);
88
+ drm_err(dev, "failed to init encoder: %d\n", ret);
13289 return ret;
13390 }
13491
13592 drm_encoder_helper_add(encoder, &hibmc_encoder_helper_funcs);
93
+
94
+ ret = drm_connector_init(dev, connector, &hibmc_connector_funcs,
95
+ DRM_MODE_CONNECTOR_VGA);
96
+ if (ret) {
97
+ drm_err(dev, "failed to init connector: %d\n", ret);
98
+ return ret;
99
+ }
100
+ drm_connector_helper_add(connector, &hibmc_connector_helper_funcs);
101
+
136102 drm_connector_attach_encoder(connector, encoder);
137103
138104 return 0;