mirror of https://gitee.com/openkylin/linux.git
drm/arc: Initialize sim connector before display pipe
That way we can get rid of this final piece of init code, and use the simple pipe helpers as intended. v2: Fix indent (Sam) Acked-by: Thomas Zimmermann <tzimmermann@suse.de> Acked-by: Sam Ravnborg <sam@ravnborg.org> Cc: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Cc: Alexey Brodkin <abrodkin@synopsys.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210112084358.2771527-14-daniel.vetter@ffwll.ch
This commit is contained in:
parent
2c43a895c5
commit
50dcc3ab49
|
@ -95,32 +95,11 @@ static const struct drm_connector_funcs arcpgu_drm_connector_funcs = {
|
|||
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
|
||||
};
|
||||
|
||||
static int arcpgu_drm_sim_init(struct drm_device *drm, struct device_node *np)
|
||||
static int arcpgu_drm_sim_init(struct drm_device *drm, struct drm_connector *connector)
|
||||
{
|
||||
struct arcpgu_drm_private *arcpgu = dev_to_arcpgu(drm);
|
||||
struct drm_encoder *encoder;
|
||||
struct drm_connector *connector;
|
||||
int ret;
|
||||
|
||||
encoder = &arcpgu->pipe.encoder;
|
||||
|
||||
connector = &arcpgu->sim_conn;
|
||||
drm_connector_helper_add(connector, &arcpgu_drm_connector_helper_funcs);
|
||||
|
||||
ret = drm_connector_init(drm, connector, &arcpgu_drm_connector_funcs,
|
||||
return drm_connector_init(drm, connector, &arcpgu_drm_connector_funcs,
|
||||
DRM_MODE_CONNECTOR_VIRTUAL);
|
||||
if (ret < 0) {
|
||||
dev_err(drm->dev, "failed to initialize drm connector\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = drm_connector_attach_encoder(connector, encoder);
|
||||
if (ret < 0) {
|
||||
dev_err(drm->dev, "could not attach connector to encoder\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define ENCODE_PGU_XY(x, y) ((((x) - 1) << 16) | ((y) - 1))
|
||||
|
@ -267,6 +246,7 @@ static int arcpgu_load(struct arcpgu_drm_private *arcpgu)
|
|||
{
|
||||
struct platform_device *pdev = to_platform_device(arcpgu->drm.dev);
|
||||
struct device_node *encoder_node = NULL, *endpoint_node = NULL;
|
||||
struct drm_connector *connector = NULL;
|
||||
struct drm_device *drm = &arcpgu->drm;
|
||||
struct resource *res;
|
||||
int ret;
|
||||
|
@ -301,13 +281,6 @@ static int arcpgu_load(struct arcpgu_drm_private *arcpgu)
|
|||
if (dma_set_mask_and_coherent(drm->dev, DMA_BIT_MASK(32)))
|
||||
return -ENODEV;
|
||||
|
||||
ret = drm_simple_display_pipe_init(drm, &arcpgu->pipe, &arc_pgu_pipe_funcs,
|
||||
arc_pgu_supported_formats,
|
||||
ARRAY_SIZE(arc_pgu_supported_formats),
|
||||
NULL, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* There is only one output port inside each device. It is linked with
|
||||
* encoder endpoint.
|
||||
|
@ -316,8 +289,21 @@ static int arcpgu_load(struct arcpgu_drm_private *arcpgu)
|
|||
if (endpoint_node) {
|
||||
encoder_node = of_graph_get_remote_port_parent(endpoint_node);
|
||||
of_node_put(endpoint_node);
|
||||
} else {
|
||||
connector = &arcpgu->sim_conn;
|
||||
dev_info(drm->dev, "no encoder found. Assumed virtual LCD on simulation platform\n");
|
||||
ret = arcpgu_drm_sim_init(drm, connector);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = drm_simple_display_pipe_init(drm, &arcpgu->pipe, &arc_pgu_pipe_funcs,
|
||||
arc_pgu_supported_formats,
|
||||
ARRAY_SIZE(arc_pgu_supported_formats),
|
||||
NULL, connector);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (encoder_node) {
|
||||
struct drm_bridge *bridge;
|
||||
|
||||
|
@ -329,11 +315,6 @@ static int arcpgu_load(struct arcpgu_drm_private *arcpgu)
|
|||
ret = drm_simple_display_pipe_attach_bridge(&arcpgu->pipe, bridge);
|
||||
if (ret)
|
||||
return ret;
|
||||
} else {
|
||||
dev_info(drm->dev, "no encoder found. Assumed virtual LCD on simulation platform\n");
|
||||
ret = arcpgu_drm_sim_init(drm, NULL);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
drm_mode_config_reset(drm);
|
||||
|
|
Loading…
Reference in New Issue