From: Laurent Pinchart Date: Mon, 28 May 2018 13:03:13 +0000 (+0300) Subject: drm/omap: dss: Add device operations flags X-Git-Tag: v5.4-rc1~2273^2~32^2~32 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=09e5bb6d5b94929d9b0c17eec56c2f5d19886514;p=platform%2Fkernel%2Flinux-rpi.git drm/omap: dss: Add device operations flags 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 Reviewed-by: Sebastian Reichel Signed-off-by: Tomi Valkeinen --- diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h index 60e4269..30ad9985 100644 --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h @@ -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;