[v1,06/26] drm/panel: decouple connector from drm_panel
diff mbox series

Message ID 20191202193230.21310-7-sam@ravnborg.org
State New
Headers show
Series
  • drm/panel infrastructure + backlight update
Related show

Commit Message

Sam Ravnborg Dec. 2, 2019, 7:32 p.m. UTC
To facilitate that connector creation will be moved
to display drivers, decouple the drm_connector from drm_panel.
Add a connector argument to drm_panel_get_modes()

All users of drm_panel_get_modes() already had the connector
available, so updating users was trivial.

With this patch drm_panel no longer keep a copy of the drm_connector.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@siol.net>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Joonyoung Shim <jy0922.shim@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Kukjin Kim <kgene@kernel.org>
Cc: Krzysztof Kozlowski <krzk@kernel.org>
Cc: Stefan Agner <stefan@agner.ch>
Cc: Alison Wang <alison.wang@nxp.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: NXP Linux Team <linux-imx@nxp.com>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Cc: Chen-Yu Tsai <wens@csie.org>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Cc: Torsten Duwe <duwe@lst.de>
Cc: Vasily Khoruzhick <anarsoul@gmail.com>
Cc: Icenowy Zheng <icenowy@aosc.io>
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Boris Brezillon <boris.brezillon@collabora.com>
Cc: Hariprasad Kelam <hariprasad.kelam@gmail.com>
Cc: Alexios Zavras <alexios.zavras@intel.com>
Cc: Brian Masney <masneyb@onstation.org>
Cc: Rob Clark <robdclark@chromium.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Allison Randal <allison@lohutok.net>
Cc: Shayenne Moura <shayenneluzmoura@gmail.com>
Cc: Abhinav Kumar <abhinavk@codeaurora.org>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-samsung-soc@vger.kernel.org
Cc: linux-mediatek@lists.infradead.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-rockchip@lists.infradead.org
Cc: linux-tegra@vger.kernel.org
---
 drivers/gpu/drm/bridge/analogix/analogix-anx6345.c  |  2 +-
 drivers/gpu/drm/bridge/analogix/analogix_dp_core.c  |  2 +-
 drivers/gpu/drm/bridge/panel.c                      |  2 +-
 drivers/gpu/drm/bridge/parade-ps8622.c              |  2 +-
 drivers/gpu/drm/bridge/tc358764.c                   |  2 +-
 drivers/gpu/drm/bridge/tc358767.c                   |  2 +-
 drivers/gpu/drm/bridge/ti-sn65dsi86.c               |  2 +-
 drivers/gpu/drm/drm_panel.c                         | 10 +++++-----
 drivers/gpu/drm/exynos/exynos_drm_dpi.c             |  2 +-
 drivers/gpu/drm/exynos/exynos_drm_dsi.c             |  2 +-
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c           |  2 +-
 drivers/gpu/drm/imx/imx-ldb.c                       |  2 +-
 drivers/gpu/drm/imx/parallel-display.c              |  2 +-
 drivers/gpu/drm/mediatek/mtk_dsi.c                  |  2 +-
 drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c |  2 +-
 drivers/gpu/drm/msm/dsi/dsi_manager.c               |  2 +-
 drivers/gpu/drm/mxsfb/mxsfb_out.c                   |  2 +-
 drivers/gpu/drm/omapdrm/omap_connector.c            |  3 ++-
 drivers/gpu/drm/rcar-du/rcar_lvds.c                 |  2 +-
 drivers/gpu/drm/rockchip/rockchip_lvds.c            |  2 +-
 drivers/gpu/drm/sti/sti_dvo.c                       |  2 +-
 drivers/gpu/drm/sun4i/sun4i_lvds.c                  |  2 +-
 drivers/gpu/drm/sun4i/sun4i_rgb.c                   |  2 +-
 drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c              |  2 +-
 drivers/gpu/drm/tegra/output.c                      |  2 +-
 include/drm/drm_panel.h                             |  9 +--------
 26 files changed, 31 insertions(+), 37 deletions(-)

Comments

Laurent Pinchart Dec. 3, 2019, 6:54 a.m. UTC | #1
Hi Sam,

Thank you for the patch.

On Mon, Dec 02, 2019 at 08:32:10PM +0100, Sam Ravnborg wrote:
> To facilitate that connector creation will be moved
> to display drivers, decouple the drm_connector from drm_panel.

"To facilitate moving connector creation to display drivers, ..."

> Add a connector argument to drm_panel_get_modes()
> 
> All users of drm_panel_get_modes() already had the connector
> available, so updating users was trivial.
> 
> With this patch drm_panel no longer keep a copy of the drm_connector.

s/keep a copy of/keeps a reference to/

> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Andrzej Hajda <a.hajda@samsung.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@siol.net>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: Inki Dae <inki.dae@samsung.com>
> Cc: Joonyoung Shim <jy0922.shim@samsung.com>
> Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
> Cc: Kyungmin Park <kyungmin.park@samsung.com>
> Cc: Kukjin Kim <kgene@kernel.org>
> Cc: Krzysztof Kozlowski <krzk@kernel.org>
> Cc: Stefan Agner <stefan@agner.ch>
> Cc: Alison Wang <alison.wang@nxp.com>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
> Cc: Fabio Estevam <festevam@gmail.com>
> Cc: NXP Linux Team <linux-imx@nxp.com>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> Cc: Marek Vasut <marex@denx.de>
> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
> Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
> Cc: Vincent Abriou <vincent.abriou@st.com>
> Cc: Chen-Yu Tsai <wens@csie.org>
> Cc: Jonathan Hunter <jonathanh@nvidia.com>
> Cc: Torsten Duwe <duwe@lst.de>
> Cc: Vasily Khoruzhick <anarsoul@gmail.com>
> Cc: Icenowy Zheng <icenowy@aosc.io>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Boris Brezillon <boris.brezillon@collabora.com>
> Cc: Hariprasad Kelam <hariprasad.kelam@gmail.com>
> Cc: Alexios Zavras <alexios.zavras@intel.com>
> Cc: Brian Masney <masneyb@onstation.org>
> Cc: Rob Clark <robdclark@chromium.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Allison Randal <allison@lohutok.net>
> Cc: Shayenne Moura <shayenneluzmoura@gmail.com>
> Cc: Abhinav Kumar <abhinavk@codeaurora.org>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-samsung-soc@vger.kernel.org
> Cc: linux-mediatek@lists.infradead.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-rockchip@lists.infradead.org
> Cc: linux-tegra@vger.kernel.org
> ---
>  drivers/gpu/drm/bridge/analogix/analogix-anx6345.c  |  2 +-
>  drivers/gpu/drm/bridge/analogix/analogix_dp_core.c  |  2 +-
>  drivers/gpu/drm/bridge/panel.c                      |  2 +-
>  drivers/gpu/drm/bridge/parade-ps8622.c              |  2 +-
>  drivers/gpu/drm/bridge/tc358764.c                   |  2 +-
>  drivers/gpu/drm/bridge/tc358767.c                   |  2 +-
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c               |  2 +-
>  drivers/gpu/drm/drm_panel.c                         | 10 +++++-----
>  drivers/gpu/drm/exynos/exynos_drm_dpi.c             |  2 +-
>  drivers/gpu/drm/exynos/exynos_drm_dsi.c             |  2 +-
>  drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c           |  2 +-
>  drivers/gpu/drm/imx/imx-ldb.c                       |  2 +-
>  drivers/gpu/drm/imx/parallel-display.c              |  2 +-
>  drivers/gpu/drm/mediatek/mtk_dsi.c                  |  2 +-
>  drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c |  2 +-
>  drivers/gpu/drm/msm/dsi/dsi_manager.c               |  2 +-
>  drivers/gpu/drm/mxsfb/mxsfb_out.c                   |  2 +-
>  drivers/gpu/drm/omapdrm/omap_connector.c            |  3 ++-
>  drivers/gpu/drm/rcar-du/rcar_lvds.c                 |  2 +-
>  drivers/gpu/drm/rockchip/rockchip_lvds.c            |  2 +-
>  drivers/gpu/drm/sti/sti_dvo.c                       |  2 +-
>  drivers/gpu/drm/sun4i/sun4i_lvds.c                  |  2 +-
>  drivers/gpu/drm/sun4i/sun4i_rgb.c                   |  2 +-
>  drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c              |  2 +-
>  drivers/gpu/drm/tegra/output.c                      |  2 +-
>  include/drm/drm_panel.h                             |  9 +--------
>  26 files changed, 31 insertions(+), 37 deletions(-)

Another big set of manual changes :-)

