]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/omap: dss: Add device operations flags
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 28 May 2018 13:03:13 +0000 (16:03 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 3 Sep 2018 13:13:29 +0000 (16:13 +0300)
When an omap_dss_device operation can be implemented in multiple places
in a chain of devices, it is important to find out which device to
address to perfom the operation. This is currently done by calling the
operation on the display device at the end of the chain, and recursively
delagating the operation to the previous device if it can't be performed
locally. The drawback of this approach is an increased complexity in
omap_dss_device drivers.

In order to simplify the drivers, we will switch from a recursive model
to an interative model, centralizing the complexity in a single
location. This requires knowing which operations an omap_dss_device
supports at runtime. We can already test which operations are
implemented by checking the operation pointer, but implemented
operations can require resources whose availability varies between
systems. For instance a hot-plug signal from a connector can be wired to
a GPIO or to a bridge chip.

Add operation flags that can be set in the omap_dss_device structure by
drivers to signal support for operations.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/dss/omapdss.h

index 60e4269e6c888bdc7d980f587716869403e535d2..30ad9985776f4d588a527fd5ba600e5cb073fb31 100644 (file)
@@ -388,6 +388,18 @@ struct omap_dss_device_ops {
        };
 };
 
+/**
+ * enum omap_dss_device_ops_flag - Indicates which device ops are supported
+ * @OMAP_DSS_DEVICE_OP_DETECT: The device supports output connection detection
+ * @OMAP_DSS_DEVICE_OP_HPD: The device supports all hot-plug-related operations
+ * @OMAP_DSS_DEVICE_OP_EDID: The device supports readind EDID
+ */
+enum omap_dss_device_ops_flag {
+       OMAP_DSS_DEVICE_OP_DETECT = BIT(0),
+       OMAP_DSS_DEVICE_OP_HPD = BIT(1),
+       OMAP_DSS_DEVICE_OP_EDID = BIT(2),
+};
+
 enum omap_dss_device_type {
        OMAP_DSS_DEVICE_TYPE_OUTPUT = (1 << 0),
        OMAP_DSS_DEVICE_TYPE_DISPLAY = (1 << 1),
@@ -421,6 +433,7 @@ struct omap_dss_device {
 
        const struct omap_dss_driver *driver;
        const struct omap_dss_device_ops *ops;
+       unsigned long ops_flags;
 
        /* helper variable for driver suspend/resume */
        bool activate_after_resume;