]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
video: Introduce video_sync operation
authorMichal Simek <michal.simek@xilinx.com>
Thu, 3 Dec 2020 08:30:00 +0000 (09:30 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 5 Jan 2021 10:54:53 +0000 (11:54 +0100)
Some drivers like LCD connected via SPI requires explicit sync function
which copy framebuffer content over SPI to controller to display.
This hook doesn't exist yet that's why introduce it via video operations.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/video/video-uclass.c
include/video.h

index 6fc41280171452839142d2917edcd946f9785692..938e7d371311f52682e86aab6e1108a3ba2b2c83 100644 (file)
@@ -175,6 +175,15 @@ void video_set_default_colors(struct udevice *dev, bool invert)
 /* Flush video activity to the caches */
 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
index 1bfe6843a8056898804a22043e242ebec9df6036..12fc525ab4ef104aec3872873361022af100680d 100644 (file)
@@ -114,8 +114,16 @@ struct video_priv {
        u8 bg_col_idx;
 };
 
-/* Placeholder - there are no video operations at present */
+/**
+ * struct video_ops - structure for keeping video operations
+ * @video_sync: Synchronize FB with device. Some device like SPI based LCD
+ *             displays needs synchronization when data in an FB is available.
+ *             For these devices implement video_sync hook to call a sync
+ *             function. vid is pointer to video device udevice. Function
+ *             should return 0 on success video_sync and error code otherwise
+ */
 struct video_ops {
+       int (*video_sync)(struct udevice *vid);
 };
 
 #define video_get_ops(dev)        ((struct video_ops *)(dev)->driver->ops)
@@ -155,7 +163,7 @@ int video_clear(struct udevice *dev);
  * @force:     True to force a sync even if there was one recently (this is
  *             very expensive on sandbox)
  *
- * @return: 0 always
+ * @return: 0 on success, error code otherwise
  *
  * Some frame buffers are cached or have a secondary frame buffer. This
  * function syncs these up so that the current contents of the U-Boot frame