mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 04:40:51 +07:00
drm/panel: decouple connector from drm_panel
To facilitate moving connector creation to display drivers, decouple the drm_connector from drm_panel. This patch adds 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 keeps a reference to the drm_connector. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Jeffrey Hugo <jeffrey.l.hugo@gmail.com> 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 Link: https://patchwork.freedesktop.org/patch/msgid/20191207140353.23967-7-sam@ravnborg.org
This commit is contained in:
parent
0ce8ddd8e0
commit
06c4a9c2ae
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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 = {
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -114,10 +114,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;
|
||||
@ -136,7 +135,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);
|
||||
@ -250,6 +248,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.
|
||||
@ -257,13 +256,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 -EOPNOTSUPP;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -1462,7 +1462,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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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 = {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 = {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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 = {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -136,13 +136,6 @@ struct drm_panel {
|
||||
*/
|
||||
struct drm_device *drm;
|
||||
|
||||
/**
|
||||
* @connector:
|
||||
*
|
||||
* DRM connector that the panel is attached to.
|
||||
*/
|
||||
struct drm_connector *connector;
|
||||
|
||||
/**
|
||||
* @dev:
|
||||
*
|
||||
@ -201,7 +194,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);
|
||||
|
Loading…
Reference in New Issue
Block a user