summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/display
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2025-11-07 05:40:51 +0300
committerDave Airlie <airlied@redhat.com>2025-11-07 05:41:26 +0300
commite237dfe70867f02de223e36340fe5f8b0fe0eada (patch)
treea1c87e496d1592e79e653bba7a0e32537f48bea6 /drivers/gpu/drm/display
parent8f037e11d070a38d143b85d72d369190514dca99 (diff)
parent6126a7f27f002408803f3fc50ff610699e57601d (diff)
downloadlinux-e237dfe70867f02de223e36340fe5f8b0fe0eada.tar.xz
Merge tag 'drm-misc-next-2025-11-05-1' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-next
drm-misc-next for v6.19-rc1: UAPI Changes: - Add userptr support to ivpu. - Add IOCTL's for resource and telemetry data in amdxdna. Core Changes: - Improve some atomic state checking handling. - drm/client updates. - Use forward declarations instead of including drm_print.h - RUse allocation flags in ttm_pool/device_init and allow specifying max useful pool size and propagate ENOSPC. - Updates and fixes to scheduler and bridge code. - Add support for quirking DisplayID checksum errors. Driver Changes: - Assorted cleanups and fixes in rcar-du, accel/ivpu, panel/nv3052cf, sti, imxm, accel/qaic, accel/amdxdna, imagination, tidss, sti, panthor, vkms. - Add Samsung S6E3FC2X01 DDIC/AMS641RW, Synaptics TDDI series DSI, TL121BVMS07-00 (IL79900A) panels. - Add mali MediaTek MT8196 SoC gpu support. - Add etnaviv GC8000 Nano Ultra VIP r6205 support. - Document powervr ge7800 support in the devicetree. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patch.msgid.link/5afae707-c9aa-4a47-b726-5e1f1aa7a106@linux.intel.com
Diffstat (limited to 'drivers/gpu/drm/display')
-rw-r--r--drivers/gpu/drm/display/drm_bridge_connector.c92
1 files changed, 39 insertions, 53 deletions
diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/drm/display/drm_bridge_connector.c
index 7b18be3ff9a3..a2d30cf9e06d 100644
--- a/drivers/gpu/drm/display/drm_bridge_connector.c
+++ b/drivers/gpu/drm/display/drm_bridge_connector.c
@@ -652,15 +652,7 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
struct drm_bridge_connector *bridge_connector;
struct drm_connector *connector;
struct i2c_adapter *ddc = NULL;
- struct drm_bridge *panel_bridge __free(drm_bridge_put) = NULL;
- struct drm_bridge *bridge_edid __free(drm_bridge_put) = NULL;
- struct drm_bridge *bridge_hpd __free(drm_bridge_put) = NULL;
- struct drm_bridge *bridge_detect __free(drm_bridge_put) = NULL;
- struct drm_bridge *bridge_modes __free(drm_bridge_put) = NULL;
- struct drm_bridge *bridge_hdmi __free(drm_bridge_put) = NULL;
- struct drm_bridge *bridge_hdmi_audio __free(drm_bridge_put) = NULL;
- struct drm_bridge *bridge_dp_audio __free(drm_bridge_put) = NULL;
- struct drm_bridge *bridge_hdmi_cec __free(drm_bridge_put) = NULL;
+ struct drm_bridge *panel_bridge __free(drm_bridge_put) = NULL;
unsigned int supported_formats = BIT(HDMI_COLORSPACE_RGB);
unsigned int max_bpc = 8;
bool support_hdcp = false;
@@ -699,29 +691,29 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
connector->ycbcr_420_allowed = false;
if (bridge->ops & DRM_BRIDGE_OP_EDID) {
- drm_bridge_put(bridge_edid);
- bridge_edid = drm_bridge_get(bridge);
+ drm_bridge_put(bridge_connector->bridge_edid);
+ bridge_connector->bridge_edid = drm_bridge_get(bridge);
}
if (bridge->ops & DRM_BRIDGE_OP_HPD) {
- drm_bridge_put(bridge_hpd);
- bridge_hpd = drm_bridge_get(bridge);
+ drm_bridge_put(bridge_connector->bridge_hpd);
+ bridge_connector->bridge_hpd = drm_bridge_get(bridge);
}
if (bridge->ops & DRM_BRIDGE_OP_DETECT) {
- drm_bridge_put(bridge_detect);
- bridge_detect = drm_bridge_get(bridge);
+ drm_bridge_put(bridge_connector->bridge_detect);
+ bridge_connector->bridge_detect = drm_bridge_get(bridge);
}
if (bridge->ops & DRM_BRIDGE_OP_MODES) {
- drm_bridge_put(bridge_modes);
- bridge_modes = drm_bridge_get(bridge);
+ drm_bridge_put(bridge_connector->bridge_modes);
+ bridge_connector->bridge_modes = drm_bridge_get(bridge);
}
if (bridge->ops & DRM_BRIDGE_OP_HDMI) {
- if (bridge_hdmi)
+ if (bridge_connector->bridge_hdmi)
return ERR_PTR(-EBUSY);
if (!bridge->funcs->hdmi_write_infoframe ||
!bridge->funcs->hdmi_clear_infoframe)
return ERR_PTR(-EINVAL);
- bridge_hdmi = drm_bridge_get(bridge);
+ bridge_connector->bridge_hdmi = drm_bridge_get(bridge);
if (bridge->supported_formats)
supported_formats = bridge->supported_formats;
@@ -730,10 +722,10 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
}
if (bridge->ops & DRM_BRIDGE_OP_HDMI_AUDIO) {
- if (bridge_hdmi_audio)
+ if (bridge_connector->bridge_hdmi_audio)
return ERR_PTR(-EBUSY);
- if (bridge_dp_audio)
+ if (bridge_connector->bridge_dp_audio)
return ERR_PTR(-EBUSY);
if (!bridge->hdmi_audio_max_i2s_playback_channels &&
@@ -744,14 +736,14 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
!bridge->funcs->hdmi_audio_shutdown)
return ERR_PTR(-EINVAL);
- bridge_hdmi_audio = drm_bridge_get(bridge);
+ bridge_connector->bridge_hdmi_audio = drm_bridge_get(bridge);
}
if (bridge->ops & DRM_BRIDGE_OP_DP_AUDIO) {
- if (bridge_dp_audio)
+ if (bridge_connector->bridge_dp_audio)
return ERR_PTR(-EBUSY);
- if (bridge_hdmi_audio)
+ if (bridge_connector->bridge_hdmi_audio)
return ERR_PTR(-EBUSY);
if (!bridge->hdmi_audio_max_i2s_playback_channels &&
@@ -762,21 +754,21 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
!bridge->funcs->dp_audio_shutdown)
return ERR_PTR(-EINVAL);
- bridge_dp_audio = drm_bridge_get(bridge);
+ bridge_connector->bridge_dp_audio = drm_bridge_get(bridge);
}
if (bridge->ops & DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER) {
if (bridge_connector->bridge_hdmi_cec)
return ERR_PTR(-EBUSY);
- bridge_connector->bridge_hdmi_cec = bridge;
+ bridge_connector->bridge_hdmi_cec = drm_bridge_get(bridge);
}
if (bridge->ops & DRM_BRIDGE_OP_HDMI_CEC_ADAPTER) {
- if (bridge_hdmi_cec)
+ if (bridge_connector->bridge_hdmi_cec)
return ERR_PTR(-EBUSY);
- bridge_hdmi_cec = drm_bridge_get(bridge);
+ bridge_connector->bridge_hdmi_cec = drm_bridge_get(bridge);
if (!bridge->funcs->hdmi_cec_enable ||
!bridge->funcs->hdmi_cec_log_addr ||
@@ -795,8 +787,10 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
if (bridge->ddc)
ddc = bridge->ddc;
- if (drm_bridge_is_panel(bridge))
+ if (drm_bridge_is_panel(bridge)) {
+ drm_bridge_put(panel_bridge);
panel_bridge = drm_bridge_get(bridge);
+ }
if (bridge->support_hdcp)
support_hdcp = true;
@@ -805,13 +799,13 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
if (connector_type == DRM_MODE_CONNECTOR_Unknown)
return ERR_PTR(-EINVAL);
- if (bridge_hdmi) {
+ if (bridge_connector->bridge_hdmi) {
if (!connector->ycbcr_420_allowed)
supported_formats &= ~BIT(HDMI_COLORSPACE_YUV420);
ret = drmm_connector_hdmi_init(drm, connector,
- bridge_hdmi->vendor,
- bridge_hdmi->product,
+ bridge_connector->bridge_hdmi->vendor,
+ bridge_connector->bridge_hdmi->product,
&drm_bridge_connector_funcs,
&drm_bridge_connector_hdmi_funcs,
connector_type, ddc,
@@ -827,14 +821,15 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
return ERR_PTR(ret);
}
- if (bridge_hdmi_audio || bridge_dp_audio) {
+ if (bridge_connector->bridge_hdmi_audio ||
+ bridge_connector->bridge_dp_audio) {
struct device *dev;
struct drm_bridge *bridge;
- if (bridge_hdmi_audio)
- bridge = bridge_hdmi_audio;
+ if (bridge_connector->bridge_hdmi_audio)
+ bridge = bridge_connector->bridge_hdmi_audio;
else
- bridge = bridge_dp_audio;
+ bridge = bridge_connector->bridge_dp_audio;
dev = bridge->hdmi_audio_dev;
@@ -848,9 +843,9 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
return ERR_PTR(ret);
}
- if (bridge_hdmi_cec &&
- bridge_hdmi_cec->ops & DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER) {
- struct drm_bridge *bridge = bridge_hdmi_cec;
+ if (bridge_connector->bridge_hdmi_cec &&
+ bridge_connector->bridge_hdmi_cec->ops & DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER) {
+ struct drm_bridge *bridge = bridge_connector->bridge_hdmi_cec;
ret = drmm_connector_hdmi_cec_notifier_register(connector,
NULL,
@@ -859,9 +854,9 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
return ERR_PTR(ret);
}
- if (bridge_hdmi_cec &&
- bridge_hdmi_cec->ops & DRM_BRIDGE_OP_HDMI_CEC_ADAPTER) {
- struct drm_bridge *bridge = bridge_hdmi_cec;
+ if (bridge_connector->bridge_hdmi_cec &&
+ bridge_connector->bridge_hdmi_cec->ops & DRM_BRIDGE_OP_HDMI_CEC_ADAPTER) {
+ struct drm_bridge *bridge = bridge_connector->bridge_hdmi_cec;
ret = drmm_connector_hdmi_cec_register(connector,
&drm_bridge_connector_hdmi_cec_funcs,
@@ -874,9 +869,9 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs);
- if (bridge_hpd)
+ if (bridge_connector->bridge_hpd)
connector->polled = DRM_CONNECTOR_POLL_HPD;
- else if (bridge_detect)
+ else if (bridge_connector->bridge_detect)
connector->polled = DRM_CONNECTOR_POLL_CONNECT
| DRM_CONNECTOR_POLL_DISCONNECT;
@@ -887,15 +882,6 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
IS_ENABLED(CONFIG_DRM_DISPLAY_HDCP_HELPER))
drm_connector_attach_content_protection_property(connector, true);
- bridge_connector->bridge_edid = drm_bridge_get(bridge_edid);
- bridge_connector->bridge_hpd = drm_bridge_get(bridge_hpd);
- bridge_connector->bridge_detect = drm_bridge_get(bridge_detect);
- bridge_connector->bridge_modes = drm_bridge_get(bridge_modes);
- bridge_connector->bridge_hdmi = drm_bridge_get(bridge_hdmi);
- bridge_connector->bridge_hdmi_audio = drm_bridge_get(bridge_hdmi_audio);
- bridge_connector->bridge_dp_audio = drm_bridge_get(bridge_dp_audio);
- bridge_connector->bridge_hdmi_cec = drm_bridge_get(bridge_hdmi_cec);
-
return connector;
}
EXPORT_SYMBOL_GPL(drm_bridge_connector_init);