diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2018-06-01 19:45:01 +0300 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2018-09-03 16:13:29 +0300 |
commit | 83910ad3f51fbc0e6546b60aafa90697b5127a8a (patch) | |
tree | 34a3d047e651e5ea8923ef40f360430f31d1713f /drivers/gpu/drm/omapdrm/omap_encoder.c | |
parent | e7df6571024ba791c6521efba5b3875724c47af6 (diff) | |
download | linux-83910ad3f51fbc0e6546b60aafa90697b5127a8a.tar.xz |
drm/omap: Move most omap_dss_driver operations to omap_dss_device_ops
omap_dss_device instances have two ops structures, omap_dss_driver and
omap_dss_device_ops. The former is used for devices at the end of the
pipeline (a.k.a. display devices), and the latter for intermediate
devices.
Having two sets of operations isn't convenient as code that iterates
over omap_dss_device instances need to take them both into account.
There's currently a reasonably small amount of such code, but more will
be introduced to move the driver away from recursive operations. To
simplify current and future code, move all operations that are not
specific to the display device to the omap_dss_device_ops.
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>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_encoder.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_encoder.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c index ec0f451e3b36..7bbf3700e393 100644 --- a/drivers/gpu/drm/omapdrm/omap_encoder.c +++ b/drivers/gpu/drm/omapdrm/omap_encoder.c @@ -77,16 +77,16 @@ static void omap_encoder_mode_set(struct drm_encoder *encoder, } } - if (dssdev->driver->set_hdmi_mode) - dssdev->driver->set_hdmi_mode(dssdev, hdmi_mode); + if (dssdev->ops->hdmi.set_hdmi_mode) + dssdev->ops->hdmi.set_hdmi_mode(dssdev, hdmi_mode); - if (hdmi_mode && dssdev->driver->set_hdmi_infoframe) { + if (hdmi_mode && dssdev->ops->hdmi.set_infoframe) { struct hdmi_avi_infoframe avi; r = drm_hdmi_avi_infoframe_from_display_mode(&avi, adjusted_mode, false); if (r == 0) - dssdev->driver->set_hdmi_infoframe(dssdev, &avi); + dssdev->ops->hdmi.set_infoframe(dssdev, &avi); } } @@ -94,9 +94,8 @@ static void omap_encoder_disable(struct drm_encoder *encoder) { struct omap_encoder *omap_encoder = to_omap_encoder(encoder); struct omap_dss_device *dssdev = omap_encoder->dssdev; - const struct omap_dss_driver *dssdrv = dssdev->driver; - dssdrv->disable(dssdev); + dssdev->ops->disable(dssdev); } static int omap_encoder_update(struct drm_encoder *encoder, @@ -106,15 +105,14 @@ static int omap_encoder_update(struct drm_encoder *encoder, struct drm_device *dev = encoder->dev; struct omap_encoder *omap_encoder = to_omap_encoder(encoder); struct omap_dss_device *dssdev = omap_encoder->dssdev; - const struct omap_dss_driver *dssdrv = dssdev->driver; int ret; - if (dssdrv->check_timings) { - ret = dssdrv->check_timings(dssdev, vm); + if (dssdev->ops->check_timings) { + ret = dssdev->ops->check_timings(dssdev, vm); } else { struct videomode t = {0}; - dssdrv->get_timings(dssdev, &t); + dssdev->ops->get_timings(dssdev, &t); if (memcmp(vm, &t, sizeof(*vm))) ret = -EINVAL; @@ -127,8 +125,8 @@ static int omap_encoder_update(struct drm_encoder *encoder, return ret; } - if (dssdrv->set_timings) - dssdrv->set_timings(dssdev, vm); + if (dssdev->ops->set_timings) + dssdev->ops->set_timings(dssdev, vm); return 0; } @@ -137,13 +135,12 @@ static void omap_encoder_enable(struct drm_encoder *encoder) { struct omap_encoder *omap_encoder = to_omap_encoder(encoder); struct omap_dss_device *dssdev = omap_encoder->dssdev; - const struct omap_dss_driver *dssdrv = dssdev->driver; int r; omap_encoder_update(encoder, omap_crtc_channel(encoder->crtc), omap_crtc_timings(encoder->crtc)); - r = dssdrv->enable(dssdev); + r = dssdev->ops->enable(dssdev); if (r) dev_err(encoder->dev->dev, "Failed to enable display '%s': %d\n", |