Patchwork [41/48] drm: omapdrm: dss: Pass omap_dss_device pointer to dss_mgr_*() functions

login
register
mail settings
Submitter Laurent Pinchart
Date Oct. 13, 2017, 2:59 p.m.
Message ID <20171013145944.26557-42-laurent.pinchart@ideasonboard.com>
Download mbox | patch
Permalink /patch/10005041/
State New
Headers show

Comments

Laurent Pinchart - Oct. 13, 2017, 2:59 p.m.
The dss_mgr_*() functions take a channel argument to identify the
channel they operate on. This prevents the functions from accessing
driver data structures without resorting to global variables. In an
effort to remove global variables, pass the omap_dss_device pointer
associated with the channel instead. This will be used to look up the
omap_drm_private data structure to pass to the dss_mgr_ops.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/dss/dpi.c     | 32 ++++++++++----------------
 drivers/gpu/drm/omapdrm/dss/dsi.c     | 30 +++++++++++--------------
 drivers/gpu/drm/omapdrm/dss/hdmi4.c   | 20 +++++++----------
 drivers/gpu/drm/omapdrm/dss/hdmi5.c   | 20 +++++++----------
 drivers/gpu/drm/omapdrm/dss/omapdss.h | 22 +++++++++---------
 drivers/gpu/drm/omapdrm/dss/output.c  | 42 ++++++++++++++++++-----------------
 drivers/gpu/drm/omapdrm/dss/sdi.c     | 27 +++++++++-------------
 drivers/gpu/drm/omapdrm/dss/venc.c    | 18 ++++++---------
 8 files changed, 92 insertions(+), 119 deletions(-)
Sebastian Reichel - Oct. 17, 2017, 8:31 p.m.
Hi,

On Fri, Oct 13, 2017 at 05:59:37PM +0300, Laurent Pinchart wrote:
> The dss_mgr_*() functions take a channel argument to identify the
> channel they operate on. This prevents the functions from accessing
> driver data structures without resorting to global variables. In an
> effort to remove global variables, pass the omap_dss_device pointer
> associated with the channel instead. This will be used to look up the
> omap_drm_private data structure to pass to the dss_mgr_ops.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---

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

-- Sebastian

