drm/omap: Move display alias ID to omap_drm_pipeline
The DT bindings for the OMAP DSS allow assigning numerical IDs to display outputs through display entries in the alias node. The driver uses this information to sort pipelines according to the order specified in DT, making it possible for a system to give a priority order to outputs. Retrieval of the alias ID is done when initializing display dss devices. That code will be removed when moving to drm_bridge and drm_panel. Move retrieval of the alias ID to display pipeline connection time and store it in the pipeline structure instead to keep the feature. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com> Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
79d11e96e3
commit
de9225a9bd
|
@ -42,8 +42,6 @@ void omapdss_display_init(struct omap_dss_device *dssdev)
|
||||||
if (id < 0)
|
if (id < 0)
|
||||||
id = disp_num_counter++;
|
id = disp_num_counter++;
|
||||||
|
|
||||||
dssdev->alias_id = id;
|
|
||||||
|
|
||||||
/* Use 'label' property for name, if it exists */
|
/* Use 'label' property for name, if it exists */
|
||||||
of_property_read_string(dssdev->dev->of_node, "label", &dssdev->name);
|
of_property_read_string(dssdev->dev->of_node, "label", &dssdev->name);
|
||||||
|
|
||||||
|
|
|
@ -414,8 +414,6 @@ struct omap_dss_device {
|
||||||
|
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
|
|
||||||
unsigned int alias_id;
|
|
||||||
|
|
||||||
enum omap_display_type type;
|
enum omap_display_type type;
|
||||||
/*
|
/*
|
||||||
* DSS output type that this device generates (for DSS internal devices)
|
* DSS output type that this device generates (for DSS internal devices)
|
||||||
|
|
|
@ -155,9 +155,9 @@ static int omap_compare_pipes(const void *a, const void *b)
|
||||||
const struct omap_drm_pipeline *pipe1 = a;
|
const struct omap_drm_pipeline *pipe1 = a;
|
||||||
const struct omap_drm_pipeline *pipe2 = b;
|
const struct omap_drm_pipeline *pipe2 = b;
|
||||||
|
|
||||||
if (pipe1->display->alias_id > pipe2->display->alias_id)
|
if (pipe1->alias_id > pipe2->alias_id)
|
||||||
return 1;
|
return 1;
|
||||||
else if (pipe1->display->alias_id < pipe2->display->alias_id)
|
else if (pipe1->alias_id < pipe2->alias_id)
|
||||||
return -1;
|
return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -182,11 +182,16 @@ static int omap_connect_pipelines(struct drm_device *ddev)
|
||||||
output->name);
|
output->name);
|
||||||
} else {
|
} else {
|
||||||
struct omap_drm_pipeline *pipe;
|
struct omap_drm_pipeline *pipe;
|
||||||
|
int id;
|
||||||
|
|
||||||
pipe = &priv->pipes[priv->num_pipes++];
|
pipe = &priv->pipes[priv->num_pipes++];
|
||||||
pipe->output = omapdss_device_get(output);
|
pipe->output = omapdss_device_get(output);
|
||||||
pipe->display = omapdss_display_get(output);
|
pipe->display = omapdss_display_get(output);
|
||||||
|
|
||||||
|
id = of_alias_get_id(pipe->display->dev->of_node,
|
||||||
|
"display");
|
||||||
|
pipe->alias_id = id >= 0 ? id : priv->num_pipes - 1;
|
||||||
|
|
||||||
if (priv->num_pipes == ARRAY_SIZE(priv->pipes)) {
|
if (priv->num_pipes == ARRAY_SIZE(priv->pipes)) {
|
||||||
/* To balance the 'for_each_dss_output' loop */
|
/* To balance the 'for_each_dss_output' loop */
|
||||||
omapdss_device_put(output);
|
omapdss_device_put(output);
|
||||||
|
|
|
@ -50,6 +50,7 @@ struct omap_drm_pipeline {
|
||||||
struct drm_connector *connector;
|
struct drm_connector *connector;
|
||||||
struct omap_dss_device *output;
|
struct omap_dss_device *output;
|
||||||
struct omap_dss_device *display;
|
struct omap_dss_device *display;
|
||||||
|
unsigned int alias_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct omap_drm_private {
|
struct omap_drm_private {
|
||||||
|
|
Loading…
Reference in New Issue