forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/gpu/drm/rockchip/rk628/rk628_lvds.c
....@@ -13,10 +13,9 @@
1313 #include <linux/mfd/rk628.h>
1414 #include <linux/phy/phy.h>
1515
16
-#include <drm/drmP.h>
1716 #include <drm/drm_of.h>
1817 #include <drm/drm_atomic.h>
19
-#include <drm/drm_crtc_helper.h>
18
+#include <drm/drm_probe_helper.h>
2019 #include <drm/drm_atomic_helper.h>
2120 #include <drm/drm_panel.h>
2221
....@@ -64,8 +63,6 @@
6463 static enum lvds_format rk628_lvds_get_format(u32 bus_format)
6564 {
6665 switch (bus_format) {
67
- case MEDIA_BUS_FMT_RGB666_1X7X3_JEIDA:
68
- return LVDS_FORMAT_JEIDA_18BIT;
6966 case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
7067 return LVDS_FORMAT_JEIDA_24BIT;
7168 case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
....@@ -112,7 +109,7 @@
112109 struct drm_display_info *info = &connector->display_info;
113110 int num_modes = 0;
114111
115
- num_modes = drm_panel_get_modes(lvds->panel);
112
+ num_modes = drm_panel_get_modes(lvds->panel, connector);
116113
117114 if (info->num_bus_formats)
118115 lvds->format = rk628_lvds_get_format(info->bus_formats[0]);
....@@ -130,9 +127,6 @@
130127
131128 static void rk628_lvds_connector_destroy(struct drm_connector *connector)
132129 {
133
- struct rk628_lvds *lvds = connector_to_lvds(connector);
134
-
135
- drm_panel_detach(lvds->panel);
136130 drm_connector_cleanup(connector);
137131 }
138132
....@@ -195,7 +189,7 @@
195189 bus_width |= (mode->clock / 1000) << 8;
196190 phy_set_bus_width(lvds->phy, bus_width);
197191
198
- ret = phy_set_mode(lvds->phy, PHY_MODE_VIDEO_LVDS);
192
+ ret = phy_set_mode(lvds->phy, PHY_MODE_LVDS);
199193 if (ret) {
200194 dev_err(lvds->dev, "failed to set phy mode: %d\n", ret);
201195 return;
....@@ -216,12 +210,16 @@
216210 phy_power_off(lvds->phy);
217211 }
218212
219
-static int rk628_lvds_bridge_attach(struct drm_bridge *bridge)
213
+static int rk628_lvds_bridge_attach(struct drm_bridge *bridge,
214
+ enum drm_bridge_attach_flags flags)
220215 {
221216 struct rk628_lvds *lvds = bridge_to_lvds(bridge);
222217 struct drm_connector *connector = &lvds->connector;
223218 struct drm_device *drm = bridge->dev;
224219 int ret;
220
+
221
+ if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
222
+ return 0;
225223
226224 ret = drm_connector_init(drm, connector, &rk628_lvds_connector_funcs,
227225 DRM_MODE_CONNECTOR_LVDS);
....@@ -233,18 +231,12 @@
233231 drm_connector_helper_add(connector, &rk628_lvds_connector_helper_funcs);
234232 drm_connector_attach_encoder(connector, bridge->encoder);
235233
236
- ret = drm_panel_attach(lvds->panel, connector);
237
- if (ret) {
238
- dev_err(lvds->dev, "Failed to attach panel\n");
239
- return ret;
240
- }
241
-
242234 return 0;
243235 }
244236
245237 static void rk628_lvds_bridge_mode_set(struct drm_bridge *bridge,
246
- struct drm_display_mode *mode,
247
- struct drm_display_mode *adj)
238
+ const struct drm_display_mode *mode,
239
+ const struct drm_display_mode *adj)
248240 {
249241 struct rk628_lvds *lvds = bridge_to_lvds(bridge);
250242