>  drivers/gpu/drm/omapdrm/dss/dpi.c     | 32 ++++++++++----------------
>  drivers/gpu/drm/omapdrm/dss/dsi.c     | 30 +++++++++++--------------
>  drivers/gpu/drm/omapdrm/dss/hdmi4.c   | 20 +++++++----------
>  drivers/gpu/drm/omapdrm/dss/hdmi5.c   | 20 +++++++----------
>  drivers/gpu/drm/omapdrm/dss/omapdss.h | 22 +++++++++---------
>  drivers/gpu/drm/omapdrm/dss/output.c  | 42 ++++++++++++++++++-----------------
>  drivers/gpu/drm/omapdrm/dss/sdi.c     | 27 +++++++++-------------
>  drivers/gpu/drm/omapdrm/dss/venc.c    | 18 ++++++---------
>  8 files changed, 92 insertions(+), 119 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c
> index b0f890a3c8db..3894e53ff58d 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dpi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
> @@ -344,8 +344,6 @@ static int dpi_set_dispc_clk(struct dpi_data *dpi, unsigned long pck_req,
>  
>  static int dpi_set_mode(struct dpi_data *dpi)
>  {
> -	struct omap_dss_device *out = &dpi->output;
> -	enum omap_channel channel = out->dispc_channel;
>  	struct videomode *vm = &dpi->vm;
>  	int lck_div = 0, pck_div = 0;
>  	unsigned long fck = 0;
> @@ -353,8 +351,8 @@ static int dpi_set_mode(struct dpi_data *dpi)
>  	int r = 0;
>  
>  	if (dpi->pll)
> -		r = dpi_set_pll_clk(dpi, channel, vm->pixelclock, &fck,
> -				&lck_div, &pck_div);
> +		r = dpi_set_pll_clk(dpi, dpi->output.dispc_channel,
> +				    vm->pixelclock, &fck, &lck_div, &pck_div);
>  	else
>  		r = dpi_set_dispc_clk(dpi, vm->pixelclock, &fck,
>  				&lck_div, &pck_div);
> @@ -370,16 +368,13 @@ static int dpi_set_mode(struct dpi_data *dpi)
>  		vm->pixelclock = pck;
>  	}
>  
> -	dss_mgr_set_timings(channel, vm);
> +	dss_mgr_set_timings(&dpi->output, vm);
>  
>  	return 0;
>  }
>  
>  static void dpi_config_lcd_manager(struct dpi_data *dpi)
>  {
> -	struct omap_dss_device *out = &dpi->output;
> -	enum omap_channel channel = out->dispc_channel;
> -
>  	dpi->mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS;
>  
>  	dpi->mgr_config.stallmode = false;
> @@ -389,14 +384,13 @@ static void dpi_config_lcd_manager(struct dpi_data *dpi)
>  
>  	dpi->mgr_config.lcden_sig_polarity = 0;
>  
> -	dss_mgr_set_lcd_config(channel, &dpi->mgr_config);
> +	dss_mgr_set_lcd_config(&dpi->output, &dpi->mgr_config);
>  }
>  
>  static int dpi_display_enable(struct omap_dss_device *dssdev)
>  {
>  	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
>  	struct omap_dss_device *out = &dpi->output;
> -	enum omap_channel channel = out->dispc_channel;
>  	int r;
>  
>  	mutex_lock(&dpi->lock);
> @@ -417,7 +411,7 @@ static int dpi_display_enable(struct omap_dss_device *dssdev)
>  	if (r)
>  		goto err_get_dispc;
>  
> -	r = dss_dpi_select_source(dpi->dss, out->port_num, channel);
> +	r = dss_dpi_select_source(dpi->dss, out->port_num, out->dispc_channel);
>  	if (r)
>  		goto err_src_sel;
>  
> @@ -435,7 +429,7 @@ static int dpi_display_enable(struct omap_dss_device *dssdev)
>  
>  	mdelay(2);
>  
> -	r = dss_mgr_enable(channel);
> +	r = dss_mgr_enable(&dpi->output);
>  	if (r)
>  		goto err_mgr_enable;
>  
> @@ -462,14 +456,14 @@ static int dpi_display_enable(struct omap_dss_device *dssdev)
>  static void dpi_display_disable(struct omap_dss_device *dssdev)
>  {
>  	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
> -	enum omap_channel channel = dpi->output.dispc_channel;
>  
>  	mutex_lock(&dpi->lock);
>  
> -	dss_mgr_disable(channel);
> +	dss_mgr_disable(&dpi->output);
>  
>  	if (dpi->pll) {
> -		dss_select_lcd_clk_source(dpi->dss, channel, DSS_CLK_SRC_FCK);
> +		dss_select_lcd_clk_source(dpi->dss, dpi->output.dispc_channel,
> +					  DSS_CLK_SRC_FCK);
>  		dss_pll_disable(dpi->pll);
>  	}
>  
> @@ -659,7 +653,6 @@ static int dpi_connect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
>  	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
> -	enum omap_channel channel = dpi->output.dispc_channel;
>  	int r;
>  
>  	r = dpi_init_regulator(dpi);
> @@ -668,7 +661,7 @@ static int dpi_connect(struct omap_dss_device *dssdev,
>  
>  	dpi_init_pll(dpi);
>  
> -	r = dss_mgr_connect(channel, dssdev);
> +	r = dss_mgr_connect(&dpi->output, dssdev);
>  	if (r)
>  		return r;
>  
> @@ -676,7 +669,7 @@ static int dpi_connect(struct omap_dss_device *dssdev,
>  	if (r) {
>  		DSSERR("failed to connect output to new device: %s\n",
>  				dst->name);
> -		dss_mgr_disconnect(channel, dssdev);
> +		dss_mgr_disconnect(&dpi->output, dssdev);
>  		return r;
>  	}
>  
> @@ -687,7 +680,6 @@ static void dpi_disconnect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
>  	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
> -	enum omap_channel channel = dpi->output.dispc_channel;
>  
>  	WARN_ON(dst != dssdev->dst);
>  
> @@ -696,7 +688,7 @@ static void dpi_disconnect(struct omap_dss_device *dssdev,
>  
>  	omapdss_output_unset_device(dssdev);
>  
> -	dss_mgr_disconnect(channel, dssdev);
> +	dss_mgr_disconnect(&dpi->output, dssdev);
>  }
>  
>  static const struct omapdss_dpi_ops dpi_ops = {
> diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
> index d1cc036ed280..512625ed03e2 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dsi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
> @@ -3833,7 +3833,6 @@ static int dsi_configure_pins(struct omap_dss_device *dssdev,
>  static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
>  {
>  	struct dsi_data *dsi = to_dsi_data(dssdev);
> -	enum omap_channel dispc_channel = dssdev->dispc_channel;
>  	int bpp = dsi_get_pixel_size(dsi->pix_fmt);
>  	struct omap_dss_device *out = &dsi->output;
>  	u8 data_type;
> @@ -3883,7 +3882,7 @@ static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
>  		dsi_if_enable(dsi, true);
>  	}
>  
> -	r = dss_mgr_enable(dispc_channel);
> +	r = dss_mgr_enable(&dsi->output);
>  	if (r)
>  		goto err_mgr_enable;
>  
> @@ -3903,7 +3902,6 @@ static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
>  static void dsi_disable_video_output(struct omap_dss_device *dssdev, int channel)
>  {
>  	struct dsi_data *dsi = to_dsi_data(dssdev);
> -	enum omap_channel dispc_channel = dssdev->dispc_channel;
>  
>  	if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
>  		dsi_if_enable(dsi, false);
> @@ -3916,14 +3914,13 @@ static void dsi_disable_video_output(struct omap_dss_device *dssdev, int channel
>  		dsi_if_enable(dsi, true);
>  	}
>  
> -	dss_mgr_disable(dispc_channel);
> +	dss_mgr_disable(&dsi->output);
>  
>  	dsi_display_uninit_dispc(dsi);
>  }
>  
>  static void dsi_update_screen_dispc(struct dsi_data *dsi)
>  {
> -	enum omap_channel dispc_channel = dsi->output.dispc_channel;
>  	unsigned int bytespp;
>  	unsigned int bytespl;
>  	unsigned int bytespf;
> @@ -3985,9 +3982,9 @@ static void dsi_update_screen_dispc(struct dsi_data *dsi)
>  		msecs_to_jiffies(250));
>  	BUG_ON(r == 0);
>  
> -	dss_mgr_set_timings(dispc_channel, &dsi->vm);
> +	dss_mgr_set_timings(&dsi->output, &dsi->vm);
>  
> -	dss_mgr_start_update(dispc_channel);
> +	dss_mgr_start_update(&dsi->output);
>  
>  	if (dsi->te_enabled) {
>  		/* disable LP_RX_TO, so that we can receive TE.  Time to wait
> @@ -4114,7 +4111,7 @@ static int dsi_display_init_dispc(struct dsi_data *dsi)
>  			DSS_CLK_SRC_PLL2_1);
>  
>  	if (dsi->mode == OMAP_DSS_DSI_CMD_MODE) {
> -		r = dss_mgr_register_framedone_handler(channel,
> +		r = dss_mgr_register_framedone_handler(&dsi->output,
>  				dsi_framedone_irq_callback, dsi);
>  		if (r) {
>  			DSSERR("can't register FRAMEDONE handler\n");
> @@ -4144,7 +4141,7 @@ static int dsi_display_init_dispc(struct dsi_data *dsi)
>  	dsi->vm.flags &= ~DISPLAY_FLAGS_SYNC_POSEDGE;
>  	dsi->vm.flags |= DISPLAY_FLAGS_SYNC_NEGEDGE;
>  
> -	dss_mgr_set_timings(channel, &dsi->vm);
> +	dss_mgr_set_timings(&dsi->output, &dsi->vm);
>  
>  	r = dsi_configure_dispc_clocks(dsi);
>  	if (r)
> @@ -4155,12 +4152,12 @@ static int dsi_display_init_dispc(struct dsi_data *dsi)
>  			dsi_get_pixel_size(dsi->pix_fmt);
>  	dsi->mgr_config.lcden_sig_polarity = 0;
>  
> -	dss_mgr_set_lcd_config(channel, &dsi->mgr_config);
> +	dss_mgr_set_lcd_config(&dsi->output, &dsi->mgr_config);
>  
>  	return 0;
>  err1:
>  	if (dsi->mode == OMAP_DSS_DSI_CMD_MODE)
> -		dss_mgr_unregister_framedone_handler(channel,
> +		dss_mgr_unregister_framedone_handler(&dsi->output,
>  				dsi_framedone_irq_callback, dsi);
>  err:
>  	dss_select_lcd_clk_source(dsi->dss, channel, DSS_CLK_SRC_FCK);
> @@ -4172,7 +4169,7 @@ static void dsi_display_uninit_dispc(struct dsi_data *dsi)
>  	enum omap_channel channel = dsi->output.dispc_channel;
>  
>  	if (dsi->mode == OMAP_DSS_DSI_CMD_MODE)
> -		dss_mgr_unregister_framedone_handler(channel,
> +		dss_mgr_unregister_framedone_handler(&dsi->output,
>  				dsi_framedone_irq_callback, dsi);
>  
>  	dss_select_lcd_clk_source(dsi->dss, channel, DSS_CLK_SRC_FCK);
> @@ -4967,14 +4964,13 @@ static int dsi_connect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
>  	struct dsi_data *dsi = to_dsi_data(dssdev);
> -	enum omap_channel dispc_channel = dssdev->dispc_channel;
>  	int r;
>  
>  	r = dsi_regulator_init(dsi);
>  	if (r)
>  		return r;
>  
> -	r = dss_mgr_connect(dispc_channel, dssdev);
> +	r = dss_mgr_connect(&dsi->output, dssdev);
>  	if (r)
>  		return r;
>  
> @@ -4982,7 +4978,7 @@ static int dsi_connect(struct omap_dss_device *dssdev,
>  	if (r) {
>  		DSSERR("failed to connect output to new device: %s\n",
>  				dssdev->name);
> -		dss_mgr_disconnect(dispc_channel, dssdev);
> +		dss_mgr_disconnect(&dsi->output, dssdev);
>  		return r;
>  	}
>  
> @@ -4992,7 +4988,7 @@ static int dsi_connect(struct omap_dss_device *dssdev,
>  static void dsi_disconnect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
> -	enum omap_channel dispc_channel = dssdev->dispc_channel;
> +	struct dsi_data *dsi = to_dsi_data(dssdev);
>  
>  	WARN_ON(dst != dssdev->dst);
>  
> @@ -5001,7 +4997,7 @@ static void dsi_disconnect(struct omap_dss_device *dssdev,
>  
>  	omapdss_output_unset_device(dssdev);
>  
> -	dss_mgr_disconnect(dispc_channel, dssdev);
> +	dss_mgr_disconnect(&dsi->output, dssdev);
>  }
>  
>  static const struct omapdss_dsi_ops dsi_ops = {
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> index f0a30b248a7d..56de3c75b0a0 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> @@ -174,7 +174,6 @@ static int hdmi_power_on_full(struct omap_hdmi *hdmi)
>  {
>  	int r;
>  	struct videomode *vm;
> -	enum omap_channel channel = hdmi->output.dispc_channel;
>  	struct hdmi_wp_data *wp = &hdmi->wp;
>  	struct dss_pll_clock_info hdmi_cinfo = { 0 };
>  	unsigned int pc;
> @@ -228,9 +227,9 @@ static int hdmi_power_on_full(struct omap_hdmi *hdmi)
>  	hdmi4_configure(&hdmi->core, &hdmi->wp, &hdmi->cfg);
>  
>  	/* tv size */
> -	dss_mgr_set_timings(channel, vm);
> +	dss_mgr_set_timings(&hdmi->output, vm);
>  
> -	r = dss_mgr_enable(channel);
> +	r = dss_mgr_enable(&hdmi->output);
>  	if (r)
>  		goto err_mgr_enable;
>  
> @@ -244,7 +243,7 @@ static int hdmi_power_on_full(struct omap_hdmi *hdmi)
>  	return 0;
>  
>  err_vid_enable:
> -	dss_mgr_disable(channel);
> +	dss_mgr_disable(&hdmi->output);
>  err_mgr_enable:
>  	hdmi_wp_set_phy_pwr(&hdmi->wp, HDMI_PHYPWRCMD_OFF);
>  err_phy_pwr:
> @@ -258,13 +257,11 @@ static int hdmi_power_on_full(struct omap_hdmi *hdmi)
>  
>  static void hdmi_power_off_full(struct omap_hdmi *hdmi)
>  {
> -	enum omap_channel channel = hdmi->output.dispc_channel;
> -
>  	hdmi_wp_clear_irqenable(&hdmi->wp, ~HDMI_IRQ_CORE);
>  
>  	hdmi_wp_video_stop(&hdmi->wp);
>  
> -	dss_mgr_disable(channel);
> +	dss_mgr_disable(&hdmi->output);
>  
>  	hdmi_wp_set_phy_pwr(&hdmi->wp, HDMI_PHYPWRCMD_OFF);
>  
> @@ -459,14 +456,13 @@ static int hdmi_connect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
>  	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
> -	enum omap_channel channel = dssdev->dispc_channel;
>  	int r;
>  
>  	r = hdmi_init_regulator(hdmi);
>  	if (r)
>  		return r;
>  
> -	r = dss_mgr_connect(channel, dssdev);
> +	r = dss_mgr_connect(&hdmi->output, dssdev);
>  	if (r)
>  		return r;
>  
> @@ -474,7 +470,7 @@ static int hdmi_connect(struct omap_dss_device *dssdev,
>  	if (r) {
>  		DSSERR("failed to connect output to new device: %s\n",
>  				dst->name);
> -		dss_mgr_disconnect(channel, dssdev);
> +		dss_mgr_disconnect(&hdmi->output, dssdev);
>  		return r;
>  	}
>  
> @@ -484,7 +480,7 @@ static int hdmi_connect(struct omap_dss_device *dssdev,
>  static void hdmi_disconnect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
> -	enum omap_channel channel = dssdev->dispc_channel;
> +	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
>  
>  	WARN_ON(dst != dssdev->dst);
>  
> @@ -493,7 +489,7 @@ static void hdmi_disconnect(struct omap_dss_device *dssdev,
>  
>  	omapdss_output_unset_device(dssdev);
>  
> -	dss_mgr_disconnect(channel, dssdev);
> +	dss_mgr_disconnect(&hdmi->output, dssdev);
>  }
>  
>  static int hdmi_read_edid(struct omap_dss_device *dssdev,
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> index ed8a2bd2a035..1e839af800e7 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> @@ -172,7 +172,6 @@ static int hdmi_power_on_full(struct omap_hdmi *hdmi)
>  {
>  	int r;
>  	struct videomode *vm;
> -	enum omap_channel channel = hdmi->output.dispc_channel;
>  	struct dss_pll_clock_info hdmi_cinfo = { 0 };
>  	unsigned int pc;
>  
> @@ -226,9 +225,9 @@ static int hdmi_power_on_full(struct omap_hdmi *hdmi)
>  	hdmi5_configure(&hdmi->core, &hdmi->wp, &hdmi->cfg);
>  
>  	/* tv size */
> -	dss_mgr_set_timings(channel, vm);
> +	dss_mgr_set_timings(&hdmi->output, vm);
>  
> -	r = dss_mgr_enable(channel);
> +	r = dss_mgr_enable(&hdmi->output);
>  	if (r)
>  		goto err_mgr_enable;
>  
> @@ -242,7 +241,7 @@ static int hdmi_power_on_full(struct omap_hdmi *hdmi)
>  	return 0;
>  
>  err_vid_enable:
> -	dss_mgr_disable(channel);
> +	dss_mgr_disable(&hdmi->output);
>  err_mgr_enable:
>  	hdmi_wp_set_phy_pwr(&hdmi->wp, HDMI_PHYPWRCMD_OFF);
>  err_phy_pwr:
> @@ -256,13 +255,11 @@ static int hdmi_power_on_full(struct omap_hdmi *hdmi)
>  
>  static void hdmi_power_off_full(struct omap_hdmi *hdmi)
>  {
> -	enum omap_channel channel = hdmi->output.dispc_channel;
> -
>  	hdmi_wp_clear_irqenable(&hdmi->wp, 0xffffffff);
>  
>  	hdmi_wp_video_stop(&hdmi->wp);
>  
> -	dss_mgr_disable(channel);
> +	dss_mgr_disable(&hdmi->output);
>  
>  	hdmi_wp_set_phy_pwr(&hdmi->wp, HDMI_PHYPWRCMD_OFF);
>  
> @@ -463,14 +460,13 @@ static int hdmi_connect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
>  	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
> -	enum omap_channel channel = dssdev->dispc_channel;
>  	int r;
>  
>  	r = hdmi_init_regulator(hdmi);
>  	if (r)
>  		return r;
>  
> -	r = dss_mgr_connect(channel, dssdev);
> +	r = dss_mgr_connect(&hdmi->output, dssdev);
>  	if (r)
>  		return r;
>  
> @@ -478,7 +474,7 @@ static int hdmi_connect(struct omap_dss_device *dssdev,
>  	if (r) {
>  		DSSERR("failed to connect output to new device: %s\n",
>  				dst->name);
> -		dss_mgr_disconnect(channel, dssdev);
> +		dss_mgr_disconnect(&hdmi->output, dssdev);
>  		return r;
>  	}
>  
> @@ -488,7 +484,7 @@ static int hdmi_connect(struct omap_dss_device *dssdev,
>  static void hdmi_disconnect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
> -	enum omap_channel channel = dssdev->dispc_channel;
> +	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
>  
>  	WARN_ON(dst != dssdev->dst);
>  
> @@ -497,7 +493,7 @@ static void hdmi_disconnect(struct omap_dss_device *dssdev,
>  
>  	omapdss_output_unset_device(dssdev);
>  
> -	dss_mgr_disconnect(channel, dssdev);
> +	dss_mgr_disconnect(&hdmi->output, dssdev);
>  }
>  
>  static int hdmi_read_edid(struct omap_dss_device *dssdev,
> diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> index 6f9b9b2d8af2..8024680e8d57 100644
> --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
> +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> @@ -656,20 +656,20 @@ struct dss_mgr_ops {
>  int dss_install_mgr_ops(const struct dss_mgr_ops *mgr_ops);
>  void dss_uninstall_mgr_ops(void);
>  
> -int dss_mgr_connect(enum omap_channel channel,
> -		struct omap_dss_device *dst);
> -void dss_mgr_disconnect(enum omap_channel channel,
> -		struct omap_dss_device *dst);
> -void dss_mgr_set_timings(enum omap_channel channel,
> +int dss_mgr_connect(struct omap_dss_device *dssdev,
> +		    struct omap_dss_device *dst);
> +void dss_mgr_disconnect(struct omap_dss_device *dssdev,
> +			struct omap_dss_device *dst);
> +void dss_mgr_set_timings(struct omap_dss_device *dssdev,
>  		const struct videomode *vm);
> -void dss_mgr_set_lcd_config(enum omap_channel channel,
> +void dss_mgr_set_lcd_config(struct omap_dss_device *dssdev,
>  		const struct dss_lcd_mgr_config *config);
> -int dss_mgr_enable(enum omap_channel channel);
> -void dss_mgr_disable(enum omap_channel channel);
> -void dss_mgr_start_update(enum omap_channel channel);
> -int dss_mgr_register_framedone_handler(enum omap_channel channel,
> +int dss_mgr_enable(struct omap_dss_device *dssdev);
> +void dss_mgr_disable(struct omap_dss_device *dssdev);
> +void dss_mgr_start_update(struct omap_dss_device *dssdev);
> +int dss_mgr_register_framedone_handler(struct omap_dss_device *dssdev,
>  		void (*handler)(void *), void *data);
> -void dss_mgr_unregister_framedone_handler(enum omap_channel channel,
> +void dss_mgr_unregister_framedone_handler(struct omap_dss_device *dssdev,
>  		void (*handler)(void *), void *data);
>  
>  /* dispc ops */
> diff --git a/drivers/gpu/drm/omapdrm/dss/output.c b/drivers/gpu/drm/omapdrm/dss/output.c
> index a84ab0337a91..0573b5099f8f 100644
> --- a/drivers/gpu/drm/omapdrm/dss/output.c
> +++ b/drivers/gpu/drm/omapdrm/dss/output.c
> @@ -184,52 +184,54 @@ void dss_uninstall_mgr_ops(void)
>  }
>  EXPORT_SYMBOL(dss_uninstall_mgr_ops);
>  
> -int dss_mgr_connect(enum omap_channel channel,
> -		struct omap_dss_device *dst)
> +int dss_mgr_connect(struct omap_dss_device *dssdev, struct omap_dss_device *dst)
>  {
> -	return dss_mgr_ops->connect(channel, dst);
> +	return dss_mgr_ops->connect(dssdev->dispc_channel, dst);
>  }
>  
> -void dss_mgr_disconnect(enum omap_channel channel,
> -		struct omap_dss_device *dst)
> +void dss_mgr_disconnect(struct omap_dss_device *dssdev,
> +			struct omap_dss_device *dst)
>  {
> -	dss_mgr_ops->disconnect(channel, dst);
> +	dss_mgr_ops->disconnect(dssdev->dispc_channel, dst);
>  }
>  
> -void dss_mgr_set_timings(enum omap_channel channel, const struct videomode *vm)
> +void dss_mgr_set_timings(struct omap_dss_device *dssdev,
> +			 const struct videomode *vm)
>  {
> -	dss_mgr_ops->set_timings(channel, vm);
> +	dss_mgr_ops->set_timings(dssdev->dispc_channel, vm);
>  }
>  
> -void dss_mgr_set_lcd_config(enum omap_channel channel,
> +void dss_mgr_set_lcd_config(struct omap_dss_device *dssdev,
>  		const struct dss_lcd_mgr_config *config)
>  {
> -	dss_mgr_ops->set_lcd_config(channel, config);
> +	dss_mgr_ops->set_lcd_config(dssdev->dispc_channel, config);
>  }
>  
> -int dss_mgr_enable(enum omap_channel channel)
> +int dss_mgr_enable(struct omap_dss_device *dssdev)
>  {
> -	return dss_mgr_ops->enable(channel);
> +	return dss_mgr_ops->enable(dssdev->dispc_channel);
>  }
>  
> -void dss_mgr_disable(enum omap_channel channel)
> +void dss_mgr_disable(struct omap_dss_device *dssdev)
>  {
> -	dss_mgr_ops->disable(channel);
> +	dss_mgr_ops->disable(dssdev->dispc_channel);
>  }
>  
> -void dss_mgr_start_update(enum omap_channel channel)
> +void dss_mgr_start_update(struct omap_dss_device *dssdev)
>  {
> -	dss_mgr_ops->start_update(channel);
> +	dss_mgr_ops->start_update(dssdev->dispc_channel);
>  }
>  
> -int dss_mgr_register_framedone_handler(enum omap_channel channel,
> +int dss_mgr_register_framedone_handler(struct omap_dss_device *dssdev,
>  		void (*handler)(void *), void *data)
>  {
> -	return dss_mgr_ops->register_framedone_handler(channel, handler, data);
> +	return dss_mgr_ops->register_framedone_handler(dssdev->dispc_channel,
> +						       handler, data);
>  }
>  
> -void dss_mgr_unregister_framedone_handler(enum omap_channel channel,
> +void dss_mgr_unregister_framedone_handler(struct omap_dss_device *dssdev,
>  		void (*handler)(void *), void *data)
>  {
> -	dss_mgr_ops->unregister_framedone_handler(channel, handler, data);
> +	dss_mgr_ops->unregister_framedone_handler(dssdev->dispc_channel,
> +						  handler, data);
>  }
> diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c
> index a35dc51c5a6a..681a3653dd8c 100644
> --- a/drivers/gpu/drm/omapdrm/dss/sdi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c
> @@ -115,8 +115,6 @@ static int sdi_calc_clock_div(struct sdi_device *sdi, unsigned long pclk,
>  
>  static void sdi_config_lcd_manager(struct sdi_device *sdi)
>  {
> -	enum omap_channel channel = sdi->output.dispc_channel;
> -
>  	sdi->mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS;
>  
>  	sdi->mgr_config.stallmode = false;
> @@ -125,21 +123,19 @@ static void sdi_config_lcd_manager(struct sdi_device *sdi)
>  	sdi->mgr_config.video_port_width = 24;
>  	sdi->mgr_config.lcden_sig_polarity = 1;
>  
> -	dss_mgr_set_lcd_config(channel, &sdi->mgr_config);
> +	dss_mgr_set_lcd_config(&sdi->output, &sdi->mgr_config);
>  }
>  
>  static int sdi_display_enable(struct omap_dss_device *dssdev)
>  {
>  	struct sdi_device *sdi = dssdev_to_sdi(dssdev);
> -	struct omap_dss_device *out = &sdi->output;
> -	enum omap_channel channel = dssdev->dispc_channel;
>  	struct videomode *vm = &sdi->vm;
>  	unsigned long fck;
>  	struct dispc_clock_info dispc_cinfo;
>  	unsigned long pck;
>  	int r;
>  
> -	if (!out->dispc_channel_connected) {
> +	if (!sdi->output.dispc_channel_connected) {
>  		DSSERR("failed to enable display: no output/manager\n");
>  		return -ENODEV;
>  	}
> @@ -171,7 +167,7 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
>  	}
>  
>  
> -	dss_mgr_set_timings(channel, vm);
> +	dss_mgr_set_timings(&sdi->output, vm);
>  
>  	r = dss_set_fck_rate(sdi->dss, fck);
>  	if (r)
> @@ -190,7 +186,8 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
>  	 * need to care about the shadow register mechanism for pck-free. The
>  	 * exact reason for this is unknown.
>  	 */
> -	dispc_mgr_set_clock_div(channel, &sdi->mgr_config.clock_info);
> +	dispc_mgr_set_clock_div(sdi->output.dispc_channel,
> +				&sdi->mgr_config.clock_info);
>  
>  	dss_sdi_init(sdi->dss, sdi->datapairs);
>  	r = dss_sdi_enable(sdi->dss);
> @@ -198,7 +195,7 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
>  		goto err_sdi_enable;
>  	mdelay(2);
>  
> -	r = dss_mgr_enable(channel);
> +	r = dss_mgr_enable(&sdi->output);
>  	if (r)
>  		goto err_mgr_enable;
>  
> @@ -219,9 +216,8 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
>  static void sdi_display_disable(struct omap_dss_device *dssdev)
>  {
>  	struct sdi_device *sdi = dssdev_to_sdi(dssdev);
> -	enum omap_channel channel = dssdev->dispc_channel;
>  
> -	dss_mgr_disable(channel);
> +	dss_mgr_disable(&sdi->output);
>  
>  	dss_sdi_disable(sdi->dss);
>  
> @@ -283,14 +279,13 @@ static int sdi_connect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
>  	struct sdi_device *sdi = dssdev_to_sdi(dssdev);
> -	enum omap_channel channel = dssdev->dispc_channel;
>  	int r;
>  
>  	r = sdi_init_regulator(sdi);
>  	if (r)
>  		return r;
>  
> -	r = dss_mgr_connect(channel, dssdev);
> +	r = dss_mgr_connect(&sdi->output, dssdev);
>  	if (r)
>  		return r;
>  
> @@ -298,7 +293,7 @@ static int sdi_connect(struct omap_dss_device *dssdev,
>  	if (r) {
>  		DSSERR("failed to connect output to new device: %s\n",
>  				dst->name);
> -		dss_mgr_disconnect(channel, dssdev);
> +		dss_mgr_disconnect(&sdi->output, dssdev);
>  		return r;
>  	}
>  
> @@ -308,7 +303,7 @@ static int sdi_connect(struct omap_dss_device *dssdev,
>  static void sdi_disconnect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
> -	enum omap_channel channel = dssdev->dispc_channel;
> +	struct sdi_device *sdi = dssdev_to_sdi(dssdev);
>  
>  	WARN_ON(dst != dssdev->dst);
>  
> @@ -317,7 +312,7 @@ static void sdi_disconnect(struct omap_dss_device *dssdev,
>  
>  	omapdss_output_unset_device(dssdev);
>  
> -	dss_mgr_disconnect(channel, dssdev);
> +	dss_mgr_disconnect(&sdi->output, dssdev);
>  }
>  
>  static const struct omapdss_sdi_ops sdi_ops = {
> diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c
> index 7acdbfefe397..d82645e84db7 100644
> --- a/drivers/gpu/drm/omapdrm/dss/venc.c
> +++ b/drivers/gpu/drm/omapdrm/dss/venc.c
> @@ -468,7 +468,6 @@ static const struct venc_config *venc_timings_to_config(struct videomode *vm)
>  
>  static int venc_power_on(struct venc_device *venc)
>  {
> -	enum omap_channel channel = venc->output.dispc_channel;
>  	u32 l;
>  	int r;
>  
> @@ -494,13 +493,13 @@ static int venc_power_on(struct venc_device *venc)
>  
>  	venc_write_reg(venc, VENC_OUTPUT_CONTROL, l);
>  
> -	dss_mgr_set_timings(channel, &venc->vm);
> +	dss_mgr_set_timings(&venc->output, &venc->vm);
>  
>  	r = regulator_enable(venc->vdda_dac_reg);
>  	if (r)
>  		goto err1;
>  
> -	r = dss_mgr_enable(channel);
> +	r = dss_mgr_enable(&venc->output);
>  	if (r)
>  		goto err2;
>  
> @@ -519,12 +518,10 @@ static int venc_power_on(struct venc_device *venc)
>  
>  static void venc_power_off(struct venc_device *venc)
>  {
> -	enum omap_channel channel = venc->output.dispc_channel;
> -
>  	venc_write_reg(venc, VENC_OUTPUT_CONTROL, 0);
>  	dss_set_dac_pwrdn_bgz(venc->dss, 0);
>  
> -	dss_mgr_disable(channel);
> +	dss_mgr_disable(&venc->output);
>  
>  	regulator_disable(venc->vdda_dac_reg);
>  
> @@ -768,14 +765,13 @@ static int venc_connect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
>  	struct venc_device *venc = dssdev_to_venc(dssdev);
> -	enum omap_channel channel = dssdev->dispc_channel;
>  	int r;
>  
>  	r = venc_init_regulator(venc);
>  	if (r)
>  		return r;
>  
> -	r = dss_mgr_connect(channel, dssdev);
> +	r = dss_mgr_connect(&venc->output, dssdev);
>  	if (r)
>  		return r;
>  
> @@ -783,7 +779,7 @@ static int venc_connect(struct omap_dss_device *dssdev,
>  	if (r) {
>  		DSSERR("failed to connect output to new device: %s\n",
>  				dst->name);
> -		dss_mgr_disconnect(channel, dssdev);
> +		dss_mgr_disconnect(&venc->output, dssdev);
>  		return r;
>  	}
>  
> @@ -793,7 +789,7 @@ static int venc_connect(struct omap_dss_device *dssdev,
>  static void venc_disconnect(struct omap_dss_device *dssdev,
>  		struct omap_dss_device *dst)
>  {
> -	enum omap_channel channel = dssdev->dispc_channel;
> +	struct venc_device *venc = dssdev_to_venc(dssdev);
>  
>  	WARN_ON(dst != dssdev->dst);
>  
> @@ -802,7 +798,7 @@ static void venc_disconnect(struct omap_dss_device *dssdev,
>  
>  	omapdss_output_unset_device(dssdev);
>  
> -	dss_mgr_disconnect(channel, dssdev);
> +	dss_mgr_disconnect(&venc->output, dssdev);
>  }
>  
>  static const struct omapdss_atv_ops venc_ops = {
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

Patch

diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c
index b0f890a3c8db..3894e53ff58d 100644
--- a/drivers/gpu/drm/omapdrm/dss/dpi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
@@ -344,8 +344,6 @@  static int dpi_set_dispc_clk(struct dpi_data *dpi, unsigned long pck_req,
 
 static int dpi_set_mode(struct dpi_data *dpi)
 {
-	struct omap_dss_device *out = &dpi->output;
-	enum omap_channel channel = out->dispc_channel;
 	struct videomode *vm = &dpi->vm;
 	int lck_div = 0, pck_div = 0;
 	unsigned long fck = 0;
@@ -353,8 +351,8 @@  static int dpi_set_mode(struct dpi_data *dpi)
 	int r = 0;
 
 	if (dpi->pll)
-		r = dpi_set_pll_clk(dpi, channel, vm->pixelclock, &fck,
-				&lck_div, &pck_div);
+		r = dpi_set_pll_clk(dpi, dpi->output.dispc_channel,
+				    vm->pixelclock, &fck, &lck_div, &pck_div);
 	else
 		r = dpi_set_dispc_clk(dpi, vm->pixelclock, &fck,
 				&lck_div, &pck_div);
@@ -370,16 +368,13 @@  static int dpi_set_mode(struct dpi_data *dpi)
 		vm->pixelclock = pck;
 	}
 
-	dss_mgr_set_timings(channel, vm);
+	dss_mgr_set_timings(&dpi->output, vm);
 
 	return 0;
 }
 
 static void dpi_config_lcd_manager(struct dpi_data *dpi)
 {
-	struct omap_dss_device *out = &dpi->output;
-	enum omap_channel channel = out->dispc_channel;
-
 	dpi->mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS;
 
 	dpi->mgr_config.stallmode = false;
@@ -389,14 +384,13 @@  static void dpi_config_lcd_manager(struct dpi_data *dpi)
 
 	dpi->mgr_config.lcden_sig_polarity = 0;
 
-	dss_mgr_set_lcd_config(channel, &dpi->mgr_config);
+	dss_mgr_set_lcd_config(&dpi->output, &dpi->mgr_config);
 }
 
 static int dpi_display_enable(struct omap_dss_device *dssdev)
 {
 	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
 	struct omap_dss_device *out = &dpi->output;
-	enum omap_channel channel = out->dispc_channel;
 	int r;
 
 	mutex_lock(&dpi->lock);
@@ -417,7 +411,7 @@  static int dpi_display_enable(struct omap_dss_device *dssdev)
 	if (r)
 		goto err_get_dispc;
 
-	r = dss_dpi_select_source(dpi->dss, out->port_num, channel);
+	r = dss_dpi_select_source(dpi->dss, out->port_num, out->dispc_channel);
 	if (r)
 		goto err_src_sel;
 
@@ -435,7 +429,7 @@  static int dpi_display_enable(struct omap_dss_device *dssdev)
 
 	mdelay(2);
 
-	r = dss_mgr_enable(channel);
+	r = dss_mgr_enable(&dpi->output);
 	if (r)
 		goto err_mgr_enable;
 
@@ -462,14 +456,14 @@  static int dpi_display_enable(struct omap_dss_device *dssdev)
 static void dpi_display_disable(struct omap_dss_device *dssdev)
 {
 	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
-	enum omap_channel channel = dpi->output.dispc_channel;
 
 	mutex_lock(&dpi->lock);
 
-	dss_mgr_disable(channel);
+	dss_mgr_disable(&dpi->output);
 
 	if (dpi->pll) {
-		dss_select_lcd_clk_source(dpi->dss, channel, DSS_CLK_SRC_FCK);
+		dss_select_lcd_clk_source(dpi->dss, dpi->output.dispc_channel,
+					  DSS_CLK_SRC_FCK);
 		dss_pll_disable(dpi->pll);
 	}
 
@@ -659,7 +653,6 @@  static int dpi_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
 	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
-	enum omap_channel channel = dpi->output.dispc_channel;
 	int r;
 
 	r = dpi_init_regulator(dpi);
@@ -668,7 +661,7 @@  static int dpi_connect(struct omap_dss_device *dssdev,
 
 	dpi_init_pll(dpi);
 
-	r = dss_mgr_connect(channel, dssdev);
+	r = dss_mgr_connect(&dpi->output, dssdev);
 	if (r)
 		return r;
 
@@ -676,7 +669,7 @@  static int dpi_connect(struct omap_dss_device *dssdev,
 	if (r) {
 		DSSERR("failed to connect output to new device: %s\n",
 				dst->name);
-		dss_mgr_disconnect(channel, dssdev);
+		dss_mgr_disconnect(&dpi->output, dssdev);
 		return r;
 	}
 
@@ -687,7 +680,6 @@  static void dpi_disconnect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
 	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
-	enum omap_channel channel = dpi->output.dispc_channel;
 
 	WARN_ON(dst != dssdev->dst);
 
@@ -696,7 +688,7 @@  static void dpi_disconnect(struct omap_dss_device *dssdev,
 
 	omapdss_output_unset_device(dssdev);
 
-	dss_mgr_disconnect(channel, dssdev);
+	dss_mgr_disconnect(&dpi->output, dssdev);
 }
 
 static const struct omapdss_dpi_ops dpi_ops = {
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
index d1cc036ed280..512625ed03e2 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -3833,7 +3833,6 @@  static int dsi_configure_pins(struct omap_dss_device *dssdev,
 static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
 {
 	struct dsi_data *dsi = to_dsi_data(dssdev);
-	enum omap_channel dispc_channel = dssdev->dispc_channel;
 	int bpp = dsi_get_pixel_size(dsi->pix_fmt);
 	struct omap_dss_device *out = &dsi->output;
 	u8 data_type;
@@ -3883,7 +3882,7 @@  static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
 		dsi_if_enable(dsi, true);
 	}
 
-	r = dss_mgr_enable(dispc_channel);
+	r = dss_mgr_enable(&dsi->output);
 	if (r)
 		goto err_mgr_enable;
 
@@ -3903,7 +3902,6 @@  static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
 static void dsi_disable_video_output(struct omap_dss_device *dssdev, int channel)
 {
 	struct dsi_data *dsi = to_dsi_data(dssdev);
-	enum omap_channel dispc_channel = dssdev->dispc_channel;
 
 	if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
 		dsi_if_enable(dsi, false);
@@ -3916,14 +3914,13 @@  static void dsi_disable_video_output(struct omap_dss_device *dssdev, int channel
 		dsi_if_enable(dsi, true);
 	}
 
-	dss_mgr_disable(dispc_channel);
+	dss_mgr_disable(&dsi->output);
 
 	dsi_display_uninit_dispc(dsi);
 }
 
 static void dsi_update_screen_dispc(struct dsi_data *dsi)
 {
-	enum omap_channel dispc_channel = dsi->output.dispc_channel;
 	unsigned int bytespp;
 	unsigned int bytespl;
 	unsigned int bytespf;
@@ -3985,9 +3982,9 @@  static void dsi_update_screen_dispc(struct dsi_data *dsi)
 		msecs_to_jiffies(250));
 	BUG_ON(r == 0);
 
-	dss_mgr_set_timings(dispc_channel, &dsi->vm);
+	dss_mgr_set_timings(&dsi->output, &dsi->vm);
 
-	dss_mgr_start_update(dispc_channel);
+	dss_mgr_start_update(&dsi->output);
 
 	if (dsi->te_enabled) {
 		/* disable LP_RX_TO, so that we can receive TE.  Time to wait
@@ -4114,7 +4111,7 @@  static int dsi_display_init_dispc(struct dsi_data *dsi)
 			DSS_CLK_SRC_PLL2_1);
 
 	if (dsi->mode == OMAP_DSS_DSI_CMD_MODE) {
-		r = dss_mgr_register_framedone_handler(channel,
+		r = dss_mgr_register_framedone_handler(&dsi->output,
 				dsi_framedone_irq_callback, dsi);
 		if (r) {
 			DSSERR("can't register FRAMEDONE handler\n");
@@ -4144,7 +4141,7 @@  static int dsi_display_init_dispc(struct dsi_data *dsi)
 	dsi->vm.flags &= ~DISPLAY_FLAGS_SYNC_POSEDGE;
 	dsi->vm.flags |= DISPLAY_FLAGS_SYNC_NEGEDGE;
 
-	dss_mgr_set_timings(channel, &dsi->vm);
+	dss_mgr_set_timings(&dsi->output, &dsi->vm);
 
 	r = dsi_configure_dispc_clocks(dsi);
 	if (r)
@@ -4155,12 +4152,12 @@  static int dsi_display_init_dispc(struct dsi_data *dsi)
 			dsi_get_pixel_size(dsi->pix_fmt);
 	dsi->mgr_config.lcden_sig_polarity = 0;
 
-	dss_mgr_set_lcd_config(channel, &dsi->mgr_config);
+	dss_mgr_set_lcd_config(&dsi->output, &dsi->mgr_config);
 
 	return 0;
 err1:
 	if (dsi->mode == OMAP_DSS_DSI_CMD_MODE)
-		dss_mgr_unregister_framedone_handler(channel,
+		dss_mgr_unregister_framedone_handler(&dsi->output,
 				dsi_framedone_irq_callback, dsi);
 err:
 	dss_select_lcd_clk_source(dsi->dss, channel, DSS_CLK_SRC_FCK);
@@ -4172,7 +4169,7 @@  static void dsi_display_uninit_dispc(struct dsi_data *dsi)
 	enum omap_channel channel = dsi->output.dispc_channel;
 
 	if (dsi->mode == OMAP_DSS_DSI_CMD_MODE)
-		dss_mgr_unregister_framedone_handler(channel,
+		dss_mgr_unregister_framedone_handler(&dsi->output,
 				dsi_framedone_irq_callback, dsi);
 
 	dss_select_lcd_clk_source(dsi->dss, channel, DSS_CLK_SRC_FCK);
@@ -4967,14 +4964,13 @@  static int dsi_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
 	struct dsi_data *dsi = to_dsi_data(dssdev);
-	enum omap_channel dispc_channel = dssdev->dispc_channel;
 	int r;
 
 	r = dsi_regulator_init(dsi);
 	if (r)
 		return r;
 
-	r = dss_mgr_connect(dispc_channel, dssdev);
+	r = dss_mgr_connect(&dsi->output, dssdev);
 	if (r)
 		return r;
 
@@ -4982,7 +4978,7 @@  static int dsi_connect(struct omap_dss_device *dssdev,
 	if (r) {
 		DSSERR("failed to connect output to new device: %s\n",
 				dssdev->name);
-		dss_mgr_disconnect(dispc_channel, dssdev);
+		dss_mgr_disconnect(&dsi->output, dssdev);
 		return r;
 	}
 
@@ -4992,7 +4988,7 @@  static int dsi_connect(struct omap_dss_device *dssdev,
 static void dsi_disconnect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	enum omap_channel dispc_channel = dssdev->dispc_channel;
+	struct dsi_data *dsi = to_dsi_data(dssdev);
 
 	WARN_ON(dst != dssdev->dst);
 
@@ -5001,7 +4997,7 @@  static void dsi_disconnect(struct omap_dss_device *dssdev,
 
 	omapdss_output_unset_device(dssdev);
 
-	dss_mgr_disconnect(dispc_channel, dssdev);
+	dss_mgr_disconnect(&dsi->output, dssdev);
 }
 
 static const struct omapdss_dsi_ops dsi_ops = {
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
index f0a30b248a7d..56de3c75b0a0 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -174,7 +174,6 @@  static int hdmi_power_on_full(struct omap_hdmi *hdmi)
 {
 	int r;
 	struct videomode *vm;
-	enum omap_channel channel = hdmi->output.dispc_channel;
 	struct hdmi_wp_data *wp = &hdmi->wp;
 	struct dss_pll_clock_info hdmi_cinfo = { 0 };
 	unsigned int pc;
@@ -228,9 +227,9 @@  static int hdmi_power_on_full(struct omap_hdmi *hdmi)
 	hdmi4_configure(&hdmi->core, &hdmi->wp, &hdmi->cfg);
 
 	/* tv size */
-	dss_mgr_set_timings(channel, vm);
+	dss_mgr_set_timings(&hdmi->output, vm);
 
-	r = dss_mgr_enable(channel);
+	r = dss_mgr_enable(&hdmi->output);
 	if (r)
 		goto err_mgr_enable;
 
@@ -244,7 +243,7 @@  static int hdmi_power_on_full(struct omap_hdmi *hdmi)
 	return 0;
 
 err_vid_enable:
-	dss_mgr_disable(channel);
+	dss_mgr_disable(&hdmi->output);
 err_mgr_enable:
 	hdmi_wp_set_phy_pwr(&hdmi->wp, HDMI_PHYPWRCMD_OFF);
 err_phy_pwr:
@@ -258,13 +257,11 @@  static int hdmi_power_on_full(struct omap_hdmi *hdmi)
 
 static void hdmi_power_off_full(struct omap_hdmi *hdmi)
 {
-	enum omap_channel channel = hdmi->output.dispc_channel;
-
 	hdmi_wp_clear_irqenable(&hdmi->wp, ~HDMI_IRQ_CORE);
 
 	hdmi_wp_video_stop(&hdmi->wp);
 
-	dss_mgr_disable(channel);
+	dss_mgr_disable(&hdmi->output);
 
 	hdmi_wp_set_phy_pwr(&hdmi->wp, HDMI_PHYPWRCMD_OFF);
 
@@ -459,14 +456,13 @@  static int hdmi_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
 	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
-	enum omap_channel channel = dssdev->dispc_channel;
 	int r;
 
 	r = hdmi_init_regulator(hdmi);
 	if (r)
 		return r;
 
-	r = dss_mgr_connect(channel, dssdev);
+	r = dss_mgr_connect(&hdmi->output, dssdev);
 	if (r)
 		return r;
 
@@ -474,7 +470,7 @@  static int hdmi_connect(struct omap_dss_device *dssdev,
 	if (r) {
 		DSSERR("failed to connect output to new device: %s\n",
 				dst->name);
-		dss_mgr_disconnect(channel, dssdev);
+		dss_mgr_disconnect(&hdmi->output, dssdev);
 		return r;
 	}
 
@@ -484,7 +480,7 @@  static int hdmi_connect(struct omap_dss_device *dssdev,
 static void hdmi_disconnect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	enum omap_channel channel = dssdev->dispc_channel;
+	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
 
 	WARN_ON(dst != dssdev->dst);
 
@@ -493,7 +489,7 @@  static void hdmi_disconnect(struct omap_dss_device *dssdev,
 
 	omapdss_output_unset_device(dssdev);
 
-	dss_mgr_disconnect(channel, dssdev);
+	dss_mgr_disconnect(&hdmi->output, dssdev);
 }
 
 static int hdmi_read_edid(struct omap_dss_device *dssdev,
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
index ed8a2bd2a035..1e839af800e7 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
@@ -172,7 +172,6 @@  static int hdmi_power_on_full(struct omap_hdmi *hdmi)
 {
 	int r;
 	struct videomode *vm;
-	enum omap_channel channel = hdmi->output.dispc_channel;
 	struct dss_pll_clock_info hdmi_cinfo = { 0 };
 	unsigned int pc;
 
@@ -226,9 +225,9 @@  static int hdmi_power_on_full(struct omap_hdmi *hdmi)
 	hdmi5_configure(&hdmi->core, &hdmi->wp, &hdmi->cfg);
 
 	/* tv size */
-	dss_mgr_set_timings(channel, vm);
+	dss_mgr_set_timings(&hdmi->output, vm);
 
-	r = dss_mgr_enable(channel);
+	r = dss_mgr_enable(&hdmi->output);
 	if (r)
 		goto err_mgr_enable;
 
@@ -242,7 +241,7 @@  static int hdmi_power_on_full(struct omap_hdmi *hdmi)
 	return 0;
 
 err_vid_enable:
-	dss_mgr_disable(channel);
+	dss_mgr_disable(&hdmi->output);
 err_mgr_enable:
 	hdmi_wp_set_phy_pwr(&hdmi->wp, HDMI_PHYPWRCMD_OFF);
 err_phy_pwr:
@@ -256,13 +255,11 @@  static int hdmi_power_on_full(struct omap_hdmi *hdmi)
 
 static void hdmi_power_off_full(struct omap_hdmi *hdmi)
 {
-	enum omap_channel channel = hdmi->output.dispc_channel;
-
 	hdmi_wp_clear_irqenable(&hdmi->wp, 0xffffffff);
 
 	hdmi_wp_video_stop(&hdmi->wp);
 
-	dss_mgr_disable(channel);
+	dss_mgr_disable(&hdmi->output);
 
 	hdmi_wp_set_phy_pwr(&hdmi->wp, HDMI_PHYPWRCMD_OFF);
 
@@ -463,14 +460,13 @@  static int hdmi_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
 	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
-	enum omap_channel channel = dssdev->dispc_channel;
 	int r;
 
 	r = hdmi_init_regulator(hdmi);
 	if (r)
 		return r;
 
-	r = dss_mgr_connect(channel, dssdev);
+	r = dss_mgr_connect(&hdmi->output, dssdev);
 	if (r)
 		return r;
 
@@ -478,7 +474,7 @@  static int hdmi_connect(struct omap_dss_device *dssdev,
 	if (r) {
 		DSSERR("failed to connect output to new device: %s\n",
 				dst->name);
-		dss_mgr_disconnect(channel, dssdev);
+		dss_mgr_disconnect(&hdmi->output, dssdev);
 		return r;
 	}
 
@@ -488,7 +484,7 @@  static int hdmi_connect(struct omap_dss_device *dssdev,
 static void hdmi_disconnect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	enum omap_channel channel = dssdev->dispc_channel;
+	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
 
 	WARN_ON(dst != dssdev->dst);
 
@@ -497,7 +493,7 @@  static void hdmi_disconnect(struct omap_dss_device *dssdev,
 
 	omapdss_output_unset_device(dssdev);
 
-	dss_mgr_disconnect(channel, dssdev);
+	dss_mgr_disconnect(&hdmi->output, dssdev);
 }
 
 static int hdmi_read_edid(struct omap_dss_device *dssdev,
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 6f9b9b2d8af2..8024680e8d57 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -656,20 +656,20 @@  struct dss_mgr_ops {
 int dss_install_mgr_ops(const struct dss_mgr_ops *mgr_ops);
 void dss_uninstall_mgr_ops(void);
 
-int dss_mgr_connect(enum omap_channel channel,
-		struct omap_dss_device *dst);
-void dss_mgr_disconnect(enum omap_channel channel,
-		struct omap_dss_device *dst);
-void dss_mgr_set_timings(enum omap_channel channel,
+int dss_mgr_connect(struct omap_dss_device *dssdev,
+		    struct omap_dss_device *dst);
+void dss_mgr_disconnect(struct omap_dss_device *dssdev,
+			struct omap_dss_device *dst);
+void dss_mgr_set_timings(struct omap_dss_device *dssdev,
 		const struct videomode *vm);
-void dss_mgr_set_lcd_config(enum omap_channel channel,
+void dss_mgr_set_lcd_config(struct omap_dss_device *dssdev,
 		const struct dss_lcd_mgr_config *config);
-int dss_mgr_enable(enum omap_channel channel);
-void dss_mgr_disable(enum omap_channel channel);
-void dss_mgr_start_update(enum omap_channel channel);
-int dss_mgr_register_framedone_handler(enum omap_channel channel,
+int dss_mgr_enable(struct omap_dss_device *dssdev);
+void dss_mgr_disable(struct omap_dss_device *dssdev);
+void dss_mgr_start_update(struct omap_dss_device *dssdev);
+int dss_mgr_register_framedone_handler(struct omap_dss_device *dssdev,
 		void (*handler)(void *), void *data);
-void dss_mgr_unregister_framedone_handler(enum omap_channel channel,
+void dss_mgr_unregister_framedone_handler(struct omap_dss_device *dssdev,
 		void (*handler)(void *), void *data);
 
 /* dispc ops */
diff --git a/drivers/gpu/drm/omapdrm/dss/output.c b/drivers/gpu/drm/omapdrm/dss/output.c
index a84ab0337a91..0573b5099f8f 100644
--- a/drivers/gpu/drm/omapdrm/dss/output.c
+++ b/drivers/gpu/drm/omapdrm/dss/output.c
@@ -184,52 +184,54 @@  void dss_uninstall_mgr_ops(void)
 }
 EXPORT_SYMBOL(dss_uninstall_mgr_ops);
 
-int dss_mgr_connect(enum omap_channel channel,
-		struct omap_dss_device *dst)
+int dss_mgr_connect(struct omap_dss_device *dssdev, struct omap_dss_device *dst)
 {
-	return dss_mgr_ops->connect(channel, dst);
+	return dss_mgr_ops->connect(dssdev->dispc_channel, dst);
 }
 
-void dss_mgr_disconnect(enum omap_channel channel,
-		struct omap_dss_device *dst)
+void dss_mgr_disconnect(struct omap_dss_device *dssdev,
+			struct omap_dss_device *dst)
 {
-	dss_mgr_ops->disconnect(channel, dst);
+	dss_mgr_ops->disconnect(dssdev->dispc_channel, dst);
 }
 
-void dss_mgr_set_timings(enum omap_channel channel, const struct videomode *vm)
+void dss_mgr_set_timings(struct omap_dss_device *dssdev,
+			 const struct videomode *vm)
 {
-	dss_mgr_ops->set_timings(channel, vm);
+	dss_mgr_ops->set_timings(dssdev->dispc_channel, vm);
 }
 
-void dss_mgr_set_lcd_config(enum omap_channel channel,
+void dss_mgr_set_lcd_config(struct omap_dss_device *dssdev,
 		const struct dss_lcd_mgr_config *config)
 {
-	dss_mgr_ops->set_lcd_config(channel, config);
+	dss_mgr_ops->set_lcd_config(dssdev->dispc_channel, config);
 }
 
-int dss_mgr_enable(enum omap_channel channel)
+int dss_mgr_enable(struct omap_dss_device *dssdev)
 {
-	return dss_mgr_ops->enable(channel);
+	return dss_mgr_ops->enable(dssdev->dispc_channel);
 }
 
-void dss_mgr_disable(enum omap_channel channel)
+void dss_mgr_disable(struct omap_dss_device *dssdev)
 {
-	dss_mgr_ops->disable(channel);
+	dss_mgr_ops->disable(dssdev->dispc_channel);
 }
 
-void dss_mgr_start_update(enum omap_channel channel)
+void dss_mgr_start_update(struct omap_dss_device *dssdev)
 {
-	dss_mgr_ops->start_update(channel);
+	dss_mgr_ops->start_update(dssdev->dispc_channel);
 }
 
-int dss_mgr_register_framedone_handler(enum omap_channel channel,
+int dss_mgr_register_framedone_handler(struct omap_dss_device *dssdev,
 		void (*handler)(void *), void *data)
 {
-	return dss_mgr_ops->register_framedone_handler(channel, handler, data);
+	return dss_mgr_ops->register_framedone_handler(dssdev->dispc_channel,
+						       handler, data);
 }
 
-void dss_mgr_unregister_framedone_handler(enum omap_channel channel,
+void dss_mgr_unregister_framedone_handler(struct omap_dss_device *dssdev,
 		void (*handler)(void *), void *data)
 {
-	dss_mgr_ops->unregister_framedone_handler(channel, handler, data);
+	dss_mgr_ops->unregister_framedone_handler(dssdev->dispc_channel,
+						  handler, data);
 }
diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c
index a35dc51c5a6a..681a3653dd8c 100644
--- a/drivers/gpu/drm/omapdrm/dss/sdi.c
+++ b/drivers/gpu/drm/omapdrm/dss/sdi.c
@@ -115,8 +115,6 @@  static int sdi_calc_clock_div(struct sdi_device *sdi, unsigned long pclk,
 
 static void sdi_config_lcd_manager(struct sdi_device *sdi)
 {
-	enum omap_channel channel = sdi->output.dispc_channel;
-
 	sdi->mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS;
 
 	sdi->mgr_config.stallmode = false;
@@ -125,21 +123,19 @@  static void sdi_config_lcd_manager(struct sdi_device *sdi)
 	sdi->mgr_config.video_port_width = 24;
 	sdi->mgr_config.lcden_sig_polarity = 1;
 
-	dss_mgr_set_lcd_config(channel, &sdi->mgr_config);
+	dss_mgr_set_lcd_config(&sdi->output, &sdi->mgr_config);
 }
 
 static int sdi_display_enable(struct omap_dss_device *dssdev)
 {
 	struct sdi_device *sdi = dssdev_to_sdi(dssdev);
-	struct omap_dss_device *out = &sdi->output;
-	enum omap_channel channel = dssdev->dispc_channel;
 	struct videomode *vm = &sdi->vm;
 	unsigned long fck;
 	struct dispc_clock_info dispc_cinfo;
 	unsigned long pck;
 	int r;
 
-	if (!out->dispc_channel_connected) {
+	if (!sdi->output.dispc_channel_connected) {
 		DSSERR("failed to enable display: no output/manager\n");
 		return -ENODEV;
 	}
@@ -171,7 +167,7 @@  static int sdi_display_enable(struct omap_dss_device *dssdev)
 	}
 
 
-	dss_mgr_set_timings(channel, vm);
+	dss_mgr_set_timings(&sdi->output, vm);
 
 	r = dss_set_fck_rate(sdi->dss, fck);
 	if (r)
@@ -190,7 +186,8 @@  static int sdi_display_enable(struct omap_dss_device *dssdev)
 	 * need to care about the shadow register mechanism for pck-free. The
 	 * exact reason for this is unknown.
 	 */
-	dispc_mgr_set_clock_div(channel, &sdi->mgr_config.clock_info);
+	dispc_mgr_set_clock_div(sdi->output.dispc_channel,
+				&sdi->mgr_config.clock_info);
 
 	dss_sdi_init(sdi->dss, sdi->datapairs);
 	r = dss_sdi_enable(sdi->dss);
@@ -198,7 +195,7 @@  static int sdi_display_enable(struct omap_dss_device *dssdev)
 		goto err_sdi_enable;
 	mdelay(2);
 
-	r = dss_mgr_enable(channel);
+	r = dss_mgr_enable(&sdi->output);
 	if (r)
 		goto err_mgr_enable;
 
@@ -219,9 +216,8 @@  static int sdi_display_enable(struct omap_dss_device *dssdev)
 static void sdi_display_disable(struct omap_dss_device *dssdev)
 {
 	struct sdi_device *sdi = dssdev_to_sdi(dssdev);
-	enum omap_channel channel = dssdev->dispc_channel;
 
-	dss_mgr_disable(channel);
+	dss_mgr_disable(&sdi->output);
 
 	dss_sdi_disable(sdi->dss);
 
@@ -283,14 +279,13 @@  static int sdi_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
 	struct sdi_device *sdi = dssdev_to_sdi(dssdev);
-	enum omap_channel channel = dssdev->dispc_channel;
 	int r;
 
 	r = sdi_init_regulator(sdi);
 	if (r)
 		return r;
 
-	r = dss_mgr_connect(channel, dssdev);
+	r = dss_mgr_connect(&sdi->output, dssdev);
 	if (r)
 		return r;
 
@@ -298,7 +293,7 @@  static int sdi_connect(struct omap_dss_device *dssdev,
 	if (r) {
 		DSSERR("failed to connect output to new device: %s\n",
 				dst->name);
-		dss_mgr_disconnect(channel, dssdev);
+		dss_mgr_disconnect(&sdi->output, dssdev);
 		return r;
 	}
 
@@ -308,7 +303,7 @@  static int sdi_connect(struct omap_dss_device *dssdev,
 static void sdi_disconnect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	enum omap_channel channel = dssdev->dispc_channel;
+	struct sdi_device *sdi = dssdev_to_sdi(dssdev);
 
 	WARN_ON(dst != dssdev->dst);
 
@@ -317,7 +312,7 @@  static void sdi_disconnect(struct omap_dss_device *dssdev,
 
 	omapdss_output_unset_device(dssdev);
 
-	dss_mgr_disconnect(channel, dssdev);
+	dss_mgr_disconnect(&sdi->output, dssdev);
 }
 
 static const struct omapdss_sdi_ops sdi_ops = {
diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c
index 7acdbfefe397..d82645e84db7 100644
--- a/drivers/gpu/drm/omapdrm/dss/venc.c
+++ b/drivers/gpu/drm/omapdrm/dss/venc.c
@@ -468,7 +468,6 @@  static const struct venc_config *venc_timings_to_config(struct videomode *vm)
 
 static int venc_power_on(struct venc_device *venc)
 {
-	enum omap_channel channel = venc->output.dispc_channel;
 	u32 l;
 	int r;
 
@@ -494,13 +493,13 @@  static int venc_power_on(struct venc_device *venc)
 
 	venc_write_reg(venc, VENC_OUTPUT_CONTROL, l);
 
-	dss_mgr_set_timings(channel, &venc->vm);
+	dss_mgr_set_timings(&venc->output, &venc->vm);
 
 	r = regulator_enable(venc->vdda_dac_reg);
 	if (r)
 		goto err1;
 
-	r = dss_mgr_enable(channel);
+	r = dss_mgr_enable(&venc->output);
 	if (r)
 		goto err2;
 
@@ -519,12 +518,10 @@  static int venc_power_on(struct venc_device *venc)
 
 static void venc_power_off(struct venc_device *venc)
 {
-	enum omap_channel channel = venc->output.dispc_channel;
-
 	venc_write_reg(venc, VENC_OUTPUT_CONTROL, 0);
 	dss_set_dac_pwrdn_bgz(venc->dss, 0);
 
-	dss_mgr_disable(channel);
+	dss_mgr_disable(&venc->output);
 
 	regulator_disable(venc->vdda_dac_reg);
 
@@ -768,14 +765,13 @@  static int venc_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
 	struct venc_device *venc = dssdev_to_venc(dssdev);
-	enum omap_channel channel = dssdev->dispc_channel;
 	int r;
 
 	r = venc_init_regulator(venc);
 	if (r)
 		return r;
 
-	r = dss_mgr_connect(channel, dssdev);
+	r = dss_mgr_connect(&venc->output, dssdev);
 	if (r)
 		return r;
 
@@ -783,7 +779,7 @@  static int venc_connect(struct omap_dss_device *dssdev,
 	if (r) {
 		DSSERR("failed to connect output to new device: %s\n",
 				dst->name);
-		dss_mgr_disconnect(channel, dssdev);
+		dss_mgr_disconnect(&venc->output, dssdev);
 		return r;
 	}
 
@@ -793,7 +789,7 @@  static int venc_connect(struct omap_dss_device *dssdev,
 static void venc_disconnect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	enum omap_channel channel = dssdev->dispc_channel;
+	struct venc_device *venc = dssdev_to_venc(dssdev);
 
 	WARN_ON(dst != dssdev->dst);
 
@@ -802,7 +798,7 @@  static void venc_disconnect(struct omap_dss_device *dssdev,
 
 	omapdss_output_unset_device(dssdev);
 
-	dss_mgr_disconnect(channel, dssdev);
+	dss_mgr_disconnect(&venc->output, dssdev);
 }
 
 static const struct omapdss_atv_ops venc_ops = {