[PATCH 11/21] drm/omap: Move most omap_dss_driver operations to omap_dss_device_ops

Sebastian Reichel sre at kernel.org
Mon Jun 11 15:53:42 UTC 2018


Hi,

On Wed, Jun 06, 2018 at 12:36:40PM +0300, Laurent Pinchart wrote:
> 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 at ideasonboard.com>
> ---

Reviewed-by: Sebastian Reichel <sebastian.reichel at collabora.co.uk>

-- Sebastian

>  .../gpu/drm/omapdrm/displays/connector-analog-tv.c |  4 +-
>  drivers/gpu/drm/omapdrm/displays/connector-dvi.c   |  4 +-
>  drivers/gpu/drm/omapdrm/displays/connector-hdmi.c  | 31 +++++++------
>  .../gpu/drm/omapdrm/displays/encoder-tpd12s015.c   | 14 +++---
>  drivers/gpu/drm/omapdrm/displays/panel-dpi.c       |  4 +-
>  drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c    | 12 +++--
>  .../omapdrm/displays/panel-lgphilips-lb035q02.c    |  4 +-
>  .../drm/omapdrm/displays/panel-nec-nl8048hl11.c    |  4 +-
>  .../drm/omapdrm/displays/panel-sharp-ls037v7dw01.c |  4 +-
>  .../drm/omapdrm/displays/panel-sony-acx565akm.c    |  4 +-
>  .../drm/omapdrm/displays/panel-tpo-td028ttec1.c    |  4 +-
>  .../drm/omapdrm/displays/panel-tpo-td043mtea1.c    |  4 +-
>  drivers/gpu/drm/omapdrm/dss/base.c                 | 12 +----
>  drivers/gpu/drm/omapdrm/dss/dss.c                  |  2 +-
>  drivers/gpu/drm/omapdrm/dss/hdmi4.c                |  3 +-
>  drivers/gpu/drm/omapdrm/dss/hdmi5.c                |  3 +-
>  drivers/gpu/drm/omapdrm/dss/omapdss.h              | 54 ++++++----------------
>  drivers/gpu/drm/omapdrm/omap_connector.c           | 37 +++++++--------
>  drivers/gpu/drm/omapdrm/omap_crtc.c                |  2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.c                 | 12 ++---
>  drivers/gpu/drm/omapdrm/omap_encoder.c             | 25 +++++-----
>  21 files changed, 106 insertions(+), 137 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
> index d59b4f2e22dc..563fc7e618b3 100644
> --- a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
> +++ b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
> @@ -119,7 +119,7 @@ static int tvc_check_timings(struct omap_dss_device *dssdev,
>  	return src->ops->check_timings(src, vm);
>  }
>  
> -static const struct omap_dss_driver tvc_driver = {
> +static const struct omap_dss_device_ops tvc_ops = {
>  	.connect		= tvc_connect,
>  	.disconnect		= tvc_disconnect,
>  
> @@ -146,7 +146,7 @@ static int tvc_probe(struct platform_device *pdev)
>  	ddata->vm = tvc_pal_vm;
>  
>  	dssdev = &ddata->dssdev;
> -	dssdev->driver = &tvc_driver;
> +	dssdev->ops = &tvc_ops;
>  	dssdev->dev = &pdev->dev;
>  	dssdev->type = OMAP_DISPLAY_TYPE_VENC;
>  	dssdev->owner = THIS_MODULE;
> diff --git a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
> index 39e7d0be887f..a639a86cd47b 100644
> --- a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
> +++ b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
> @@ -265,7 +265,7 @@ static void dvic_disable_hpd(struct omap_dss_device *dssdev)
>  	mutex_unlock(&ddata->hpd_lock);
>  }
>  
> -static const struct omap_dss_driver dvic_driver = {
> +static const struct omap_dss_device_ops dvic_ops = {
>  	.connect	= dvic_connect,
>  	.disconnect	= dvic_disconnect,
>  
> @@ -367,7 +367,7 @@ static int dvic_probe(struct platform_device *pdev)
>  	ddata->vm = dvic_default_vm;
>  
>  	dssdev = &ddata->dssdev;
> -	dssdev->driver = &dvic_driver;
> +	dssdev->ops = &dvic_ops;
>  	dssdev->dev = &pdev->dev;
>  	dssdev->type = OMAP_DISPLAY_TYPE_DVI;
>  	dssdev->owner = THIS_MODULE;
> diff --git a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
> index d39480b8cf6b..54bfd7156360 100644
> --- a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
> +++ b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
> @@ -132,7 +132,7 @@ static int hdmic_read_edid(struct omap_dss_device *dssdev,
>  {
>  	struct omap_dss_device *src = dssdev->src;
>  
> -	return src->ops->hdmi.read_edid(src, edid, len);
> +	return src->ops->read_edid(src, edid, len);
>  }
>  
>  static bool hdmic_detect(struct omap_dss_device *dssdev)
> @@ -144,7 +144,7 @@ static bool hdmic_detect(struct omap_dss_device *dssdev)
>  	if (ddata->hpd_gpio)
>  		connected = gpiod_get_value_cansleep(ddata->hpd_gpio);
>  	else
> -		connected = src->ops->hdmi.detect(src);
> +		connected = src->ops->detect(src);
>  	if (!connected && src->ops->hdmi.lost_hotplug)
>  		src->ops->hdmi.lost_hotplug(src);
>  	return connected;
> @@ -164,8 +164,8 @@ static int hdmic_register_hpd_cb(struct omap_dss_device *dssdev,
>  		ddata->hpd_cb_data = cb_data;
>  		mutex_unlock(&ddata->hpd_lock);
>  		return 0;
> -	} else if (src->ops->hdmi.register_hpd_cb) {
> -		return src->ops->hdmi.register_hpd_cb(src, cb, cb_data);
> +	} else if (src->ops->register_hpd_cb) {
> +		return src->ops->register_hpd_cb(src, cb, cb_data);
>  	}
>  
>  	return -ENOTSUPP;
> @@ -181,8 +181,8 @@ static void hdmic_unregister_hpd_cb(struct omap_dss_device *dssdev)
>  		ddata->hpd_cb = NULL;
>  		ddata->hpd_cb_data = NULL;
>  		mutex_unlock(&ddata->hpd_lock);
> -	} else if (src->ops->hdmi.unregister_hpd_cb) {
> -		src->ops->hdmi.unregister_hpd_cb(src);
> +	} else if (src->ops->unregister_hpd_cb) {
> +		src->ops->unregister_hpd_cb(src);
>  	}
>  }
>  
> @@ -195,8 +195,8 @@ static void hdmic_enable_hpd(struct omap_dss_device *dssdev)
>  		mutex_lock(&ddata->hpd_lock);
>  		ddata->hpd_enabled = true;
>  		mutex_unlock(&ddata->hpd_lock);
> -	} else if (src->ops->hdmi.enable_hpd) {
> -		src->ops->hdmi.enable_hpd(src);
> +	} else if (src->ops->enable_hpd) {
> +		src->ops->enable_hpd(src);
>  	}
>  }
>  
> @@ -209,8 +209,8 @@ static void hdmic_disable_hpd(struct omap_dss_device *dssdev)
>  		mutex_lock(&ddata->hpd_lock);
>  		ddata->hpd_enabled = false;
>  		mutex_unlock(&ddata->hpd_lock);
> -	} else if (src->ops->hdmi.disable_hpd) {
> -		src->ops->hdmi.disable_hpd(src);
> +	} else if (src->ops->disable_hpd) {
> +		src->ops->disable_hpd(src);
>  	}
>  }
>  
> @@ -229,7 +229,7 @@ static int hdmic_set_infoframe(struct omap_dss_device *dssdev,
>  	return src->ops->hdmi.set_infoframe(src, avi);
>  }
>  
> -static const struct omap_dss_driver hdmic_driver = {
> +static const struct omap_dss_device_ops hdmic_ops = {
>  	.connect		= hdmic_connect,
>  	.disconnect		= hdmic_disconnect,
>  
> @@ -246,8 +246,11 @@ static const struct omap_dss_driver hdmic_driver = {
>  	.unregister_hpd_cb	= hdmic_unregister_hpd_cb,
>  	.enable_hpd		= hdmic_enable_hpd,
>  	.disable_hpd		= hdmic_disable_hpd,
> -	.set_hdmi_mode		= hdmic_set_hdmi_mode,
> -	.set_hdmi_infoframe	= hdmic_set_infoframe,
> +
> +	.hdmi = {
> +		.set_hdmi_mode	= hdmic_set_hdmi_mode,
> +		.set_infoframe	= hdmic_set_infoframe,
> +	},
>  };
>  
>  static irqreturn_t hdmic_hpd_isr(int irq, void *data)
> @@ -309,7 +312,7 @@ static int hdmic_probe(struct platform_device *pdev)
>  	ddata->vm = hdmic_default_vm;
>  
>  	dssdev = &ddata->dssdev;
> -	dssdev->driver = &hdmic_driver;
> +	dssdev->ops = &hdmic_ops;
>  	dssdev->dev = &pdev->dev;
>  	dssdev->type = OMAP_DISPLAY_TYPE_HDMI;
>  	dssdev->owner = THIS_MODULE;
> diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
> index 3bd6aeb7b3f4..545a06e6ca11 100644
> --- a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
> +++ b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
> @@ -125,7 +125,7 @@ static int tpd_read_edid(struct omap_dss_device *dssdev,
>  	if (!gpiod_get_value_cansleep(ddata->hpd_gpio))
>  		return -ENODEV;
>  
> -	return src->ops->hdmi.read_edid(src, edid, len);
> +	return src->ops->read_edid(src, edid, len);
>  }
>  
>  static bool tpd_detect(struct omap_dss_device *dssdev)
> @@ -205,14 +205,14 @@ static const struct omap_dss_device_ops tpd_ops = {
>  	.disable		= tpd_disable,
>  	.check_timings		= tpd_check_timings,
>  	.set_timings		= tpd_set_timings,
> +	.read_edid		= tpd_read_edid,
> +	.detect			= tpd_detect,
> +	.register_hpd_cb	= tpd_register_hpd_cb,
> +	.unregister_hpd_cb	= tpd_unregister_hpd_cb,
> +	.enable_hpd		= tpd_enable_hpd,
> +	.disable_hpd		= tpd_disable_hpd,
>  
>  	.hdmi = {
> -		.read_edid		= tpd_read_edid,
> -		.detect			= tpd_detect,
> -		.register_hpd_cb	= tpd_register_hpd_cb,
> -		.unregister_hpd_cb	= tpd_unregister_hpd_cb,
> -		.enable_hpd		= tpd_enable_hpd,
> -		.disable_hpd		= tpd_disable_hpd,
>  		.set_infoframe		= tpd_set_infoframe,
>  		.set_hdmi_mode		= tpd_set_hdmi_mode,
>  	},
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
> index 91f99c95c4c4..c03877af9cdb 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
> @@ -122,7 +122,7 @@ static int panel_dpi_check_timings(struct omap_dss_device *dssdev,
>  	return src->ops->check_timings(src, vm);
>  }
>  
> -static const struct omap_dss_driver panel_dpi_ops = {
> +static const struct omap_dss_device_ops panel_dpi_ops = {
>  	.connect	= panel_dpi_connect,
>  	.disconnect	= panel_dpi_disconnect,
>  
> @@ -196,7 +196,7 @@ static int panel_dpi_probe(struct platform_device *pdev)
>  
>  	dssdev = &ddata->dssdev;
>  	dssdev->dev = &pdev->dev;
> -	dssdev->driver = &panel_dpi_ops;
> +	dssdev->ops = &panel_dpi_ops;
>  	dssdev->type = OMAP_DISPLAY_TYPE_DPI;
>  	dssdev->owner = THIS_MODULE;
>  	dssdev->of_ports = BIT(0);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
> index be4f03aa7af3..e8a81c4fd066 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
> @@ -1179,18 +1179,21 @@ static void dsicm_get_size(struct omap_dss_device *dssdev,
>  	*height = ddata->height_mm;
>  }
>  
> -static const struct omap_dss_driver dsicm_ops = {
> +static const struct omap_dss_device_ops dsicm_ops = {
>  	.connect	= dsicm_connect,
>  	.disconnect	= dsicm_disconnect,
>  
>  	.enable		= dsicm_enable,
>  	.disable	= dsicm_disable,
>  
> +	.get_timings	= dsicm_get_timings,
> +	.check_timings	= dsicm_check_timings,
> +};
> +
> +static const struct omap_dss_driver dsicm_dss_driver = {
>  	.update		= dsicm_update,
>  	.sync		= dsicm_sync,
>  
> -	.get_timings	= dsicm_get_timings,
> -	.check_timings	= dsicm_check_timings,
>  	.get_size	= dsicm_get_size,
>  
>  	.enable_te	= dsicm_enable_te,
> @@ -1299,7 +1302,8 @@ static int dsicm_probe(struct platform_device *pdev)
>  
>  	dssdev = &ddata->dssdev;
>  	dssdev->dev = dev;
> -	dssdev->driver = &dsicm_ops;
> +	dssdev->ops = &dsicm_ops;
> +	dssdev->driver = &dsicm_dss_driver;
>  	dssdev->type = OMAP_DISPLAY_TYPE_DSI;
>  	dssdev->owner = THIS_MODULE;
>  	dssdev->of_ports = BIT(0);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> index 66763a12fc3d..62576e4f89e3 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> @@ -199,7 +199,7 @@ static int lb035q02_check_timings(struct omap_dss_device *dssdev,
>  	return src->ops->check_timings(src, vm);
>  }
>  
> -static const struct omap_dss_driver lb035q02_ops = {
> +static const struct omap_dss_device_ops lb035q02_ops = {
>  	.connect	= lb035q02_connect,
>  	.disconnect	= lb035q02_disconnect,
>  
> @@ -249,7 +249,7 @@ static int lb035q02_panel_spi_probe(struct spi_device *spi)
>  
>  	dssdev = &ddata->dssdev;
>  	dssdev->dev = &spi->dev;
> -	dssdev->driver = &lb035q02_ops;
> +	dssdev->ops = &lb035q02_ops;
>  	dssdev->type = OMAP_DISPLAY_TYPE_DPI;
>  	dssdev->owner = THIS_MODULE;
>  	dssdev->of_ports = BIT(0);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> index 767ffd2fa0f4..9f34cf02a114 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> @@ -187,7 +187,7 @@ static int nec_8048_check_timings(struct omap_dss_device *dssdev,
>  	return src->ops->check_timings(src, vm);
>  }
>  
> -static const struct omap_dss_driver nec_8048_ops = {
> +static const struct omap_dss_device_ops nec_8048_ops = {
>  	.connect	= nec_8048_connect,
>  	.disconnect	= nec_8048_disconnect,
>  
> @@ -239,7 +239,7 @@ static int nec_8048_probe(struct spi_device *spi)
>  
>  	dssdev = &ddata->dssdev;
>  	dssdev->dev = &spi->dev;
> -	dssdev->driver = &nec_8048_ops;
> +	dssdev->ops = &nec_8048_ops;
>  	dssdev->type = OMAP_DISPLAY_TYPE_DPI;
>  	dssdev->owner = THIS_MODULE;
>  	dssdev->of_ports = BIT(0);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> index 7fbdf3ec0113..9ee6b8376916 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> @@ -161,7 +161,7 @@ static int sharp_ls_check_timings(struct omap_dss_device *dssdev,
>  	return src->ops->check_timings(src, vm);
>  }
>  
> -static const struct omap_dss_driver sharp_ls_ops = {
> +static const struct omap_dss_device_ops sharp_ls_ops = {
>  	.connect	= sharp_ls_connect,
>  	.disconnect	= sharp_ls_disconnect,
>  
> @@ -247,7 +247,7 @@ static int sharp_ls_probe(struct platform_device *pdev)
>  
>  	dssdev = &ddata->dssdev;
>  	dssdev->dev = &pdev->dev;
> -	dssdev->driver = &sharp_ls_ops;
> +	dssdev->ops = &sharp_ls_ops;
>  	dssdev->type = OMAP_DISPLAY_TYPE_DPI;
>  	dssdev->owner = THIS_MODULE;
>  	dssdev->of_ports = BIT(0);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> index f5f3e5e5f3dc..8baa290f841b 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> @@ -660,7 +660,7 @@ static int acx565akm_check_timings(struct omap_dss_device *dssdev,
>  	return src->ops->check_timings(src, vm);
>  }
>  
> -static const struct omap_dss_driver acx565akm_ops = {
> +static const struct omap_dss_device_ops acx565akm_ops = {
>  	.connect	= acx565akm_connect,
>  	.disconnect	= acx565akm_disconnect,
>  
> @@ -762,7 +762,7 @@ static int acx565akm_probe(struct spi_device *spi)
>  
>  	dssdev = &ddata->dssdev;
>  	dssdev->dev = &spi->dev;
> -	dssdev->driver = &acx565akm_ops;
> +	dssdev->ops = &acx565akm_ops;
>  	dssdev->type = OMAP_DISPLAY_TYPE_SDI;
>  	dssdev->owner = THIS_MODULE;
>  	dssdev->of_ports = BIT(0);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> index d3b0d204b7c9..4dfe200e8f70 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> @@ -330,7 +330,7 @@ static int td028ttec1_panel_check_timings(struct omap_dss_device *dssdev,
>  	return src->ops->check_timings(src, vm);
>  }
>  
> -static const struct omap_dss_driver td028ttec1_ops = {
> +static const struct omap_dss_device_ops td028ttec1_ops = {
>  	.connect	= td028ttec1_panel_connect,
>  	.disconnect	= td028ttec1_panel_disconnect,
>  
> @@ -371,7 +371,7 @@ static int td028ttec1_panel_probe(struct spi_device *spi)
>  
>  	dssdev = &ddata->dssdev;
>  	dssdev->dev = &spi->dev;
> -	dssdev->driver = &td028ttec1_ops;
> +	dssdev->ops = &td028ttec1_ops;
>  	dssdev->type = OMAP_DISPLAY_TYPE_DPI;
>  	dssdev->owner = THIS_MODULE;
>  	dssdev->of_ports = BIT(0);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> index 1521812ab15b..b211a7809a26 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> @@ -404,7 +404,7 @@ static int tpo_td043_check_timings(struct omap_dss_device *dssdev,
>  	return src->ops->check_timings(src, vm);
>  }
>  
> -static const struct omap_dss_driver tpo_td043_ops = {
> +static const struct omap_dss_device_ops tpo_td043_ops = {
>  	.connect	= tpo_td043_connect,
>  	.disconnect	= tpo_td043_disconnect,
>  
> @@ -469,7 +469,7 @@ static int tpo_td043_probe(struct spi_device *spi)
>  
>  	dssdev = &ddata->dssdev;
>  	dssdev->dev = &spi->dev;
> -	dssdev->driver = &tpo_td043_ops;
> +	dssdev->ops = &tpo_td043_ops;
>  	dssdev->type = OMAP_DISPLAY_TYPE_DPI;
>  	dssdev->owner = THIS_MODULE;
>  	dssdev->of_ports = BIT(0);
> diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c
> index 6a73d3559257..dcef0128818d 100644
> --- a/drivers/gpu/drm/omapdrm/dss/base.c
> +++ b/drivers/gpu/drm/omapdrm/dss/base.c
> @@ -198,11 +198,7 @@ int omapdss_device_connect(struct dss_device *dss,
>  
>  	dst->dss = dss;
>  
> -	if (dst->driver)
> -		ret = dst->driver->connect(src, dst);
> -	else
> -		ret = dst->ops->connect(src, dst);
> -
> +	ret = dst->ops->connect(src, dst);
>  	if (ret < 0) {
>  		dst->dss = NULL;
>  		return ret;
> @@ -238,11 +234,7 @@ void omapdss_device_disconnect(struct omap_dss_device *src,
>  
>  	WARN_ON(dst->state != OMAP_DSS_DISPLAY_DISABLED);
>  
> -	if (dst->driver)
> -		dst->driver->disconnect(src, dst);
> -	else
> -		dst->ops->disconnect(src, dst);
> -
> +	dst->ops->disconnect(src, dst);
>  	dst->dss = NULL;
>  }
>  EXPORT_SYMBOL_GPL(omapdss_device_disconnect);
> diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c
> index 6118159dd571..8d757e87bdda 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dss.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dss.c
> @@ -1553,7 +1553,7 @@ static void dss_shutdown(struct platform_device *pdev)
>  
>  	for_each_dss_display(dssdev) {
>  		if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
> -			dssdev->driver->disable(dssdev);
> +			dssdev->ops->disable(dssdev);
>  	}
>  }
>  
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> index c4fcdc9ed62d..bebce93fed3e 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> @@ -511,8 +511,9 @@ static const struct omap_dss_device_ops hdmi_ops = {
>  	.check_timings		= hdmi_display_check_timing,
>  	.set_timings		= hdmi_display_set_timing,
>  
> +	.read_edid		= hdmi_read_edid,
> +
>  	.hdmi = {
> -		.read_edid		= hdmi_read_edid,
>  		.lost_hotplug		= hdmi_lost_hotplug,
>  		.set_infoframe		= hdmi_set_infoframe,
>  		.set_hdmi_mode		= hdmi_set_hdmi_mode,
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> index 889c31745492..7c07e0208107 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> @@ -505,8 +505,9 @@ static const struct omap_dss_device_ops hdmi_ops = {
>  	.check_timings		= hdmi_display_check_timing,
>  	.set_timings		= hdmi_display_set_timing,
>  
> +	.read_edid		= hdmi_read_edid,
> +
>  	.hdmi = {
> -		.read_edid		= hdmi_read_edid,
>  		.set_infoframe		= hdmi_set_infoframe,
>  		.set_hdmi_mode		= hdmi_set_hdmi_mode,
>  	},
> diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> index ae30802f2151..3a5ee897baf0 100644
> --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
> +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> @@ -297,18 +297,7 @@ struct omap_dss_writeback_info {
>  };
>  
>  struct omapdss_hdmi_ops {
> -	int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len);
>  	void (*lost_hotplug)(struct omap_dss_device *dssdev);
> -	bool (*detect)(struct omap_dss_device *dssdev);
> -
> -	int (*register_hpd_cb)(struct omap_dss_device *dssdev,
> -			       void (*cb)(void *cb_data,
> -					  enum drm_connector_status status),
> -			       void *cb_data);
> -	void (*unregister_hpd_cb)(struct omap_dss_device *dssdev);
> -	void (*enable_hpd)(struct omap_dss_device *dssdev);
> -	void (*disable_hpd)(struct omap_dss_device *dssdev);
> -
>  	int (*set_hdmi_mode)(struct omap_dss_device *dssdev, bool hdmi_mode);
>  	int (*set_infoframe)(struct omap_dss_device *dssdev,
>  		const struct hdmi_avi_infoframe *avi);
> @@ -376,9 +365,23 @@ struct omap_dss_device_ops {
>  
>  	int (*check_timings)(struct omap_dss_device *dssdev,
>  			     struct videomode *vm);
> +	void (*get_timings)(struct omap_dss_device *dssdev,
> +			    struct videomode *vm);
>  	void (*set_timings)(struct omap_dss_device *dssdev,
>  			    struct videomode *vm);
>  
> +	bool (*detect)(struct omap_dss_device *dssdev);
> +
> +	int (*register_hpd_cb)(struct omap_dss_device *dssdev,
> +			       void (*cb)(void *cb_data,
> +					  enum drm_connector_status status),
> +			       void *cb_data);
> +	void (*unregister_hpd_cb)(struct omap_dss_device *dssdev);
> +	void (*enable_hpd)(struct omap_dss_device *dssdev);
> +	void (*disable_hpd)(struct omap_dss_device *dssdev);
> +
> +	int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len);
> +
>  	union {
>  		const struct omapdss_hdmi_ops hdmi;
>  		const struct omapdss_dsi_ops dsi;
> @@ -435,14 +438,6 @@ struct omap_dss_device {
>  };
>  
>  struct omap_dss_driver {
> -	int (*connect)(struct omap_dss_device *src,
> -		       struct omap_dss_device *dst);
> -	void (*disconnect)(struct omap_dss_device *src,
> -			   struct omap_dss_device *dst);
> -
> -	int (*enable)(struct omap_dss_device *display);
> -	void (*disable)(struct omap_dss_device *display);
> -
>  	int (*update)(struct omap_dss_device *dssdev,
>  			       u16 x, u16 y, u16 w, u16 h);
>  	int (*sync)(struct omap_dss_device *dssdev);
> @@ -454,29 +449,8 @@ struct omap_dss_driver {
>  			void *buf, size_t size,
>  			u16 x, u16 y, u16 w, u16 h);
>  
> -	int (*check_timings)(struct omap_dss_device *dssdev,
> -			     struct videomode *vm);
> -	void (*set_timings)(struct omap_dss_device *dssdev,
> -			    struct videomode *vm);
> -	void (*get_timings)(struct omap_dss_device *dssdev,
> -			    struct videomode *vm);
>  	void (*get_size)(struct omap_dss_device *dssdev,
>  			 unsigned int *width, unsigned int *height);
> -
> -	int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len);
> -	bool (*detect)(struct omap_dss_device *dssdev);
> -
> -	int (*register_hpd_cb)(struct omap_dss_device *dssdev,
> -			       void (*cb)(void *cb_data,
> -					  enum drm_connector_status status),
> -			       void *cb_data);
> -	void (*unregister_hpd_cb)(struct omap_dss_device *dssdev);
> -	void (*enable_hpd)(struct omap_dss_device *dssdev);
> -	void (*disable_hpd)(struct omap_dss_device *dssdev);
> -
> -	int (*set_hdmi_mode)(struct omap_dss_device *dssdev, bool hdmi_mode);
> -	int (*set_hdmi_infoframe)(struct omap_dss_device *dssdev,
> -		const struct hdmi_avi_infoframe *avi);
>  };
>  
>  struct dss_device *omapdss_get_dss(void);
> diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
> index bbcf40db8b28..a5e581c8c8d6 100644
> --- a/drivers/gpu/drm/omapdrm/omap_connector.c
> +++ b/drivers/gpu/drm/omapdrm/omap_connector.c
> @@ -62,11 +62,10 @@ static enum drm_connector_status omap_connector_detect(
>  {
>  	struct omap_connector *omap_connector = to_omap_connector(connector);
>  	struct omap_dss_device *dssdev = omap_connector->dssdev;
> -	const struct omap_dss_driver *dssdrv = dssdev->driver;
>  	enum drm_connector_status ret;
>  
> -	if (dssdrv->detect) {
> -		if (dssdrv->detect(dssdev))
> +	if (dssdev->ops->detect) {
> +		if (dssdev->ops->detect(dssdev))
>  			ret = connector_status_connected;
>  		else
>  			ret = connector_status_disconnected;
> @@ -91,8 +90,8 @@ static void omap_connector_destroy(struct drm_connector *connector)
>  
>  	DBG("%s", omap_connector->dssdev->name);
>  	if (connector->polled == DRM_CONNECTOR_POLL_HPD &&
> -	    dssdev->driver->unregister_hpd_cb) {
> -		dssdev->driver->unregister_hpd_cb(dssdev);
> +	    dssdev->ops->unregister_hpd_cb) {
> +		dssdev->ops->unregister_hpd_cb(dssdev);
>  	}
>  	drm_connector_unregister(connector);
>  	drm_connector_cleanup(connector);
> @@ -107,7 +106,6 @@ static int omap_connector_get_modes(struct drm_connector *connector)
>  {
>  	struct omap_connector *omap_connector = to_omap_connector(connector);
>  	struct omap_dss_device *dssdev = omap_connector->dssdev;
> -	const struct omap_dss_driver *dssdrv = dssdev->driver;
>  	struct drm_device *dev = connector->dev;
>  	int n = 0;
>  
> @@ -118,13 +116,13 @@ static int omap_connector_get_modes(struct drm_connector *connector)
>  	 * LCD panels) we just return a single mode corresponding to the
>  	 * currently configured timings:
>  	 */
> -	if (dssdrv->read_edid) {
> +	if (dssdev->ops->read_edid) {
>  		void *edid = kzalloc(MAX_EDID, GFP_KERNEL);
>  
>  		if (!edid)
>  			return 0;
>  
> -		if ((dssdrv->read_edid(dssdev, edid, MAX_EDID) > 0) &&
> +		if ((dssdev->ops->read_edid(dssdev, edid, MAX_EDID) > 0) &&
>  				drm_edid_is_valid(edid)) {
>  			drm_mode_connector_update_edid_property(
>  					connector, edid);
> @@ -145,7 +143,7 @@ static int omap_connector_get_modes(struct drm_connector *connector)
>  		if (!mode)
>  			return 0;
>  
> -		dssdrv->get_timings(dssdev, &vm);
> +		dssdev->ops->get_timings(dssdev, &vm);
>  
>  		drm_display_mode_from_videomode(&vm, mode);
>  
> @@ -153,8 +151,8 @@ static int omap_connector_get_modes(struct drm_connector *connector)
>  		drm_mode_set_name(mode);
>  		drm_mode_probed_add(connector, mode);
>  
> -		if (dssdrv->get_size) {
> -			dssdrv->get_size(dssdev,
> +		if (dssdev->driver && dssdev->driver->get_size) {
> +			dssdev->driver->get_size(dssdev,
>  					 &connector->display_info.width_mm,
>  					 &connector->display_info.height_mm);
>  		}
> @@ -170,7 +168,6 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
>  {
>  	struct omap_connector *omap_connector = to_omap_connector(connector);
>  	struct omap_dss_device *dssdev = omap_connector->dssdev;
> -	const struct omap_dss_driver *dssdrv = dssdev->driver;
>  	struct videomode vm = {0};
>  	struct drm_device *dev = connector->dev;
>  	struct drm_display_mode *new_mode;
> @@ -185,12 +182,12 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
>  	 * a fixed resolution panel, check if the timings match with the
>  	 * panel's timings
>  	 */
> -	if (dssdrv->check_timings) {
> -		r = dssdrv->check_timings(dssdev, &vm);
> +	if (dssdev->ops->check_timings) {
> +		r = dssdev->ops->check_timings(dssdev, &vm);
>  	} else {
>  		struct videomode t = {0};
>  
> -		dssdrv->get_timings(dssdev, &t);
> +		dssdev->ops->get_timings(dssdev, &t);
>  
>  		/*
>  		 * Ignore the flags, as we don't get them from
> @@ -269,10 +266,10 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
>  				connector_type);
>  	drm_connector_helper_add(connector, &omap_connector_helper_funcs);
>  
> -	if (dssdev->driver->register_hpd_cb) {
> -		int ret = dssdev->driver->register_hpd_cb(dssdev,
> -							  omap_connector_hpd_cb,
> -							  omap_connector);
> +	if (dssdev->ops->register_hpd_cb) {
> +		int ret = dssdev->ops->register_hpd_cb(dssdev,
> +						       omap_connector_hpd_cb,
> +						       omap_connector);
>  		if (!ret)
>  			hpd_supported = true;
>  		else if (ret != -ENOTSUPP)
> @@ -282,7 +279,7 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
>  
>  	if (hpd_supported)
>  		connector->polled = DRM_CONNECTOR_POLL_HPD;
> -	else if (dssdev->driver->detect)
> +	else if (dssdev->ops->detect)
>  		connector->polled = DRM_CONNECTOR_POLL_CONNECT |
>  				    DRM_CONNECTOR_POLL_DISCONNECT;
>  	else
> diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
> index 80498dcde6d7..197d05312306 100644
> --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
> +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
> @@ -458,7 +458,7 @@ static void omap_crtc_mode_set_nofb(struct drm_crtc *crtc)
>  			if (dssdev) {
>  				struct videomode vm = {0};
>  
> -				dssdev->driver->get_timings(dssdev, &vm);
> +				dssdev->ops->get_timings(dssdev, &vm);
>  
>  				omap_crtc->vm.flags |= vm.flags & flags_mask;
>  			}
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> index e5b52fd4203e..49771475f792 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -378,8 +378,8 @@ static void omap_modeset_enable_external_hpd(struct drm_device *ddev)
>  	for (i = 0; i < priv->num_pipes; i++) {
>  		struct omap_dss_device *display = priv->pipes[i].display;
>  
> -		if (display->driver->enable_hpd)
> -			display->driver->enable_hpd(display);
> +		if (display->ops->enable_hpd)
> +			display->ops->enable_hpd(display);
>  	}
>  }
>  
> @@ -394,8 +394,8 @@ static void omap_modeset_disable_external_hpd(struct drm_device *ddev)
>  	for (i = 0; i < priv->num_pipes; i++) {
>  		struct omap_dss_device *display = priv->pipes[i].display;
>  
> -		if (display->driver->disable_hpd)
> -			display->driver->disable_hpd(display);
> +		if (display->ops->disable_hpd)
> +			display->ops->disable_hpd(display);
>  	}
>  }
>  
> @@ -724,7 +724,7 @@ static int omap_drm_suspend_all_displays(struct drm_device *ddev)
>  		struct omap_dss_device *display = priv->pipes[i].display;
>  
>  		if (display->state == OMAP_DSS_DISPLAY_ACTIVE) {
> -			display->driver->disable(display);
> +			display->ops->disable(display);
>  			display->activate_after_resume = true;
>  		} else {
>  			display->activate_after_resume = false;
> @@ -743,7 +743,7 @@ static int omap_drm_resume_all_displays(struct drm_device *ddev)
>  		struct omap_dss_device *display = priv->pipes[i].display;
>  
>  		if (display->activate_after_resume) {
> -			display->driver->enable(display);
> +			display->ops->enable(display);
>  			display->activate_after_resume = false;
>  		}
>  	}
> 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",
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20180611/f2df8b51/attachment-0001.sig>


More information about the dri-devel mailing list