]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/omap: Add a dss device operation flag for .get_modes()
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Wed, 12 Sep 2018 21:37:35 +0000 (00:37 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 18 Mar 2019 09:42:12 +0000 (11:42 +0200)
Instead of manually iterating over the dss devices in the pipeline to
find the first one that implements the .get_modes() operation, add a new
operation flag for .get_modes() and use the omap_connector_find_device()
helper function to locate the right dss device.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/displays/panel-dpi.c
drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
drivers/gpu/drm/omapdrm/dss/omapdss.h
drivers/gpu/drm/omapdrm/dss/venc.c
drivers/gpu/drm/omapdrm/omap_connector.c

index d6a584292e9180c95510437ae3615d33f981ebbe..897b8820e000c1ef2de340627f760552faa3d133 100644 (file)
@@ -152,6 +152,7 @@ static int panel_dpi_probe(struct platform_device *pdev)
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
        dssdev->of_ports = BIT(0);
+       dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
        drm_bus_flags_from_videomode(&ddata->vm, &dssdev->bus_flags);
 
        omapdss_display_init(dssdev);
index c5f570106a17493acad9f1230a660fc980c1aa22..fe9d9f847d2e89e22bc5198c75576c1bf848ab86 100644 (file)
@@ -1271,6 +1271,7 @@ static int dsicm_probe(struct platform_device *pdev)
        dssdev->type = OMAP_DISPLAY_TYPE_DSI;
        dssdev->owner = THIS_MODULE;
        dssdev->of_ports = BIT(0);
+       dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
 
        dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE |
                OMAP_DSS_DISPLAY_CAP_TEAR_ELIM;
index e05b7f80416ecd40738ac5bf6b59c72a9de66846..f37931bf1c5ff513779bf4cc291342a29af3206c 100644 (file)
@@ -199,6 +199,7 @@ static int lb035q02_panel_spi_probe(struct spi_device *spi)
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
        dssdev->of_ports = BIT(0);
+       dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
 
        /*
         * Note: According to the panel documentation:
index cf2127837e673762b93541330cc2e41fc5c98c9a..8f2fb3d0492fddaccd3434a3af6540c1598a4be9 100644 (file)
@@ -194,6 +194,7 @@ static int nec_8048_probe(struct spi_device *spi)
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
        dssdev->of_ports = BIT(0);
+       dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
        dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_POSEDGE
                          | DRM_BUS_FLAG_PIXDATA_POSEDGE;
 
index 30320cee1e568b308a2f469435b01a7cfe91e4a9..8d5d7f775b5553e41557bb732dda875bbb28b482 100644 (file)
@@ -209,6 +209,7 @@ static int sharp_ls_probe(struct platform_device *pdev)
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
        dssdev->of_ports = BIT(0);
+       dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
 
        /*
         * Note: According to the panel documentation:
index 8debe77f92ffd4d1738f993185f3d31da8c828ad..b8360cef37549bb857f4c3740d44aa27d822260c 100644 (file)
@@ -708,6 +708,7 @@ static int acx565akm_probe(struct spi_device *spi)
        dssdev->type = OMAP_DISPLAY_TYPE_SDI;
        dssdev->owner = THIS_MODULE;
        dssdev->of_ports = BIT(0);
+       dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
        dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_NEGEDGE
                          | DRM_BUS_FLAG_PIXDATA_POSEDGE;
 
index c8b15f19a1664054a18b4fe1e6d7e9d098b036ec..721c5bb3bdefe7aa988597a0f998fa2338d76989 100644 (file)
@@ -323,6 +323,7 @@ static int td028ttec1_panel_probe(struct spi_device *spi)
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
        dssdev->of_ports = BIT(0);
+       dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
 
        /*
         * Note: According to the panel documentation:
index 9ecc4c7bee6767b879981e82b1ec79b09ac28aea..50960018dbe8bffbc78d4a1d2c1cf495a9f58b4b 100644 (file)
@@ -422,6 +422,7 @@ static int tpo_td043_probe(struct spi_device *spi)
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
        dssdev->of_ports = BIT(0);
+       dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
 
        /*
         * Note: According to the panel documentation:
index 7637fc041b718226c21c6dda3b42b5949389a9f8..01da7e94b9749b2ed51093338e862469450141b7 100644 (file)
@@ -393,12 +393,14 @@ 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
+ * @OMAP_DSS_DEVICE_OP_EDID: The device supports reading EDID
+ * @OMAP_DSS_DEVICE_OP_MODES: The device supports reading modes
  */
 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),
+       OMAP_DSS_DEVICE_OP_MODES = BIT(3),
 };
 
 struct omap_dss_device {
index cefefe6d6fcb06a5b917bb84eaa156cf7b671043..f1abb4195a76aa7d066b986c55780b249c124128 100644 (file)
@@ -755,6 +755,7 @@ static int venc_init_output(struct venc_device *venc)
        out->ops = &venc_ops;
        out->owner = THIS_MODULE;
        out->of_ports = BIT(0);
+       out->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
 
        r = omapdss_device_init_output(out);
        if (r < 0)
index c0157554c12f5d1d44397d4f52596d3ed725f43f..dc4533c8cbb474b30a6d2b603224e5524c4da77d 100644 (file)
@@ -228,10 +228,10 @@ static int omap_connector_get_modes(struct drm_connector *connector)
         * Otherwise if the display pipeline reports modes (e.g. with a fixed
         * resolution panel or an analog TV output), query it.
         */
-       for (dssdev = omap_connector->display; dssdev; dssdev = dssdev->src) {
-               if (dssdev->ops->get_modes)
-                       return dssdev->ops->get_modes(dssdev, connector);
-       }
+       dssdev = omap_connector_find_device(connector,
+                                           OMAP_DSS_DEVICE_OP_MODES);
+       if (dssdev)
+               return dssdev->ops->get_modes(dssdev, connector);
 
        /*
         * We can't retrieve modes, which can happen for instance for a DVI or