mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
drm/nouveau: implement missing DCB connector types; gracefully handle unknown connectors
* Implement missing DCB connectors in uconn.c previously defined in conn.h.
* Replace kernel WARN_ON macro with printk message to more gracefully signify
an unknown connector was encountered.
With this patch, unknown connectors are explicitly marked with value 0
(DCB_CONNECTOR_VGA) to match the tested current behavior. Although 0xff
(DCB_CONNECTOR_NONE) may be more suitable, I don't want to introduce a
breaking change.
Fixes: 8b7d92cad9 ("drm/nouveau/kms/nv50-: create connectors based on nvkm info")
Link: https://download.nvidia.com/open-gpu-doc/DCB/1/DCB-4.0-Specification.html#_connector_table_entry
Signed-off-by: Alex Ramírez <lxrmrz732@rocketmail.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
[Lyude: Remove unneeded parenthesis around nvkm_warn()]
Signed-off-by: Lyude Paul <lyude@redhat.com>
Link: https://patch.msgid.link/20251213005327.9495-3-lxrmrz732@gmail.com
This commit is contained in:
parent
3036b4ce4b
commit
d0bd10792d
|
|
@ -191,27 +191,60 @@ nvkm_uconn_new(const struct nvkm_oclass *oclass, void *argv, u32 argc, struct nv
|
|||
spin_lock(&disp->client.lock);
|
||||
if (!conn->object.func) {
|
||||
switch (conn->info.type) {
|
||||
case DCB_CONNECTOR_VGA : args->v0.type = NVIF_CONN_V0_VGA; break;
|
||||
case DCB_CONNECTOR_TV_0 :
|
||||
case DCB_CONNECTOR_TV_1 :
|
||||
case DCB_CONNECTOR_TV_3 : args->v0.type = NVIF_CONN_V0_TV; break;
|
||||
case DCB_CONNECTOR_DMS59_0 :
|
||||
case DCB_CONNECTOR_DMS59_1 :
|
||||
case DCB_CONNECTOR_DVI_I : args->v0.type = NVIF_CONN_V0_DVI_I; break;
|
||||
case DCB_CONNECTOR_DVI_D : args->v0.type = NVIF_CONN_V0_DVI_D; break;
|
||||
case DCB_CONNECTOR_LVDS : args->v0.type = NVIF_CONN_V0_LVDS; break;
|
||||
case DCB_CONNECTOR_LVDS_SPWG: args->v0.type = NVIF_CONN_V0_LVDS_SPWG; break;
|
||||
case DCB_CONNECTOR_DMS59_DP0:
|
||||
case DCB_CONNECTOR_DMS59_DP1:
|
||||
case DCB_CONNECTOR_DP :
|
||||
case DCB_CONNECTOR_mDP :
|
||||
case DCB_CONNECTOR_USB_C : args->v0.type = NVIF_CONN_V0_DP; break;
|
||||
case DCB_CONNECTOR_eDP : args->v0.type = NVIF_CONN_V0_EDP; break;
|
||||
case DCB_CONNECTOR_HDMI_0 :
|
||||
case DCB_CONNECTOR_HDMI_1 :
|
||||
case DCB_CONNECTOR_HDMI_C : args->v0.type = NVIF_CONN_V0_HDMI; break;
|
||||
/* VGA */
|
||||
case DCB_CONNECTOR_DVI_A :
|
||||
case DCB_CONNECTOR_POD_VGA :
|
||||
case DCB_CONNECTOR_VGA : args->v0.type = NVIF_CONN_V0_VGA; break;
|
||||
|
||||
/* TV */
|
||||
case DCB_CONNECTOR_TV_0 :
|
||||
case DCB_CONNECTOR_TV_1 :
|
||||
case DCB_CONNECTOR_TV_2 :
|
||||
case DCB_CONNECTOR_TV_SCART :
|
||||
case DCB_CONNECTOR_TV_SCART_D :
|
||||
case DCB_CONNECTOR_TV_DTERM :
|
||||
case DCB_CONNECTOR_POD_TV_3 :
|
||||
case DCB_CONNECTOR_POD_TV_1 :
|
||||
case DCB_CONNECTOR_POD_TV_0 :
|
||||
case DCB_CONNECTOR_TV_3 : args->v0.type = NVIF_CONN_V0_TV; break;
|
||||
|
||||
/* DVI */
|
||||
case DCB_CONNECTOR_DVI_I_TV_1 :
|
||||
case DCB_CONNECTOR_DVI_I_TV_0 :
|
||||
case DCB_CONNECTOR_DVI_I_TV_2 :
|
||||
case DCB_CONNECTOR_DVI_ADC :
|
||||
case DCB_CONNECTOR_DMS59_0 :
|
||||
case DCB_CONNECTOR_DMS59_1 :
|
||||
case DCB_CONNECTOR_DVI_I : args->v0.type = NVIF_CONN_V0_DVI_I; break;
|
||||
case DCB_CONNECTOR_TMDS :
|
||||
case DCB_CONNECTOR_DVI_D : args->v0.type = NVIF_CONN_V0_DVI_D; break;
|
||||
|
||||
/* LVDS */
|
||||
case DCB_CONNECTOR_LVDS : args->v0.type = NVIF_CONN_V0_LVDS; break;
|
||||
case DCB_CONNECTOR_LVDS_SPWG : args->v0.type = NVIF_CONN_V0_LVDS_SPWG; break;
|
||||
|
||||
/* DP */
|
||||
case DCB_CONNECTOR_DMS59_DP0 :
|
||||
case DCB_CONNECTOR_DMS59_DP1 :
|
||||
case DCB_CONNECTOR_DP :
|
||||
case DCB_CONNECTOR_mDP :
|
||||
case DCB_CONNECTOR_USB_C : args->v0.type = NVIF_CONN_V0_DP; break;
|
||||
case DCB_CONNECTOR_eDP : args->v0.type = NVIF_CONN_V0_EDP; break;
|
||||
|
||||
/* HDMI */
|
||||
case DCB_CONNECTOR_HDMI_0 :
|
||||
case DCB_CONNECTOR_HDMI_1 :
|
||||
case DCB_CONNECTOR_HDMI_C : args->v0.type = NVIF_CONN_V0_HDMI; break;
|
||||
|
||||
/*
|
||||
* Dock & unused outputs.
|
||||
* BNC, SPDIF, WFD, and detached LVDS go here.
|
||||
*/
|
||||
default:
|
||||
WARN_ON(1);
|
||||
nvkm_warn(&disp->engine.subdev,
|
||||
"unimplemented connector type 0x%02x\n",
|
||||
conn->info.type);
|
||||
args->v0.type = NVIF_CONN_V0_VGA;
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user