aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2012-11-16 08:45:26 -0500
committerTomi Valkeinen <tomi.valkeinen@ti.com>2013-06-17 07:00:48 -0400
commit2e7e3dc79492953c2c1192d8d4129ac86ee70aec (patch)
tree3d79db98c7697e285267248b404c4e05e03835d4 /drivers/video
parent7ae9a71e09d098deecce1140acf4f5e529211270 (diff)
OMAPDSS: add panel list
We currently use the omapdss bus (which contains all the available displays) to iterate the displays. As the omapdss bus is on its way out, this needs to be changed. Instead of using the dss bus to iterate displays, this patch adds our own list of displays which we manage. The panels on the dss bus are automatically added to this new list. An "alias" field is also added to omap_dss_device. This field is set to "display%d", the same way as omap_dss_device's dev name is set. This alias is later used to keep backward compatibility, when the embedded dev is no longer used. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/omap2/dss/core.c2
-rw-r--r--drivers/video/omap2/dss/display.c32
2 files changed, 34 insertions, 0 deletions
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 7b2df2ff5667..17b52343f74c 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -477,6 +477,7 @@ struct omap_dss_device *dss_alloc_and_init_device(struct device *parent)
477 477
478int dss_add_device(struct omap_dss_device *dssdev) 478int dss_add_device(struct omap_dss_device *dssdev)
479{ 479{
480 omapdss_register_display(dssdev);
480 return device_add(&dssdev->dev); 481 return device_add(&dssdev->dev);
481} 482}
482 483
@@ -488,6 +489,7 @@ void dss_put_device(struct omap_dss_device *dssdev)
488void dss_unregister_device(struct omap_dss_device *dssdev) 489void dss_unregister_device(struct omap_dss_device *dssdev)
489{ 490{
490 device_unregister(&dssdev->dev); 491 device_unregister(&dssdev->dev);
492 omapdss_unregister_display(dssdev);
491} 493}
492 494
493static int dss_unregister_dss_dev(struct device *dev, void *data) 495static int dss_unregister_dss_dev(struct device *dev, void *data)
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
index 72ac058a56d3..1c175a4e7f6b 100644
--- a/drivers/video/omap2/dss/display.c
+++ b/drivers/video/omap2/dss/display.c
@@ -146,6 +146,38 @@ void dss_disable_all_devices(void)
146 bus_for_each_dev(bus, NULL, NULL, dss_disable_device); 146 bus_for_each_dev(bus, NULL, NULL, dss_disable_device);
147} 147}
148 148
149static LIST_HEAD(panel_list);
150static DEFINE_MUTEX(panel_list_mutex);
151static int disp_num_counter;
152
153int omapdss_register_display(struct omap_dss_device *dssdev)
154{
155 struct omap_dss_driver *drv = dssdev->driver;
156
157 snprintf(dssdev->alias, sizeof(dssdev->alias),
158 "display%d", disp_num_counter++);
159
160 if (drv && drv->get_resolution == NULL)
161 drv->get_resolution = omapdss_default_get_resolution;
162 if (drv && drv->get_recommended_bpp == NULL)
163 drv->get_recommended_bpp = omapdss_default_get_recommended_bpp;
164 if (drv && drv->get_timings == NULL)
165 drv->get_timings = omapdss_default_get_timings;
166
167 mutex_lock(&panel_list_mutex);
168 list_add_tail(&dssdev->panel_list, &panel_list);
169 mutex_unlock(&panel_list_mutex);
170 return 0;
171}
172EXPORT_SYMBOL(omapdss_register_display);
173
174void omapdss_unregister_display(struct omap_dss_device *dssdev)
175{
176 mutex_lock(&panel_list_mutex);
177 list_del(&dssdev->panel_list);
178 mutex_unlock(&panel_list_mutex);
179}
180EXPORT_SYMBOL(omapdss_unregister_display);
149 181
150void omap_dss_get_device(struct omap_dss_device *dssdev) 182void omap_dss_get_device(struct omap_dss_device *dssdev)
151{ 183{