* [PATCH 1/3] gpu/drm: Remove unused *dev parameter from drm_mode_destroy function
2026-07-06 13:34 ` [PATCH 0/3] drm: Remove unused *drm parameter Jan Niedziolka
@ 2026-07-06 13:34 ` Jan Niedziolka
2026-07-06 13:55 ` sashiko-bot
2026-07-06 13:34 ` [PATCH 2/3] gpu/drm: Remove unused 'drm device *dev' parameter from drm_mode_create() Jan Niedziolka
2026-07-06 13:34 ` [PATCH 3/3] gpu/drm: Add drm_notice logging when drm_mode_create fails Jan Niedziolka
2 siblings, 1 reply; 7+ messages in thread
From: Jan Niedziolka @ 2026-07-06 13:34 UTC (permalink / raw)
To: maarten.lankhorst, mripard, tzimmermann, airlied, simona,
k.tegowski
Cc: dri-devel, linux-kernel, a.fijalko, bartlomiej.k, Jan Niedziolka
Get rid of unused 'struct drm_device *dev' parameter from drm_mode_destroy()
prototype and definition.
Keep drm_mode_destroy() comment up to date - remove unnecessary *dev record.
Also, fix all drm_mode_destroy() calls where *dev argument is used.
Fixes: 0e691bc73026 ("drm: Remove use of drm_mode_object")
Signed-off-by: Jan Niedziolka <j.niedziolka@samsung.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 ++--
drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c | 2 +-
drivers/gpu/drm/drm_client_modeset.c | 8 ++++----
drivers/gpu/drm/drm_connector.c | 2 +-
drivers/gpu/drm/drm_crtc.c | 2 +-
drivers/gpu/drm/drm_crtc_helper.c | 2 +-
drivers/gpu/drm/drm_edid.c | 8 ++++----
drivers/gpu/drm/drm_modes.c | 11 +++++------
drivers/gpu/drm/gma500/psb_intel_sdvo.c | 3 +--
drivers/gpu/drm/i915/display/intel_panel.c | 4 ++--
drivers/gpu/drm/msm/dsi/dsi_host.c | 2 +-
drivers/gpu/drm/nouveau/dispnv50/disp.c | 2 +-
drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +-
drivers/gpu/drm/tests/drm_kunit_helpers.c | 2 +-
drivers/gpu/drm/vboxvideo/vbox_mode.c | 2 +-
include/drm/drm_modes.h | 2 +-
16 files changed, 28 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 97ab1e83b318..b919efd8f42b 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8562,7 +8562,7 @@ enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connec
stream = create_validate_stream_for_sink(connector, test_mode,
to_dm_connector_state(connector->state),
NULL);
- drm_mode_destroy(connector->dev, test_mode);
+ drm_mode_destroy(test_mode);
if (stream) {
dc_stream_release(stream);
result = MODE_OK;
@@ -9217,7 +9217,7 @@ static uint add_fs_modes(struct amdgpu_dm_connector *aconnector)
drm_mode_probed_add(&aconnector->base, new_mode);
new_modes_count += 1;
} else
- drm_mode_destroy(aconnector->base.dev, new_mode);
+ drm_mode_destroy(new_mode);
}
out:
return new_modes_count;
diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
index 36c07b71fe04..b971f2bcfa26 100644
--- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
@@ -1913,7 +1913,7 @@ cdns_mhdp_bridge_atomic_destroy_state(struct drm_bridge *bridge,
cdns_mhdp_state = to_cdns_mhdp_bridge_state(state);
if (cdns_mhdp_state->current_mode) {
- drm_mode_destroy(bridge->dev, cdns_mhdp_state->current_mode);
+ drm_mode_destroy(cdns_mhdp_state->current_mode);
cdns_mhdp_state->current_mode = NULL;
}
diff --git a/drivers/gpu/drm/drm_client_modeset.c b/drivers/gpu/drm/drm_client_modeset.c
index 0080a8e9556a..66f17a386198 100644
--- a/drivers/gpu/drm/drm_client_modeset.c
+++ b/drivers/gpu/drm/drm_client_modeset.c
@@ -79,7 +79,7 @@ static void drm_client_modeset_release(struct drm_client_dev *client)
drm_client_for_each_modeset(modeset, client) {
int i;
- drm_mode_destroy(client->dev, modeset->mode);
+ drm_mode_destroy(modeset->mode);
modeset->mode = NULL;
modeset->fb = NULL;
@@ -272,7 +272,7 @@ static void mode_replace(struct drm_device *dev,
const struct drm_display_mode **dst,
const struct drm_display_mode *src)
{
- drm_mode_destroy(dev, (struct drm_display_mode *)*dst);
+ drm_mode_destroy((struct drm_display_mode *)*dst);
*dst = src ? drm_mode_duplicate(dev, src) : NULL;
}
@@ -367,7 +367,7 @@ static bool drm_client_target_cloned(struct drm_device *dev,
if (!modes[i])
can_clone = false;
}
- drm_mode_destroy(dev, dmt_mode);
+ drm_mode_destroy(dmt_mode);
if (can_clone) {
drm_dbg_kms(dev, "can clone using 1024x768\n");
@@ -913,7 +913,7 @@ int drm_client_modeset_probe(struct drm_client_dev *client, unsigned int width,
break;
}
- drm_mode_destroy(dev, modeset->mode);
+ drm_mode_destroy(modeset->mode);
modeset->mode = drm_mode_duplicate(dev, mode);
if (!modeset->mode) {
ret = -ENOMEM;
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 3fa4d2082cd7..6825cd4e9001 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -706,7 +706,7 @@ static void drm_mode_remove(struct drm_connector *connector,
struct drm_display_mode *mode)
{
list_del(&mode->head);
- drm_mode_destroy(connector->dev, mode);
+ drm_mode_destroy(mode);
}
/**
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 63ead8ba6756..22039a553a24 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -897,7 +897,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
}
}
kfree(connector_set);
- drm_mode_destroy(dev, mode);
+ drm_mode_destroy(mode);
/* In case we need to retry... */
connector_set = NULL;
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index 4a8cfe046e4a..084417791a28 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -421,7 +421,7 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
/* FIXME: add subpixel order */
done:
- drm_mode_destroy(dev, adjusted_mode);
+ drm_mode_destroy(adjusted_mode);
if (!ret) {
crtc->enabled = saved_enabled;
drm_mode_copy(&crtc->mode, &saved_mode);
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 404208bf23a6..7f456e9c27a5 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -3361,7 +3361,7 @@ drm_gtf2_mode(struct drm_device *dev,
return NULL;
if (drm_mode_hsync(mode) > drm_gtf2_hbreak(drm_edid)) {
- drm_mode_destroy(dev, mode);
+ drm_mode_destroy(mode);
mode = drm_gtf_mode_complex(dev, hsize, vsize,
vrefresh_rate, 0, 0,
drm_gtf2_m(drm_edid),
@@ -3777,7 +3777,7 @@ static int drm_gtf_modes_for_range(struct drm_connector *connector,
drm_mode_fixup_1366x768(newmode);
if (!mode_in_range(newmode, drm_edid, timing) ||
!valid_inferred_mode(connector, newmode)) {
- drm_mode_destroy(dev, newmode);
+ drm_mode_destroy(newmode);
continue;
}
@@ -3806,7 +3806,7 @@ static int drm_gtf2_modes_for_range(struct drm_connector *connector,
drm_mode_fixup_1366x768(newmode);
if (!mode_in_range(newmode, drm_edid, timing) ||
!valid_inferred_mode(connector, newmode)) {
- drm_mode_destroy(dev, newmode);
+ drm_mode_destroy(newmode);
continue;
}
@@ -3836,7 +3836,7 @@ static int drm_cvt_modes_for_range(struct drm_connector *connector,
drm_mode_fixup_1366x768(newmode);
if (!mode_in_range(newmode, drm_edid, timing) ||
!valid_inferred_mode(connector, newmode)) {
- drm_mode_destroy(dev, newmode);
+ drm_mode_destroy(newmode);
continue;
}
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 3f8e025fd6d9..175bf3eef14b 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -85,12 +85,11 @@ EXPORT_SYMBOL(drm_mode_create);
/**
* drm_mode_destroy - remove a mode
- * @dev: DRM device
* @mode: mode to remove
*
- * Release @mode's unique ID, then free it @mode structure itself using kfree.
+ * Free @mode structure using kfree.
*/
-void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode)
+void drm_mode_destroy(struct drm_display_mode *mode)
{
if (!mode)
return;
@@ -591,7 +590,7 @@ struct drm_display_mode *drm_analog_tv_mode(struct drm_device *dev,
return mode;
err_free_mode:
- drm_mode_destroy(dev, mode);
+ drm_mode_destroy(mode);
return NULL;
}
EXPORT_SYMBOL(drm_analog_tv_mode);
@@ -1819,7 +1818,7 @@ void drm_mode_prune_invalid(struct drm_device *dev,
drm_dbg_kms(dev, "Rejected mode: " DRM_MODE_FMT " (%s)\n",
DRM_MODE_ARG(mode), drm_get_mode_status_name(mode->status));
}
- drm_mode_destroy(dev, mode);
+ drm_mode_destroy(mode);
}
}
}
@@ -1924,7 +1923,7 @@ void drm_connector_list_update(struct drm_connector *connector)
}
list_del(&pmode->head);
- drm_mode_destroy(connector->dev, pmode);
+ drm_mode_destroy(pmode);
break;
}
diff --git a/drivers/gpu/drm/gma500/psb_intel_sdvo.c b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
index 3ca11aad569d..a834252a7774 100644
--- a/drivers/gpu/drm/gma500/psb_intel_sdvo.c
+++ b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
@@ -1787,8 +1787,7 @@ static void psb_intel_sdvo_enc_destroy(struct drm_encoder *encoder)
struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(encoder);
if (psb_intel_sdvo->sdvo_lvds_fixed_mode != NULL)
- drm_mode_destroy(encoder->dev,
- psb_intel_sdvo->sdvo_lvds_fixed_mode);
+ drm_mode_destroy(psb_intel_sdvo->sdvo_lvds_fixed_mode);
i2c_del_adapter(&psb_intel_sdvo->ddc);
gma_encoder_destroy(encoder);
diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
index 20c548eea6da..b4b87e794917 100644
--- a/drivers/gpu/drm/i915/display/intel_panel.c
+++ b/drivers/gpu/drm/i915/display/intel_panel.c
@@ -309,7 +309,7 @@ static void intel_panel_destroy_probed_modes(struct intel_connector *connector)
connector->base.base.id, connector->base.name,
DRM_MODE_ARG(mode));
list_del(&mode->head);
- drm_mode_destroy(display->drm, mode);
+ drm_mode_destroy(mode);
}
}
@@ -466,7 +466,7 @@ void intel_panel_fini(struct intel_connector *connector)
list_for_each_entry_safe(fixed_mode, next, &panel->fixed_modes, head) {
list_del(&fixed_mode->head);
- drm_mode_destroy(connector->base.dev, fixed_mode);
+ drm_mode_destroy(fixed_mode);
}
}
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
index 982abaaac00d..f62033eee5c9 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
@@ -2579,7 +2579,7 @@ int msm_dsi_host_set_display_mode(struct mipi_dsi_host *host,
struct msm_dsi_host *msm_host = to_msm_dsi_host(host);
if (msm_host->mode) {
- drm_mode_destroy(msm_host->dev, msm_host->mode);
+ drm_mode_destroy(msm_host->mode);
msm_host->mode = NULL;
}
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
index 364227f5456f..4b820e3d08f7 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
@@ -1185,7 +1185,7 @@ nv50_mstc_get_modes(struct drm_connector *connector)
connector->display_info.bpc = 8;
if (mstc->native)
- drm_mode_destroy(mstc->connector.dev, mstc->native);
+ drm_mode_destroy(mstc->native);
mstc->native = nouveau_conn_native_mode(&mstc->connector);
return ret;
}
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index b0b0ad9a0c24..755a5d31aae0 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -969,7 +969,7 @@ nouveau_connector_get_modes(struct drm_connector *connector)
/* destroy the native mode, the attached monitor could have changed.
*/
if (nv_connector->native_mode) {
- drm_mode_destroy(dev, nv_connector->native_mode);
+ drm_mode_destroy(nv_connector->native_mode);
nv_connector->native_mode = NULL;
}
diff --git a/drivers/gpu/drm/tests/drm_kunit_helpers.c b/drivers/gpu/drm/tests/drm_kunit_helpers.c
index 727766444d63..547fbef0dbb6 100644
--- a/drivers/gpu/drm/tests/drm_kunit_helpers.c
+++ b/drivers/gpu/drm/tests/drm_kunit_helpers.c
@@ -337,7 +337,7 @@ static void kunit_action_drm_mode_destroy(void *ptr)
{
struct drm_display_mode *mode = ptr;
- drm_mode_destroy(NULL, mode);
+ drm_mode_destroy(mode);
}
/**
diff --git a/drivers/gpu/drm/vboxvideo/vbox_mode.c b/drivers/gpu/drm/vboxvideo/vbox_mode.c
index 8e4e5fc9d3c5..fbe5c2382983 100644
--- a/drivers/gpu/drm/vboxvideo/vbox_mode.c
+++ b/drivers/gpu/drm/vboxvideo/vbox_mode.c
@@ -782,7 +782,7 @@ static int vbox_fill_modes(struct drm_connector *connector, u32 max_x,
dev = vbox_connector->base.dev;
list_for_each_entry_safe(mode, iterator, &connector->modes, head) {
list_del(&mode->head);
- drm_mode_destroy(dev, mode);
+ drm_mode_destroy(mode);
}
return drm_helper_probe_single_connector_modes(connector, max_x, max_y);
diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h
index b9bb92e4b029..b1d1ecb15f02 100644
--- a/include/drm/drm_modes.h
+++ b/include/drm/drm_modes.h
@@ -453,7 +453,7 @@ struct drm_connector;
struct drm_cmdline_mode;
struct drm_display_mode *drm_mode_create(struct drm_device *dev);
-void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode);
+void drm_mode_destroy(struct drm_display_mode *mode);
void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out,
const struct drm_display_mode *in);
int drm_mode_convert_umode(struct drm_device *dev,
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 2/3] gpu/drm: Remove unused 'drm device *dev' parameter from drm_mode_create()
2026-07-06 13:34 ` [PATCH 0/3] drm: Remove unused *drm parameter Jan Niedziolka
2026-07-06 13:34 ` [PATCH 1/3] gpu/drm: Remove unused *dev parameter from drm_mode_destroy function Jan Niedziolka
@ 2026-07-06 13:34 ` Jan Niedziolka
2026-07-06 13:57 ` sashiko-bot
2026-07-06 13:34 ` [PATCH 3/3] gpu/drm: Add drm_notice logging when drm_mode_create fails Jan Niedziolka
2 siblings, 1 reply; 7+ messages in thread
From: Jan Niedziolka @ 2026-07-06 13:34 UTC (permalink / raw)
To: maarten.lankhorst, mripard, tzimmermann, airlied, simona,
k.tegowski
Cc: dri-devel, linux-kernel, a.fijalko, bartlomiej.k, Jan Niedziolka
Get rid of unused 'struct drm_device *dev' parameter from drm_mode_create()
prototype and definition.
Keep drm_mode_create() doc comment up to date - remove unnecessary *dev record.
Also, fix all drm_mode_create() calls where *dev argument is used.
Fixes: 0e691bc73026 ("drm: Remove use of drm_mode_object")
Signed-off-by: Jan Niedziolka <j.niedziolka@samsung.com>
---
drivers/gpu/drm/drm_crtc.c | 2 +-
drivers/gpu/drm/drm_edid.c | 4 +-
drivers/gpu/drm/drm_modes.c | 11 ++---
drivers/gpu/drm/exynos/exynos_dp.c | 47 +++++++++++++++++++
drivers/gpu/drm/exynos/exynos_drm_dpi.c | 2 +-
drivers/gpu/drm/gud/gud_connector.c | 2 +-
drivers/gpu/drm/i915/display/intel_tv.c | 2 +-
drivers/gpu/drm/panel/panel-edp.c | 2 +-
.../drm/panel/panel-olimex-lcd-olinuxino.c | 2 +-
drivers/gpu/drm/panel/panel-samsung-ld9040.c | 2 +-
drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c | 2 +-
drivers/gpu/drm/panel/panel-seiko-43wvf1g.c | 2 +-
drivers/gpu/drm/panel/panel-simple.c | 2 +-
.../gpu/drm/renesas/shmobile/shmob_drm_crtc.c | 2 +-
drivers/gpu/drm/xen/xen_drm_front_conn.c | 2 +-
include/drm/drm_modes.h | 2 +-
16 files changed, 67 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 22039a553a24..cda6dbadaa94 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -777,7 +777,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
}
}
- mode = drm_mode_create(dev);
+ mode = drm_mode_create();
if (!mode) {
ret = -ENOMEM;
goto out;
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 7f456e9c27a5..2a9a982da74e 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -3563,7 +3563,7 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_connector *connecto
goto set_size;
}
- mode = drm_mode_create(dev);
+ mode = drm_mode_create();
if (!mode)
return NULL;
@@ -6876,7 +6876,7 @@ static struct drm_display_mode *drm_mode_displayid_detailed(struct drm_device *d
bool hsync_positive = le16_to_cpu(timings->hsync) & (1 << 15);
bool vsync_positive = le16_to_cpu(timings->vsync) & (1 << 15);
- mode = drm_mode_create(dev);
+ mode = drm_mode_create();
if (!mode)
return NULL;
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 175bf3eef14b..049d77e75ddd 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -63,7 +63,6 @@ EXPORT_SYMBOL(drm_mode_debug_printmodeline);
/**
* drm_mode_create - create a new display mode
- * @dev: DRM device
*
* Create a new, cleared drm_display_mode with kzalloc, allocate an ID for it
* and return it.
@@ -71,7 +70,7 @@ EXPORT_SYMBOL(drm_mode_debug_printmodeline);
* Returns:
* Pointer to new mode on success, NULL on error.
*/
-struct drm_display_mode *drm_mode_create(struct drm_device *dev)
+struct drm_display_mode *drm_mode_create(void)
{
struct drm_display_mode *nmode;
@@ -577,7 +576,7 @@ struct drm_display_mode *drm_analog_tv_mode(struct drm_device *dev,
return NULL;
}
- mode = drm_mode_create(dev);
+ mode = drm_mode_create();
if (!mode)
return NULL;
@@ -646,7 +645,7 @@ struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay,
/* allocate the drm_display_mode structure. If failure, we will
* return directly
*/
- drm_mode = drm_mode_create(dev);
+ drm_mode = drm_mode_create();
if (!drm_mode)
return NULL;
@@ -881,7 +880,7 @@ drm_gtf_mode_complex(struct drm_device *dev, int hdisplay, int vdisplay,
if (!hdisplay || !vdisplay)
return NULL;
- drm_mode = drm_mode_create(dev);
+ drm_mode = drm_mode_create();
if (!drm_mode)
return NULL;
@@ -1458,7 +1457,7 @@ struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
{
struct drm_display_mode *nmode;
- nmode = drm_mode_create(dev);
+ nmode = drm_mode_create();
if (!nmode)
return NULL;
diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c
index b80540328150..78183809b4fb 100644
--- a/drivers/gpu/drm/exynos/exynos_dp.c
+++ b/drivers/gpu/drm/exynos/exynos_dp.c
@@ -68,6 +68,53 @@ static int exynos_dp_poweroff(struct analogix_dp_plat_data *plat_data)
return exynos_dp_crtc_clock_enable(plat_data, false);
}
+static int exynos_dp_get_modes(struct analogix_dp_plat_data *plat_data,
+ struct drm_connector *connector)
+{
+ struct exynos_dp_device *dp = to_dp(plat_data);
+ struct drm_display_mode *mode;
+
+ if (dp->plat_data.panel)
+ return 0;
+
+ mode = drm_mode_create();
+ if (!mode) {
+ DRM_DEV_ERROR(dp->dev,
+ "failed to create a new display mode.\n");
+ return 0;
+ }
+
+ drm_display_mode_from_videomode(&dp->vm, mode);
+ connector->display_info.width_mm = mode->width_mm;
+ connector->display_info.height_mm = mode->height_mm;
+
+ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
+ drm_mode_set_name(mode);
+ drm_mode_probed_add(connector, mode);
+
+ return 1;
+}
+
+static int exynos_dp_bridge_attach(struct analogix_dp_plat_data *plat_data,
+ struct drm_bridge *bridge,
+ struct drm_connector *connector)
+{
+ struct exynos_dp_device *dp = to_dp(plat_data);
+ int ret;
+
+ dp->connector = connector;
+
+ /* Pre-empt DP connector creation if there's a bridge */
+ if (dp->ptn_bridge) {
+ ret = drm_bridge_attach(&dp->encoder, dp->ptn_bridge, bridge,
+ 0);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
static void exynos_dp_mode_set(struct drm_encoder *encoder,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
index 0dc36df6ada3..391c831c87f8 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
@@ -69,7 +69,7 @@ static int exynos_dpi_get_modes(struct drm_connector *connector)
if (ctx->vm) {
struct drm_display_mode *mode;
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode) {
DRM_DEV_ERROR(ctx->dev,
"failed to create a new display mode\n");
diff --git a/drivers/gpu/drm/gud/gud_connector.c b/drivers/gpu/drm/gud/gud_connector.c
index ea0cca58b7c8..50315175d6d9 100644
--- a/drivers/gpu/drm/gud/gud_connector.c
+++ b/drivers/gpu/drm/gud/gud_connector.c
@@ -264,7 +264,7 @@ static int gud_connector_get_modes(struct drm_connector *connector)
for (i = 0; i < num_modes; i++) {
struct drm_display_mode *mode;
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode) {
num_modes = i;
goto out;
diff --git a/drivers/gpu/drm/i915/display/intel_tv.c b/drivers/gpu/drm/i915/display/intel_tv.c
index 0a926c6f25f4..071520565ddb 100644
--- a/drivers/gpu/drm/i915/display/intel_tv.c
+++ b/drivers/gpu/drm/i915/display/intel_tv.c
@@ -1807,7 +1807,7 @@ intel_tv_get_modes(struct drm_connector *connector)
input->h > intel_tv_mode_vdisplay(tv_mode))
continue;
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode)
continue;
diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/panel-edp.c
index aa27d6cd932e..21651a16d1ba 100644
--- a/drivers/gpu/drm/panel/panel-edp.c
+++ b/drivers/gpu/drm/panel/panel-edp.c
@@ -262,7 +262,7 @@ static unsigned int panel_edp_get_timings_modes(struct panel_edp *panel,
struct videomode vm;
videomode_from_timing(dt, &vm);
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode) {
dev_err(panel->base.dev, "failed to add mode %ux%u\n",
dt->hactive.typ, dt->vactive.typ);
diff --git a/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c b/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c
index 66f99982f360..fec0a29ce073 100644
--- a/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c
+++ b/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c
@@ -112,7 +112,7 @@ static int lcd_olinuxino_get_modes(struct drm_panel *panel,
lcd_mode = (struct lcd_olinuxino_mode *)
&lcd->eeprom.reserved[i * sizeof(*lcd_mode)];
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode) {
dev_err(panel->dev, "failed to add mode %ux%u@%u\n",
lcd_mode->hactive,
diff --git a/drivers/gpu/drm/panel/panel-samsung-ld9040.c b/drivers/gpu/drm/panel/panel-samsung-ld9040.c
index c7f2241523a0..727d92dafd75 100644
--- a/drivers/gpu/drm/panel/panel-samsung-ld9040.c
+++ b/drivers/gpu/drm/panel/panel-samsung-ld9040.c
@@ -267,7 +267,7 @@ static int ld9040_get_modes(struct drm_panel *panel,
struct ld9040 *ctx = panel_to_ld9040(panel);
struct drm_display_mode *mode;
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode) {
dev_err(panel->dev, "failed to create a new display mode\n");
return 0;
diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
index 1b5c500d4f4e..4b11784a8416 100644
--- a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
+++ b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
@@ -925,7 +925,7 @@ static int s6e8aa0_get_modes(struct drm_panel *panel,
struct s6e8aa0 *ctx = panel_to_s6e8aa0(panel);
struct drm_display_mode *mode;
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode) {
dev_err(panel->dev, "failed to create a new display mode\n");
return 0;
diff --git a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
index 0935d83ee2db..cea5843c00ca 100644
--- a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
+++ b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
@@ -69,7 +69,7 @@ static int seiko_panel_get_fixed_modes(struct seiko_panel *panel,
struct videomode vm;
videomode_from_timing(dt, &vm);
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode) {
dev_err(panel->base.dev, "failed to add mode %ux%u\n",
dt->hactive.typ, dt->vactive.typ);
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index c09bf3db5e78..811efddc29c1 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -180,7 +180,7 @@ static unsigned int panel_simple_get_timings_modes(struct panel_simple *panel,
struct videomode vm;
videomode_from_timing(dt, &vm);
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode) {
dev_err(panel->base.dev, "failed to add mode %ux%u\n",
dt->hactive.typ, dt->vactive.typ);
diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
index 1a2b9b68af6f..6c8f705b9541 100644
--- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
+++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
@@ -489,7 +489,7 @@ static int shmob_drm_connector_get_modes(struct drm_connector *connector)
struct shmob_drm_connector *scon = to_shmob_connector(connector);
struct drm_display_mode *mode;
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (mode == NULL)
return 0;
diff --git a/drivers/gpu/drm/xen/xen_drm_front_conn.c b/drivers/gpu/drm/xen/xen_drm_front_conn.c
index a1ba6d3d0568..8051d8976efa 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_conn.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_conn.c
@@ -67,7 +67,7 @@ static int connector_get_modes(struct drm_connector *connector)
struct videomode videomode;
int width, height;
- mode = drm_mode_create(connector->dev);
+ mode = drm_mode_create();
if (!mode)
return 0;
diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h
index b1d1ecb15f02..94e846ef38be 100644
--- a/include/drm/drm_modes.h
+++ b/include/drm/drm_modes.h
@@ -452,7 +452,7 @@ static inline bool drm_mode_is_stereo(const struct drm_display_mode *mode)
struct drm_connector;
struct drm_cmdline_mode;
-struct drm_display_mode *drm_mode_create(struct drm_device *dev);
+struct drm_display_mode *drm_mode_create(void);
void drm_mode_destroy(struct drm_display_mode *mode);
void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out,
const struct drm_display_mode *in);
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 3/3] gpu/drm: Add drm_notice logging when drm_mode_create fails
2026-07-06 13:34 ` [PATCH 0/3] drm: Remove unused *drm parameter Jan Niedziolka
2026-07-06 13:34 ` [PATCH 1/3] gpu/drm: Remove unused *dev parameter from drm_mode_destroy function Jan Niedziolka
2026-07-06 13:34 ` [PATCH 2/3] gpu/drm: Remove unused 'drm device *dev' parameter from drm_mode_create() Jan Niedziolka
@ 2026-07-06 13:34 ` Jan Niedziolka
2026-07-06 13:58 ` sashiko-bot
2 siblings, 1 reply; 7+ messages in thread
From: Jan Niedziolka @ 2026-07-06 13:34 UTC (permalink / raw)
To: maarten.lankhorst, mripard, tzimmermann, airlied, simona,
k.tegowski
Cc: dri-devel, linux-kernel, a.fijalko, bartlomiej.k, Jan Niedziolka
Add logging to have it printed when mode creating fails. As the NULL return has
been present here for a long time, it's better to keep it as it is. However, a
simple drm_notice() print should be helpful when such fail happens.
At the same time, adding drm_notice() to drm_mode_duplicate() allows making use
of *dev parameter and at the same time, keeps the further drm_mode_duplicate()
references stable.
It's a matter of discussion whether NULL or error code should be returned - the
latter might be more elegant and secure, but introducing it would mean breaking
internal API (current references). It's a cost which might be considered, if
needed.
Signed-off-by: Jan Niedziolka <j.niedziolka@samsung.com>
---
drivers/gpu/drm/drm_modes.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 049d77e75ddd..fc6d974e3948 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -646,8 +646,10 @@ struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay,
* return directly
*/
drm_mode = drm_mode_create();
- if (!drm_mode)
+ if (!drm_mode) {
+ drm_notice(dev, "Failed to create a new display mode\n");
return NULL;
+ }
/* the CVT default refresh rate is 60Hz */
if (!vrefresh)
@@ -881,8 +883,10 @@ drm_gtf_mode_complex(struct drm_device *dev, int hdisplay, int vdisplay,
return NULL;
drm_mode = drm_mode_create();
- if (!drm_mode)
+ if (!drm_mode) {
+ drm_notice(dev, "Failed to create a new display mode\n");
return NULL;
+ }
/* 1. In order to give correct results, the number of horizontal
* pixels requested is first processed to ensure that it is divisible
@@ -1458,8 +1462,10 @@ struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
struct drm_display_mode *nmode;
nmode = drm_mode_create();
- if (!nmode)
+ if (!nmode) {
+ drm_notice(dev, "Failed to create a new display mode\n");
return NULL;
+ }
drm_mode_copy(nmode, mode);
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread