diff options
-rw-r--r-- | drivers/video/omap2/dss/display.c | 13 | ||||
-rw-r--r-- | include/video/omapdss.h | 2 |
2 files changed, 12 insertions, 3 deletions
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c index 809676473a99..0daf3e37d597 100644 --- a/drivers/video/omap2/dss/display.c +++ b/drivers/video/omap2/dss/display.c @@ -158,15 +158,24 @@ void omapdss_unregister_display(struct omap_dss_device *dssdev) } EXPORT_SYMBOL(omapdss_unregister_display); -void omap_dss_get_device(struct omap_dss_device *dssdev) +struct omap_dss_device *omap_dss_get_device(struct omap_dss_device *dssdev) { - get_device(dssdev->dev); + if (!try_module_get(dssdev->owner)) + return NULL; + + if (get_device(dssdev->dev) == NULL) { + module_put(dssdev->owner); + return NULL; + } + + return dssdev; } EXPORT_SYMBOL(omap_dss_get_device); void omap_dss_put_device(struct omap_dss_device *dssdev) { put_device(dssdev->dev); + module_put(dssdev->owner); } EXPORT_SYMBOL(omap_dss_put_device); diff --git a/include/video/omapdss.h b/include/video/omapdss.h index d667a4a78a49..80d7eb6358ae 100644 --- a/include/video/omapdss.h +++ b/include/video/omapdss.h @@ -767,7 +767,7 @@ void omap_dss_unregister_driver(struct omap_dss_driver *); int omapdss_register_display(struct omap_dss_device *dssdev); void omapdss_unregister_display(struct omap_dss_device *dssdev); -void omap_dss_get_device(struct omap_dss_device *dssdev); +struct omap_dss_device *omap_dss_get_device(struct omap_dss_device *dssdev); void omap_dss_put_device(struct omap_dss_device *dssdev); #define for_each_dss_dev(d) while ((d = omap_dss_get_next_device(d)) != NULL) struct omap_dss_device *omap_dss_get_next_device(struct omap_dss_device *from); |