Commit 9b6a59e5 authored by Linus Walleij's avatar Linus Walleij Committed by Neil Armstrong

Revert "drm/bridge: panel: Add a device link between drm device and panel device"

This reverts commit 199cf07e.

This patch creates bugs on devices where the DRM device is
the ancestor of the panel devices.

Attempts to fix this have failed because it leads to using
device core functionality which is questionable.
Reported-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/lkml/CACRpkdaGzXD6HbiX7mVUNJAJtMEPG00Pp6+nJ1P0JrfJ-ArMvQ@mail.gmail.com/T/Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Acked-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20231128-revert-panel-fix-v1-3-69bb05048dae@linaro.orgSigned-off-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20231128-revert-panel-fix-v1-3-69bb05048dae@linaro.org
parent 8dd92668
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
* Copyright (C) 2017 Broadcom * Copyright (C) 2017 Broadcom
*/ */
#include <linux/device.h>
#include <drm/drm_atomic_helper.h> #include <drm/drm_atomic_helper.h>
#include <drm/drm_bridge.h> #include <drm/drm_bridge.h>
#include <drm/drm_connector.h> #include <drm/drm_connector.h>
...@@ -21,7 +19,6 @@ struct panel_bridge { ...@@ -21,7 +19,6 @@ struct panel_bridge {
struct drm_bridge bridge; struct drm_bridge bridge;
struct drm_connector connector; struct drm_connector connector;
struct drm_panel *panel; struct drm_panel *panel;
struct device_link *link;
u32 connector_type; u32 connector_type;
}; };
...@@ -63,24 +60,13 @@ static int panel_bridge_attach(struct drm_bridge *bridge, ...@@ -63,24 +60,13 @@ static int panel_bridge_attach(struct drm_bridge *bridge,
{ {
struct panel_bridge *panel_bridge = drm_bridge_to_panel_bridge(bridge); struct panel_bridge *panel_bridge = drm_bridge_to_panel_bridge(bridge);
struct drm_connector *connector = &panel_bridge->connector; struct drm_connector *connector = &panel_bridge->connector;
struct drm_panel *panel = panel_bridge->panel;
struct drm_device *drm_dev = bridge->dev;
int ret; int ret;
panel_bridge->link = device_link_add(drm_dev->dev, panel->dev,
DL_FLAG_STATELESS);
if (!panel_bridge->link) {
DRM_ERROR("Failed to add device link between %s and %s\n",
dev_name(drm_dev->dev), dev_name(panel->dev));
return -EINVAL;
}
if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
return 0; return 0;
if (!bridge->encoder) { if (!bridge->encoder) {
DRM_ERROR("Missing encoder\n"); DRM_ERROR("Missing encoder\n");
device_link_del(panel_bridge->link);
return -ENODEV; return -ENODEV;
} }
...@@ -92,7 +78,6 @@ static int panel_bridge_attach(struct drm_bridge *bridge, ...@@ -92,7 +78,6 @@ static int panel_bridge_attach(struct drm_bridge *bridge,
panel_bridge->connector_type); panel_bridge->connector_type);
if (ret) { if (ret) {
DRM_ERROR("Failed to initialize connector\n"); DRM_ERROR("Failed to initialize connector\n");
device_link_del(panel_bridge->link);
return ret; return ret;
} }
...@@ -115,8 +100,6 @@ static void panel_bridge_detach(struct drm_bridge *bridge) ...@@ -115,8 +100,6 @@ static void panel_bridge_detach(struct drm_bridge *bridge)
struct panel_bridge *panel_bridge = drm_bridge_to_panel_bridge(bridge); struct panel_bridge *panel_bridge = drm_bridge_to_panel_bridge(bridge);
struct drm_connector *connector = &panel_bridge->connector; struct drm_connector *connector = &panel_bridge->connector;
device_link_del(panel_bridge->link);
/* /*
* Cleanup the connector if we know it was initialized. * Cleanup the connector if we know it was initialized.
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment