Commit eb5bc1f9 authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Tomi Valkeinen
Browse files

drm/omap: Do dss_device (display) ordering in omap_drv.c



Sort the dssdev array based on DT aliases.

With this change we can remove the panel ordering from dss/display.c and
have all sorting related to dssdevs in one place.

Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 52b9ef24
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,8 @@ int omapdss_register_display(struct omap_dss_device *dssdev)
	if (id < 0)
		id = disp_num_counter++;

	dssdev->alias_id = id;

	snprintf(dssdev->alias, sizeof(dssdev->alias), "display%d", id);

	/* Use 'label' property for name, if it exists */
+1 −0
Original line number Diff line number Diff line
@@ -467,6 +467,7 @@ struct omap_dss_device {

	/* alias in the form of "display%d" */
	char alias[16];
	unsigned int alias_id;

	enum omap_display_type type;
	enum omap_display_type output_type;
+18 −0
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 * this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <linux/of.h>
#include <linux/sort.h>
#include <linux/sys_soc.h>

#include <drm/drm_atomic.h>
@@ -165,6 +167,18 @@ static void omap_disconnect_dssdevs(struct drm_device *ddev)
	priv->num_dssdevs = 0;
}

static int omap_compare_dssdevs(const void *a, const void *b)
{
	const struct omap_dss_device *dssdev1 = *(struct omap_dss_device **)a;
	const struct omap_dss_device *dssdev2 = *(struct omap_dss_device **)b;

	if (dssdev1->alias_id > dssdev2->alias_id)
		return 1;
	else if (dssdev1->alias_id < dssdev2->alias_id)
		return -1;
	return 0;
}

static int omap_connect_dssdevs(struct drm_device *ddev)
{
	struct omap_drm_private *priv = ddev->dev_private;
@@ -193,6 +207,10 @@ static int omap_connect_dssdevs(struct drm_device *ddev)
		}
	}

	/* Sort the list by DT aliases */
	sort(priv->dssdevs, priv->num_dssdevs, sizeof(priv->dssdevs[0]),
	     omap_compare_dssdevs, NULL);

	return 0;

cleanup: