Merge branch '2022-10-31-broadcom-updates'
[platform/kernel/u-boot.git] / include / display.h
index c180e76..3d01217 100644 (file)
@@ -1,7 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright 2014 Google Inc.
- *
- * SPDX-License-Identifier:     GPL-2.0+
  */
 
 #ifndef _DISPLAY_H
@@ -16,17 +15,19 @@ struct display_timing;
  * @source_id: ID for the source of the display data, typically a video
  * controller
  * @src_dev:   Source device providing the video
+ * @in_use:    Display is being used
  */
 struct display_plat {
        int source_id;
        struct udevice *src_dev;
+       bool in_use;
 };
 
 /**
- * display_read_timing() - Read timing information from EDID
+ * display_read_timing() - Read timing information
  *
  * @dev:       Device to read from
- * @return 0 if OK, -ve on error
+ * Return: 0 if OK, -ve on error
  */
 int display_read_timing(struct udevice *dev, struct display_timing *timing);
 
@@ -36,13 +37,30 @@ int display_read_timing(struct udevice *dev, struct display_timing *timing);
  * @dev:       Device to enable
  * @panel_bpp: Number of bits per pixel for panel
  * @timing:    Display timings
- * @return 0 if OK, -ve on error
+ * Return: 0 if OK, -ve on error
  */
 int display_enable(struct udevice *dev, int panel_bpp,
                   const struct display_timing *timing);
 
+/**
+ * display_in_use() - Check if a display is in use by any device
+ *
+ * Return: true if the device is in use (display_enable() has been called
+ * successfully), else false
+ */
+bool display_in_use(struct udevice *dev);
+
 struct dm_display_ops {
        /**
+        * read_timing() - Read information directly
+        *
+        * @dev:        Device to read from
+        * @timing:     Display timings
+        * @return 0 if OK, -ve on error
+        */
+       int (*read_timing)(struct udevice *dev, struct display_timing *timing);
+
+       /**
         * read_edid() - Read information from EDID
         *
         * @dev:        Device to read from
@@ -62,6 +80,16 @@ struct dm_display_ops {
         */
        int (*enable)(struct udevice *dev, int panel_bpp,
                      const struct display_timing *timing);
+
+       /**
+        * mode_valid() - Check if mode is supported
+        *
+        * @dev:        Device to enable
+        * @timing:     Display timings
+        * @return true if supported, false if not
+        */
+       bool (*mode_valid)(struct udevice *dev,
+                          const struct display_timing *timing);
 };
 
 #define display_get_ops(dev)   ((struct dm_display_ops *)(dev)->driver->ops)