drm/omap: display: Add displays in sorted order to the panel_list
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Thu, 11 Aug 2016 07:20:23 +0000 (10:20 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 3 Apr 2017 09:36:40 +0000 (12:36 +0300)
Keep the panel_list ordered according to aliases. The DRM connectors will
be created following the panel_list. By keeping the list ordered the DRM
connectors will be created in the same order regardless of the driver
probe order.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/dss/display.c

index 94c012e0584b5308bdb023f5a8d392255ebbd053..26cb59be045e3deda5f6af41bbc0995430b935f7 100644 (file)
@@ -83,6 +83,7 @@ static int disp_num_counter;
 int omapdss_register_display(struct omap_dss_device *dssdev)
 {
        struct omap_dss_driver *drv = dssdev->driver;
+       struct list_head *cur;
        int id;
 
        /*
@@ -118,7 +119,14 @@ int omapdss_register_display(struct omap_dss_device *dssdev)
                drv->get_timings = omapdss_default_get_timings;
 
        mutex_lock(&panel_list_mutex);
-       list_add_tail(&dssdev->panel_list, &panel_list);
+       list_for_each(cur, &panel_list) {
+               struct omap_dss_device *ldev = list_entry(cur,
+                                                        struct omap_dss_device,
+                                                        panel_list);
+               if (strcmp(ldev->alias, dssdev->alias) > 0)
+                       break;
+       }
+       list_add_tail(&dssdev->panel_list, cur);
        mutex_unlock(&panel_list_mutex);
        return 0;
 }