summaryrefslogtreecommitdiff
path: root/drivers/video/video-uclass.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/video-uclass.c')
-rw-r--r--drivers/video/video-uclass.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c
index 8883e29035..a1d527529f 100644
--- a/drivers/video/video-uclass.c
+++ b/drivers/video/video-uclass.c
@@ -15,6 +15,7 @@
#include <video_console.h>
#include <asm/cache.h>
#include <dm/lists.h>
+#include <dm/device_compat.h>
#include <dm/device-internal.h>
#include <dm/uclass-internal.h>
#ifdef CONFIG_SANDBOX
@@ -142,7 +143,7 @@ int video_clear(struct udevice *dev)
if (ret)
return ret;
- return 0;
+ return video_sync(dev, false);
}
void video_set_default_colors(struct udevice *dev, bool invert)
@@ -172,8 +173,17 @@ void video_set_default_colors(struct udevice *dev, bool invert)
}
/* Flush video activity to the caches */
-void video_sync(struct udevice *vid, bool force)
+int video_sync(struct udevice *vid, bool force)
{
+ struct video_ops *ops = video_get_ops(vid);
+ int ret;
+
+ if (ops && ops->video_sync) {
+ ret = ops->video_sync(vid);
+ if (ret)
+ return ret;
+ }
+
/*
* flush_dcache_range() is declared in common.h but it seems that some
* architectures do not actually implement it. Is there a way to find
@@ -196,17 +206,22 @@ void video_sync(struct udevice *vid, bool force)
last_sync = get_timer(0);
}
#endif
+ return 0;
}
void video_sync_all(void)
{
struct udevice *dev;
+ int ret;
for (uclass_find_first_device(UCLASS_VIDEO, &dev);
dev;
uclass_find_next_device(&dev)) {
- if (device_active(dev))
- video_sync(dev, true);
+ if (device_active(dev)) {
+ ret = video_sync(dev, true);
+ if (ret)
+ dev_dbg(dev, "Video sync failed\n");
+ }
}
}