| .. | .. |
|---|
| 12 | 12 | #include <linux/regmap.h> |
|---|
| 13 | 13 | #include <linux/reset.h> |
|---|
| 14 | 14 | #include <linux/mfd/rk628.h> |
|---|
| 15 | | -#include <drm/drmP.h> |
|---|
| 15 | + |
|---|
| 16 | 16 | #include <drm/drm_of.h> |
|---|
| 17 | 17 | #include <drm/drm_atomic.h> |
|---|
| 18 | | -#include <drm/drm_crtc_helper.h> |
|---|
| 18 | +#include <drm/drm_probe_helper.h> |
|---|
| 19 | 19 | #include <drm/drm_atomic_helper.h> |
|---|
| 20 | 20 | #include <drm/drm_panel.h> |
|---|
| 21 | 21 | #include <video/of_display_timing.h> |
|---|
| .. | .. |
|---|
| 273 | 273 | struct drm_display_info *info = &connector->display_info; |
|---|
| 274 | 274 | int num_modes; |
|---|
| 275 | 275 | |
|---|
| 276 | | - num_modes = drm_panel_get_modes(gvi->panel); |
|---|
| 276 | + num_modes = drm_panel_get_modes(gvi->panel, connector); |
|---|
| 277 | 277 | |
|---|
| 278 | 278 | if (info->num_bus_formats) |
|---|
| 279 | 279 | gvi->bus_format = info->bus_formats[0]; |
|---|
| .. | .. |
|---|
| 334 | 334 | |
|---|
| 335 | 335 | static void rk628_gvi_connector_destroy(struct drm_connector *connector) |
|---|
| 336 | 336 | { |
|---|
| 337 | | - struct rk628_gvi *gvi = connector_to_gvi(connector); |
|---|
| 338 | | - |
|---|
| 339 | | - drm_panel_detach(gvi->panel); |
|---|
| 340 | 337 | drm_connector_cleanup(connector); |
|---|
| 341 | 338 | } |
|---|
| 342 | 339 | |
|---|
| .. | .. |
|---|
| 463 | 460 | SW_OUTPUT_MODE(OUTPUT_MODE_GVI)); |
|---|
| 464 | 461 | phy_set_bus_width(gvi->phy, rate); |
|---|
| 465 | 462 | rk628_combtxphy_set_gvi_division_mode(gvi->phy, gvi->division_mode); |
|---|
| 466 | | - ret = phy_set_mode(gvi->phy, PHY_MODE_GVI); |
|---|
| 463 | + ret = phy_set_mode(gvi->phy, 0); |
|---|
| 467 | 464 | if (ret) { |
|---|
| 468 | 465 | dev_err(gvi->dev, "failed to set phy mode: %d\n", ret); |
|---|
| 469 | 466 | return; |
|---|
| .. | .. |
|---|
| 500 | 497 | phy_power_off(gvi->phy); |
|---|
| 501 | 498 | } |
|---|
| 502 | 499 | |
|---|
| 503 | | -static int rk628_gvi_bridge_attach(struct drm_bridge *bridge) |
|---|
| 500 | +static int rk628_gvi_bridge_attach(struct drm_bridge *bridge, |
|---|
| 501 | + enum drm_bridge_attach_flags flags) |
|---|
| 504 | 502 | { |
|---|
| 505 | 503 | struct rk628_gvi *gvi = bridge_to_gvi(bridge); |
|---|
| 506 | 504 | struct drm_connector *connector = &gvi->connector; |
|---|
| 507 | 505 | struct drm_device *drm = bridge->dev; |
|---|
| 508 | 506 | int ret; |
|---|
| 507 | + |
|---|
| 508 | + if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) |
|---|
| 509 | + return 0; |
|---|
| 509 | 510 | |
|---|
| 510 | 511 | ret = drm_connector_init(drm, connector, &rk628_gvi_connector_funcs, |
|---|
| 511 | 512 | DRM_MODE_CONNECTOR_LVDS); |
|---|
| .. | .. |
|---|
| 517 | 518 | drm_connector_helper_add(connector, &rk628_gvi_connector_helper_funcs); |
|---|
| 518 | 519 | drm_connector_attach_encoder(connector, bridge->encoder); |
|---|
| 519 | 520 | |
|---|
| 520 | | - ret = drm_panel_attach(gvi->panel, connector); |
|---|
| 521 | | - if (ret) { |
|---|
| 522 | | - dev_err(gvi->dev, "Failed to attach panel\n"); |
|---|
| 523 | | - return ret; |
|---|
| 524 | | - } |
|---|
| 525 | | - |
|---|
| 526 | 521 | return 0; |
|---|
| 527 | 522 | } |
|---|
| 528 | 523 | |
|---|
| 529 | 524 | static void rk628_gvi_bridge_mode_set(struct drm_bridge *bridge, |
|---|
| 530 | | - struct drm_display_mode *mode, |
|---|
| 531 | | - struct drm_display_mode *adj) |
|---|
| 525 | + const struct drm_display_mode *mode, |
|---|
| 526 | + const struct drm_display_mode *adj) |
|---|
| 532 | 527 | { |
|---|
| 533 | 528 | struct rk628_gvi *gvi = bridge_to_gvi(bridge); |
|---|
| 534 | 529 | |
|---|