> 
> diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
> index b4f3a923a52a..9917ce0d86a0 100644
> --- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
> +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
> @@ -493,7 +493,7 @@ static int anx6345_get_modes(struct drm_connector *connector)
>  	mutex_unlock(&anx6345->lock);
>  
>  	if (!num_modes && anx6345->panel)
> -		num_modes += drm_panel_get_modes(anx6345->panel);
> +		num_modes += drm_panel_get_modes(anx6345->panel, connector);
>  
>  	return num_modes;
>  }
> diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> index bb411fe52ae8..6effe532f820 100644
> --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> @@ -1111,7 +1111,7 @@ static int analogix_dp_get_modes(struct drm_connector *connector)
>  	int ret, num_modes = 0;
>  
>  	if (dp->plat_data->panel) {
> -		num_modes += drm_panel_get_modes(dp->plat_data->panel);
> +		num_modes += drm_panel_get_modes(dp->plat_data->panel, connector);
>  	} else {
>  		ret = analogix_dp_prepare_panel(dp, true, false);
>  		if (ret) {
> diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c
> index c5e27b81588a..65cbd4a283fb 100644
> --- a/drivers/gpu/drm/bridge/panel.c
> +++ b/drivers/gpu/drm/bridge/panel.c
> @@ -37,7 +37,7 @@ static int panel_bridge_connector_get_modes(struct drm_connector *connector)
>  	struct panel_bridge *panel_bridge =
>  		drm_connector_to_panel_bridge(connector);
>  
> -	return drm_panel_get_modes(panel_bridge->panel);
> +	return drm_panel_get_modes(panel_bridge->panel, connector);
>  }
>  
>  static const struct drm_connector_helper_funcs
> diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c
> index b7a72dfdcac3..10c47c008b40 100644
> --- a/drivers/gpu/drm/bridge/parade-ps8622.c
> +++ b/drivers/gpu/drm/bridge/parade-ps8622.c
> @@ -461,7 +461,7 @@ static int ps8622_get_modes(struct drm_connector *connector)
>  
>  	ps8622 = connector_to_ps8622(connector);
>  
> -	return drm_panel_get_modes(ps8622->panel);
> +	return drm_panel_get_modes(ps8622->panel, connector);
>  }
>  
>  static const struct drm_connector_helper_funcs ps8622_connector_helper_funcs = {
> diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
> index db298f550a5a..96207fcfde19 100644
> --- a/drivers/gpu/drm/bridge/tc358764.c
> +++ b/drivers/gpu/drm/bridge/tc358764.c
> @@ -282,7 +282,7 @@ static int tc358764_get_modes(struct drm_connector *connector)
>  {
>  	struct tc358764 *ctx = connector_to_tc358764(connector);
>  
> -	return drm_panel_get_modes(ctx->panel);
> +	return drm_panel_get_modes(ctx->panel, connector);
>  }
>  
>  static const
> diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
> index 8029478ffebb..3709e5ace724 100644
> --- a/drivers/gpu/drm/bridge/tc358767.c
> +++ b/drivers/gpu/drm/bridge/tc358767.c
> @@ -1346,7 +1346,7 @@ static int tc_connector_get_modes(struct drm_connector *connector)
>  		return 0;
>  	}
>  
> -	count = drm_panel_get_modes(tc->panel);
> +	count = drm_panel_get_modes(tc->panel, connector);
>  	if (count > 0)
>  		return count;
>  
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> index 43abf01ebd4c..9a2dd986afa5 100644
> --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> @@ -206,7 +206,7 @@ static int ti_sn_bridge_connector_get_modes(struct drm_connector *connector)
>  {
>  	struct ti_sn_bridge *pdata = connector_to_ti_sn_bridge(connector);
>  
> -	return drm_panel_get_modes(pdata->panel);
> +	return drm_panel_get_modes(pdata->panel, connector);
>  }
>  
>  static enum drm_mode_status
> diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
> index 9927e28d93e6..fd428b6d25b0 100644
> --- a/drivers/gpu/drm/drm_panel.c
> +++ b/drivers/gpu/drm/drm_panel.c
> @@ -113,10 +113,9 @@ EXPORT_SYMBOL(drm_panel_remove);
>   */
>  int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector)
>  {
> -	if (panel->connector)
> +	if (panel->drm)
>  		return -EBUSY;
>  
> -	panel->connector = connector;
>  	panel->drm = connector->dev;
>  
>  	return 0;
> @@ -135,7 +134,6 @@ EXPORT_SYMBOL(drm_panel_attach);
>   */
>  void drm_panel_detach(struct drm_panel *panel)
>  {
> -	panel->connector = NULL;
>  	panel->drm = NULL;
>  }
>  EXPORT_SYMBOL(drm_panel_detach);
> @@ -239,6 +237,7 @@ EXPORT_SYMBOL(drm_panel_disable);
>  /**
>   * drm_panel_get_modes - probe the available display modes of a panel
>   * @panel: DRM panel
> + * @connector: DRM connector
>   *
>   * The modes probed from the panel are automatically added to the connector
>   * that the panel is attached to.


"... to the given connector."

> @@ -246,13 +245,14 @@ EXPORT_SYMBOL(drm_panel_disable);
>   * Return: The number of modes available from the panel on success or a
>   * negative error code on failure.
>   */
> -int drm_panel_get_modes(struct drm_panel *panel)
> +int drm_panel_get_modes(struct drm_panel *panel,
> +			struct drm_connector *connector)
>  {
>  	if (!panel)
>  		return -EINVAL;
>  
>  	if (panel->funcs && panel->funcs->get_modes)
> -		return panel->funcs->get_modes(panel, panel->connector);
> +		return panel->funcs->get_modes(panel, connector);

I really like how you've split 05/26 and 06/26 in two patches.

With the small issues above addressed,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

>  
>  	return 0;
>  }
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
> index 5479ff71cbc6..43fa0f26c052 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
> @@ -85,7 +85,7 @@ static int exynos_dpi_get_modes(struct drm_connector *connector)
>  	}
>  
>  	if (ctx->panel)
> -		return drm_panel_get_modes(ctx->panel);
> +		return drm_panel_get_modes(ctx->panel, connector);
>  
>  	return 0;
>  }
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> index ceb370864cc4..d14d3f25d344 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> @@ -1461,7 +1461,7 @@ static int exynos_dsi_get_modes(struct drm_connector *connector)
>  	struct exynos_dsi *dsi = connector_to_dsi(connector);
>  
>  	if (dsi->panel)
> -		return drm_panel_get_modes(dsi->panel);
> +		return drm_panel_get_modes(dsi->panel, connector);
>  
>  	return 0;
>  }
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
> index 82c972e9c024..9598ee3cc4d2 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
> @@ -68,7 +68,7 @@ static int fsl_dcu_drm_connector_get_modes(struct drm_connector *connector)
>  	struct fsl_dcu_drm_connector *fsl_connector;
>  
>  	fsl_connector = to_fsl_dcu_connector(connector);
> -	return drm_panel_get_modes(fsl_connector->panel);
> +	return drm_panel_get_modes(fsl_connector->panel, connector);
>  }
>  
>  static int fsl_dcu_drm_connector_mode_valid(struct drm_connector *connector,
> diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
> index 208069faf183..8cb2665b2c74 100644
> --- a/drivers/gpu/drm/imx/imx-ldb.c
> +++ b/drivers/gpu/drm/imx/imx-ldb.c
> @@ -127,7 +127,7 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector)
>  	struct imx_ldb_channel *imx_ldb_ch = con_to_imx_ldb_ch(connector);
>  	int num_modes;
>  
> -	num_modes = drm_panel_get_modes(imx_ldb_ch->panel);
> +	num_modes = drm_panel_get_modes(imx_ldb_ch->panel, connector);
>  	if (num_modes > 0)
>  		return num_modes;
>  
> diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c
> index 35518e5de356..3dca424059f7 100644
> --- a/drivers/gpu/drm/imx/parallel-display.c
> +++ b/drivers/gpu/drm/imx/parallel-display.c
> @@ -50,7 +50,7 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
>  	struct device_node *np = imxpd->dev->of_node;
>  	int num_modes;
>  
> -	num_modes = drm_panel_get_modes(imxpd->panel);
> +	num_modes = drm_panel_get_modes(imxpd->panel, connector);
>  	if (num_modes > 0)
>  		return num_modes;
>  
> diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
> index e9931bbbe846..3b5e016d16c4 100644
> --- a/drivers/gpu/drm/mediatek/mtk_dsi.c
> +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
> @@ -821,7 +821,7 @@ static int mtk_dsi_connector_get_modes(struct drm_connector *connector)
>  {
>  	struct mtk_dsi *dsi = connector_to_dsi(connector);
>  
> -	return drm_panel_get_modes(dsi->panel);
> +	return drm_panel_get_modes(dsi->panel, connector);
>  }
>  
>  static const struct drm_encoder_helper_funcs mtk_dsi_encoder_helper_funcs = {
> diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c
> index 31abd2352f3e..c7df71e2fafc 100644
> --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c
> +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c
> @@ -53,7 +53,7 @@ static int mdp4_lvds_connector_get_modes(struct drm_connector *connector)
>  	if (panel) {
>  		drm_panel_attach(panel, connector);
>  
> -		ret = drm_panel_get_modes(panel);
> +		ret = drm_panel_get_modes(panel, connector);
>  
>  		drm_panel_detach(panel);
>  	}
> diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c
> index 271aa7bbca92..0fc29f1be8cc 100644
> --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
> +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
> @@ -329,7 +329,7 @@ static int dsi_mgr_connector_get_modes(struct drm_connector *connector)
>  	 * attached to the drm_panel.
>  	 */
>  	drm_panel_attach(panel, connector);
> -	num = drm_panel_get_modes(panel);
> +	num = drm_panel_get_modes(panel, connector);
>  	if (!num)
>  		return 0;
>  
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_out.c b/drivers/gpu/drm/mxsfb/mxsfb_out.c
> index 4eb94744c526..9eca1605d11d 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_out.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_out.c
> @@ -31,7 +31,7 @@ static int mxsfb_panel_get_modes(struct drm_connector *connector)
>  			drm_connector_to_mxsfb_drm_private(connector);
>  
>  	if (mxsfb->panel)
> -		return drm_panel_get_modes(mxsfb->panel);
> +		return drm_panel_get_modes(mxsfb->panel, connector);
>  
>  	return 0;
>  }
> diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
> index 5b8799c69f68..94cded387174 100644
> --- a/drivers/gpu/drm/omapdrm/omap_connector.c
> +++ b/drivers/gpu/drm/omapdrm/omap_connector.c
> @@ -229,7 +229,8 @@ static int omap_connector_get_modes(struct drm_connector *connector)
>  	 * operation to the panel API.
>  	 */
>  	if (omap_connector->output->panel)
> -		return drm_panel_get_modes(omap_connector->output->panel);
> +		return drm_panel_get_modes(omap_connector->output->panel,
> +					   connector);
>  
>  	/*
>  	 * We can't retrieve modes, which can happen for instance for a DVI or
> diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> index 8c6c172bbf2e..2cf44b91853c 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> @@ -91,7 +91,7 @@ static int rcar_lvds_connector_get_modes(struct drm_connector *connector)
>  {
>  	struct rcar_lvds *lvds = connector_to_rcar_lvds(connector);
>  
> -	return drm_panel_get_modes(lvds->panel);
> +	return drm_panel_get_modes(lvds->panel, connector);
>  }
>  
>  static int rcar_lvds_connector_atomic_check(struct drm_connector *connector,
> diff --git a/drivers/gpu/drm/rockchip/rockchip_lvds.c b/drivers/gpu/drm/rockchip/rockchip_lvds.c
> index 8a4c9af0ba73..325811d2e26e 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_lvds.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_lvds.c
> @@ -201,7 +201,7 @@ static int rockchip_lvds_connector_get_modes(struct drm_connector *connector)
>  	struct rockchip_lvds *lvds = connector_to_lvds(connector);
>  	struct drm_panel *panel = lvds->panel;
>  
> -	return drm_panel_get_modes(panel);
> +	return drm_panel_get_modes(panel, connector);
>  }
>  
>  static const
> diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c
> index 68289b0b063a..df2ee86cd4c1 100644
> --- a/drivers/gpu/drm/sti/sti_dvo.c
> +++ b/drivers/gpu/drm/sti/sti_dvo.c
> @@ -339,7 +339,7 @@ static int sti_dvo_connector_get_modes(struct drm_connector *connector)
>  	struct sti_dvo *dvo = dvo_connector->dvo;
>  
>  	if (dvo->panel)
> -		return drm_panel_get_modes(dvo->panel);
> +		return drm_panel_get_modes(dvo->panel, connector);
>  
>  	return 0;
>  }
> diff --git a/drivers/gpu/drm/sun4i/sun4i_lvds.c b/drivers/gpu/drm/sun4i/sun4i_lvds.c
> index 25ab2ef6d545..65b7a8739666 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_lvds.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_lvds.c
> @@ -43,7 +43,7 @@ static int sun4i_lvds_get_modes(struct drm_connector *connector)
>  	struct sun4i_lvds *lvds =
>  		drm_connector_to_sun4i_lvds(connector);
>  
> -	return drm_panel_get_modes(lvds->panel);
> +	return drm_panel_get_modes(lvds->panel, connector);
>  }
>  
>  static struct drm_connector_helper_funcs sun4i_lvds_con_helper_funcs = {
> diff --git a/drivers/gpu/drm/sun4i/sun4i_rgb.c b/drivers/gpu/drm/sun4i/sun4i_rgb.c
> index e74b9eddca01..b27f16af50f5 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_rgb.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_rgb.c
> @@ -47,7 +47,7 @@ static int sun4i_rgb_get_modes(struct drm_connector *connector)
>  	struct sun4i_rgb *rgb =
>  		drm_connector_to_sun4i_rgb(connector);
>  
> -	return drm_panel_get_modes(rgb->panel);
> +	return drm_panel_get_modes(rgb->panel, connector);
>  }
>  
>  /*
> diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> index c958ca9bae63..4e8f634cc2db 100644
> --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> @@ -795,7 +795,7 @@ static int sun6i_dsi_get_modes(struct drm_connector *connector)
>  {
>  	struct sun6i_dsi *dsi = connector_to_sun6i_dsi(connector);
>  
> -	return drm_panel_get_modes(dsi->panel);
> +	return drm_panel_get_modes(dsi->panel, connector);
>  }
>  
>  static struct drm_connector_helper_funcs sun6i_dsi_connector_helper_funcs = {
> diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c
> index 5bdbf9ffcda1..4948373d8c75 100644
> --- a/drivers/gpu/drm/tegra/output.c
> +++ b/drivers/gpu/drm/tegra/output.c
> @@ -23,7 +23,7 @@ int tegra_output_connector_get_modes(struct drm_connector *connector)
>  	 * ignore any other means of obtaining a mode.
>  	 */
>  	if (output->panel) {
> -		err = drm_panel_get_modes(output->panel);
> +		err = drm_panel_get_modes(output->panel, connector);
>  		if (err > 0)
>  			return err;
>  	}
> diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
> index a5f7199807f2..4fd61cb9eb93 100644
> --- a/include/drm/drm_panel.h
> +++ b/include/drm/drm_panel.h
> @@ -124,13 +124,6 @@ struct drm_panel {
>  	 */
>  	struct drm_device *drm;
>  
> -	/**
> -	 * @connector:
> -	 *
> -	 * DRM connector that the panel is attached to.
> -	 */
> -	struct drm_connector *connector;
> -
>  	/**
>  	 * @dev:
>  	 *
> @@ -187,7 +180,7 @@ int drm_panel_unprepare(struct drm_panel *panel);
>  int drm_panel_enable(struct drm_panel *panel);
>  int drm_panel_disable(struct drm_panel *panel);
>  
> -int drm_panel_get_modes(struct drm_panel *panel);
> +int drm_panel_get_modes(struct drm_panel *panel, struct drm_connector *connector);
>  
>  #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL)
>  struct drm_panel *of_drm_find_panel(const struct device_node *np);
Linus Walleij Dec. 3, 2019, 1:26 p.m. UTC | #2
On Mon, Dec 2, 2019 at 8:33 PM Sam Ravnborg <sam@ravnborg.org> wrote:

> To facilitate that connector creation will be moved
> to display drivers, decouple the drm_connector from drm_panel.
> Add a connector argument to drm_panel_get_modes()
>
> All users of drm_panel_get_modes() already had the connector
> available, so updating users was trivial.
>
> With this patch drm_panel no longer keep a copy of the drm_connector.
>
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Andrzej Hajda <a.hajda@samsung.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@siol.net>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: Inki Dae <inki.dae@samsung.com>
> Cc: Joonyoung Shim <jy0922.shim@samsung.com>
> Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
> Cc: Kyungmin Park <kyungmin.park@samsung.com>
> Cc: Kukjin Kim <kgene@kernel.org>
> Cc: Krzysztof Kozlowski <krzk@kernel.org>
> Cc: Stefan Agner <stefan@agner.ch>
> Cc: Alison Wang <alison.wang@nxp.com>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
> Cc: Fabio Estevam <festevam@gmail.com>
> Cc: NXP Linux Team <linux-imx@nxp.com>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> Cc: Marek Vasut <marex@denx.de>
> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
> Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
> Cc: Vincent Abriou <vincent.abriou@st.com>
> Cc: Chen-Yu Tsai <wens@csie.org>
> Cc: Jonathan Hunter <jonathanh@nvidia.com>
> Cc: Torsten Duwe <duwe@lst.de>
> Cc: Vasily Khoruzhick <anarsoul@gmail.com>
> Cc: Icenowy Zheng <icenowy@aosc.io>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Boris Brezillon <boris.brezillon@collabora.com>
> Cc: Hariprasad Kelam <hariprasad.kelam@gmail.com>
> Cc: Alexios Zavras <alexios.zavras@intel.com>
> Cc: Brian Masney <masneyb@onstation.org>
> Cc: Rob Clark <robdclark@chromium.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Allison Randal <allison@lohutok.net>
> Cc: Shayenne Moura <shayenneluzmoura@gmail.com>
> Cc: Abhinav Kumar <abhinavk@codeaurora.org>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-samsung-soc@vger.kernel.org
> Cc: linux-mediatek@lists.infradead.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-rockchip@lists.infradead.org
> Cc: linux-tegra@vger.kernel.org

This is a good refactoring. It makes it easier to understand
where things belong.

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

Patch
diff mbox series

diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
index b4f3a923a52a..9917ce0d86a0 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
@@ -493,7 +493,7 @@  static int anx6345_get_modes(struct drm_connector *connector)
 	mutex_unlock(&anx6345->lock);
 
 	if (!num_modes && anx6345->panel)
-		num_modes += drm_panel_get_modes(anx6345->panel);
+		num_modes += drm_panel_get_modes(anx6345->panel, connector);
 
 	return num_modes;
 }
diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
index bb411fe52ae8..6effe532f820 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
@@ -1111,7 +1111,7 @@  static int analogix_dp_get_modes(struct drm_connector *connector)
 	int ret, num_modes = 0;
 
 	if (dp->plat_data->panel) {
-		num_modes += drm_panel_get_modes(dp->plat_data->panel);
+		num_modes += drm_panel_get_modes(dp->plat_data->panel, connector);
 	} else {
 		ret = analogix_dp_prepare_panel(dp, true, false);
 		if (ret) {
diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c
index c5e27b81588a..65cbd4a283fb 100644
--- a/drivers/gpu/drm/bridge/panel.c
+++ b/drivers/gpu/drm/bridge/panel.c
@@ -37,7 +37,7 @@  static int panel_bridge_connector_get_modes(struct drm_connector *connector)
 	struct panel_bridge *panel_bridge =
 		drm_connector_to_panel_bridge(connector);
 
-	return drm_panel_get_modes(panel_bridge->panel);
+	return drm_panel_get_modes(panel_bridge->panel, connector);
 }
 
 static const struct drm_connector_helper_funcs
diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c
index b7a72dfdcac3..10c47c008b40 100644
--- a/drivers/gpu/drm/bridge/parade-ps8622.c
+++ b/drivers/gpu/drm/bridge/parade-ps8622.c
@@ -461,7 +461,7 @@  static int ps8622_get_modes(struct drm_connector *connector)
 
 	ps8622 = connector_to_ps8622(connector);
 
-	return drm_panel_get_modes(ps8622->panel);
+	return drm_panel_get_modes(ps8622->panel, connector);
 }
 
 static const struct drm_connector_helper_funcs ps8622_connector_helper_funcs = {
diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
index db298f550a5a..96207fcfde19 100644
--- a/drivers/gpu/drm/bridge/tc358764.c
+++ b/drivers/gpu/drm/bridge/tc358764.c
@@ -282,7 +282,7 @@  static int tc358764_get_modes(struct drm_connector *connector)
 {
 	struct tc358764 *ctx = connector_to_tc358764(connector);
 
-	return drm_panel_get_modes(ctx->panel);
+	return drm_panel_get_modes(ctx->panel, connector);
 }
 
 static const
diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
index 8029478ffebb..3709e5ace724 100644
--- a/drivers/gpu/drm/bridge/tc358767.c
+++ b/drivers/gpu/drm/bridge/tc358767.c
@@ -1346,7 +1346,7 @@  static int tc_connector_get_modes(struct drm_connector *connector)
 		return 0;
 	}
 
-	count = drm_panel_get_modes(tc->panel);
+	count = drm_panel_get_modes(tc->panel, connector);
 	if (count > 0)
 		return count;
 
diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
index 43abf01ebd4c..9a2dd986afa5 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
@@ -206,7 +206,7 @@  static int ti_sn_bridge_connector_get_modes(struct drm_connector *connector)
 {
 	struct ti_sn_bridge *pdata = connector_to_ti_sn_bridge(connector);
 
-	return drm_panel_get_modes(pdata->panel);
+	return drm_panel_get_modes(pdata->panel, connector);
 }
 
 static enum drm_mode_status
diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
index 9927e28d93e6..fd428b6d25b0 100644
--- a/drivers/gpu/drm/drm_panel.c
+++ b/drivers/gpu/drm/drm_panel.c
@@ -113,10 +113,9 @@  EXPORT_SYMBOL(drm_panel_remove);
  */
 int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector)
 {
-	if (panel->connector)
+	if (panel->drm)
 		return -EBUSY;
 
-	panel->connector = connector;
 	panel->drm = connector->dev;
 
 	return 0;
@@ -135,7 +134,6 @@  EXPORT_SYMBOL(drm_panel_attach);
  */
 void drm_panel_detach(struct drm_panel *panel)
 {
-	panel->connector = NULL;
 	panel->drm = NULL;
 }
 EXPORT_SYMBOL(drm_panel_detach);
@@ -239,6 +237,7 @@  EXPORT_SYMBOL(drm_panel_disable);
 /**
  * drm_panel_get_modes - probe the available display modes of a panel
  * @panel: DRM panel
+ * @connector: DRM connector
  *
  * The modes probed from the panel are automatically added to the connector
  * that the panel is attached to.
@@ -246,13 +245,14 @@  EXPORT_SYMBOL(drm_panel_disable);
  * Return: The number of modes available from the panel on success or a
  * negative error code on failure.
  */
-int drm_panel_get_modes(struct drm_panel *panel)
+int drm_panel_get_modes(struct drm_panel *panel,
+			struct drm_connector *connector)
 {
 	if (!panel)
 		return -EINVAL;
 
 	if (panel->funcs && panel->funcs->get_modes)
-		return panel->funcs->get_modes(panel, panel->connector);
+		return panel->funcs->get_modes(panel, connector);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
index 5479ff71cbc6..43fa0f26c052 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
@@ -85,7 +85,7 @@  static int exynos_dpi_get_modes(struct drm_connector *connector)
 	}
 
 	if (ctx->panel)
-		return drm_panel_get_modes(ctx->panel);
+		return drm_panel_get_modes(ctx->panel, connector);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index ceb370864cc4..d14d3f25d344 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1461,7 +1461,7 @@  static int exynos_dsi_get_modes(struct drm_connector *connector)
 	struct exynos_dsi *dsi = connector_to_dsi(connector);
 
 	if (dsi->panel)
-		return drm_panel_get_modes(dsi->panel);
+		return drm_panel_get_modes(dsi->panel, connector);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
index 82c972e9c024..9598ee3cc4d2 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
@@ -68,7 +68,7 @@  static int fsl_dcu_drm_connector_get_modes(struct drm_connector *connector)
 	struct fsl_dcu_drm_connector *fsl_connector;
 
 	fsl_connector = to_fsl_dcu_connector(connector);
-	return drm_panel_get_modes(fsl_connector->panel);
+	return drm_panel_get_modes(fsl_connector->panel, connector);
 }
 
 static int fsl_dcu_drm_connector_mode_valid(struct drm_connector *connector,
diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
index 208069faf183..8cb2665b2c74 100644
--- a/drivers/gpu/drm/imx/imx-ldb.c
+++ b/drivers/gpu/drm/imx/imx-ldb.c
@@ -127,7 +127,7 @@  static int imx_ldb_connector_get_modes(struct drm_connector *connector)
 	struct imx_ldb_channel *imx_ldb_ch = con_to_imx_ldb_ch(connector);
 	int num_modes;
 
-	num_modes = drm_panel_get_modes(imx_ldb_ch->panel);
+	num_modes = drm_panel_get_modes(imx_ldb_ch->panel, connector);
 	if (num_modes > 0)
 		return num_modes;
 
diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c
index 35518e5de356..3dca424059f7 100644
--- a/drivers/gpu/drm/imx/parallel-display.c
+++ b/drivers/gpu/drm/imx/parallel-display.c
@@ -50,7 +50,7 @@  static int imx_pd_connector_get_modes(struct drm_connector *connector)
 	struct device_node *np = imxpd->dev->of_node;
 	int num_modes;
 
-	num_modes = drm_panel_get_modes(imxpd->panel);
+	num_modes = drm_panel_get_modes(imxpd->panel, connector);
 	if (num_modes > 0)
 		return num_modes;
 
diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
index e9931bbbe846..3b5e016d16c4 100644
--- a/drivers/gpu/drm/mediatek/mtk_dsi.c
+++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
@@ -821,7 +821,7 @@  static int mtk_dsi_connector_get_modes(struct drm_connector *connector)
 {
 	struct mtk_dsi *dsi = connector_to_dsi(connector);
 
-	return drm_panel_get_modes(dsi->panel);
+	return drm_panel_get_modes(dsi->panel, connector);
 }
 
 static const struct drm_encoder_helper_funcs mtk_dsi_encoder_helper_funcs = {
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c
index 31abd2352f3e..c7df71e2fafc 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c
@@ -53,7 +53,7 @@  static int mdp4_lvds_connector_get_modes(struct drm_connector *connector)
 	if (panel) {
 		drm_panel_attach(panel, connector);
 
-		ret = drm_panel_get_modes(panel);
+		ret = drm_panel_get_modes(panel, connector);
 
 		drm_panel_detach(panel);
 	}
diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c
index 271aa7bbca92..0fc29f1be8cc 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
@@ -329,7 +329,7 @@  static int dsi_mgr_connector_get_modes(struct drm_connector *connector)
 	 * attached to the drm_panel.
 	 */
 	drm_panel_attach(panel, connector);
-	num = drm_panel_get_modes(panel);
+	num = drm_panel_get_modes(panel, connector);
 	if (!num)
 		return 0;
 
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_out.c b/drivers/gpu/drm/mxsfb/mxsfb_out.c
index 4eb94744c526..9eca1605d11d 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_out.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_out.c
@@ -31,7 +31,7 @@  static int mxsfb_panel_get_modes(struct drm_connector *connector)
 			drm_connector_to_mxsfb_drm_private(connector);
 
 	if (mxsfb->panel)
-		return drm_panel_get_modes(mxsfb->panel);
+		return drm_panel_get_modes(mxsfb->panel, connector);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
index 5b8799c69f68..94cded387174 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.c
+++ b/drivers/gpu/drm/omapdrm/omap_connector.c
@@ -229,7 +229,8 @@  static int omap_connector_get_modes(struct drm_connector *connector)
 	 * operation to the panel API.
 	 */
 	if (omap_connector->output->panel)
-		return drm_panel_get_modes(omap_connector->output->panel);
+		return drm_panel_get_modes(omap_connector->output->panel,
+					   connector);
 
 	/*
 	 * We can't retrieve modes, which can happen for instance for a DVI or
diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c
index 8c6c172bbf2e..2cf44b91853c 100644
--- a/drivers/gpu/drm/rcar-du/rcar_lvds.c
+++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c
@@ -91,7 +91,7 @@  static int rcar_lvds_connector_get_modes(struct drm_connector *connector)
 {
 	struct rcar_lvds *lvds = connector_to_rcar_lvds(connector);
 
-	return drm_panel_get_modes(lvds->panel);
+	return drm_panel_get_modes(lvds->panel, connector);
 }
 
 static int rcar_lvds_connector_atomic_check(struct drm_connector *connector,
diff --git a/drivers/gpu/drm/rockchip/rockchip_lvds.c b/drivers/gpu/drm/rockchip/rockchip_lvds.c
index 8a4c9af0ba73..325811d2e26e 100644
--- a/drivers/gpu/drm/rockchip/rockchip_lvds.c
+++ b/drivers/gpu/drm/rockchip/rockchip_lvds.c
@@ -201,7 +201,7 @@  static int rockchip_lvds_connector_get_modes(struct drm_connector *connector)
 	struct rockchip_lvds *lvds = connector_to_lvds(connector);
 	struct drm_panel *panel = lvds->panel;
 
-	return drm_panel_get_modes(panel);
+	return drm_panel_get_modes(panel, connector);
 }
 
 static const
diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c
index 68289b0b063a..df2ee86cd4c1 100644
--- a/drivers/gpu/drm/sti/sti_dvo.c
+++ b/drivers/gpu/drm/sti/sti_dvo.c
@@ -339,7 +339,7 @@  static int sti_dvo_connector_get_modes(struct drm_connector *connector)
 	struct sti_dvo *dvo = dvo_connector->dvo;
 
 	if (dvo->panel)
-		return drm_panel_get_modes(dvo->panel);
+		return drm_panel_get_modes(dvo->panel, connector);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/sun4i/sun4i_lvds.c b/drivers/gpu/drm/sun4i/sun4i_lvds.c
index 25ab2ef6d545..65b7a8739666 100644
--- a/drivers/gpu/drm/sun4i/sun4i_lvds.c
+++ b/drivers/gpu/drm/sun4i/sun4i_lvds.c
@@ -43,7 +43,7 @@  static int sun4i_lvds_get_modes(struct drm_connector *connector)
 	struct sun4i_lvds *lvds =
 		drm_connector_to_sun4i_lvds(connector);
 
-	return drm_panel_get_modes(lvds->panel);
+	return drm_panel_get_modes(lvds->panel, connector);
 }
 
 static struct drm_connector_helper_funcs sun4i_lvds_con_helper_funcs = {
diff --git a/drivers/gpu/drm/sun4i/sun4i_rgb.c b/drivers/gpu/drm/sun4i/sun4i_rgb.c
index e74b9eddca01..b27f16af50f5 100644
--- a/drivers/gpu/drm/sun4i/sun4i_rgb.c
+++ b/drivers/gpu/drm/sun4i/sun4i_rgb.c
@@ -47,7 +47,7 @@  static int sun4i_rgb_get_modes(struct drm_connector *connector)
 	struct sun4i_rgb *rgb =
 		drm_connector_to_sun4i_rgb(connector);
 
-	return drm_panel_get_modes(rgb->panel);
+	return drm_panel_get_modes(rgb->panel, connector);
 }
 
 /*
diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
index c958ca9bae63..4e8f634cc2db 100644
--- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
+++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
@@ -795,7 +795,7 @@  static int sun6i_dsi_get_modes(struct drm_connector *connector)
 {
 	struct sun6i_dsi *dsi = connector_to_sun6i_dsi(connector);
 
-	return drm_panel_get_modes(dsi->panel);
+	return drm_panel_get_modes(dsi->panel, connector);
 }
 
 static struct drm_connector_helper_funcs sun6i_dsi_connector_helper_funcs = {
diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c
index 5bdbf9ffcda1..4948373d8c75 100644
--- a/drivers/gpu/drm/tegra/output.c
+++ b/drivers/gpu/drm/tegra/output.c
@@ -23,7 +23,7 @@  int tegra_output_connector_get_modes(struct drm_connector *connector)
 	 * ignore any other means of obtaining a mode.
 	 */
 	if (output->panel) {
-		err = drm_panel_get_modes(output->panel);
+		err = drm_panel_get_modes(output->panel, connector);
 		if (err > 0)
 			return err;
 	}
diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
index a5f7199807f2..4fd61cb9eb93 100644
--- a/include/drm/drm_panel.h
+++ b/include/drm/drm_panel.h
@@ -124,13 +124,6 @@  struct drm_panel {
 	 */
 	struct drm_device *drm;
 
-	/**
-	 * @connector:
-	 *
-	 * DRM connector that the panel is attached to.
-	 */
-	struct drm_connector *connector;
-
 	/**
 	 * @dev:
 	 *
@@ -187,7 +180,7 @@  int drm_panel_unprepare(struct drm_panel *panel);
 int drm_panel_enable(struct drm_panel *panel);
 int drm_panel_disable(struct drm_panel *panel);
 
-int drm_panel_get_modes(struct drm_panel *panel);
+int drm_panel_get_modes(struct drm_panel *panel, struct drm_connector *connector);
 
 #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL)
 struct drm_panel *of_drm_find_panel(const struct device_node *np);