mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 10:41:49 +02:00
drm-msic-fixes for v6.19:
imagination: - sync wait for logtype update completion to ensure FW trace is available bridge/synopsis: - Fix error paths in dw_dp_bind nouveau: - Add and implement missing DSB connector types, and improve unknown connector handling. - Set missing atomic function ops. intel/display, amd, vkms: - (intel) Place 3D lut at correct place in colorops pipeline. - (all) Fix a leak during device init where strings were leaked. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEuXvWqAysSYEJGuVH/lWMcqZwE8MFAmlx79kACgkQ/lWMcqZw E8MchQ/+KUw7LhBjW/nYnAi6NPKYAFyZ1C+5SmKbUp7WdqmN7Qeauzpw+ElcF/mf XyG7UZLUwkCo8V3y7ePqOwkGONZmJB6xts17H7/qc067yQ9OftrKSzgtdNv1D4v9 u7MRVrmjBhJLnAAbCqxdKb2x65O564gUmtkIXLgwDzblmzxE453Oea5GCmKGwXZO cGrJYlFQi0oLF3pc3pI4Vt0Ada1YOy1T2MNI4SuA5Hk6HcPPnriX8Ao7DM2nyYcJ +qmk/OVkIkT8MfMNY7sERd75Zk0CeRfrc0iikKT9BLiq0tdpGLo64uiswyp8A8ku pMAZc+ExgRiw9JNW6zf3FcuDtszQhYsWQ45/CG2uyuBhU6CReVHroxg7/TAI8Q8P 51gfKQFz8rEyg40nwNG7ryRC+IuWiUjW8Htl8WeRmuxf3JyQObdD8S7QuBIZRhub xz1j5C/hQCCSjfDYPF4q8dEohQ+tQMoIi6m3gzdovsd1bcXTl8e/jScpH0rs0GrV yAQDKM4GOK/8ilj0rnTpNdBEwqT1cPByIW7HQGz87zUAZhcl3jMeBmzXapCbPJnI vqFIeDWtbb3AcJpRtzybR8U1+wFNYE7mzOkwekJ1J930J59NuL7Rs7RCVm+MXTi2 VB6hNIqZPP0kbbPvNZYuB5622rOuVB5VH2GniRxFK8yBdt8kMhk= =kwm3 -----END PGP SIGNATURE----- Merge tag 'drm-misc-fixes-2026-01-22' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-fixes drm-msic-fixes for v6.19: imagination: - sync wait for logtype update completion to ensure FW trace is available bridge/synopsis: - Fix error paths in dw_dp_bind nouveau: - Add and implement missing DSB connector types, and improve unknown connector handling. - Set missing atomic function ops. intel/display, amd, vkms: - (intel) Place 3D lut at correct place in colorops pipeline. - (all) Fix a leak during device init where strings were leaked. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patch.msgid.link/4c2f66df-c990-448a-b466-99a66981272b@linux.intel.com
This commit is contained in:
commit
353f91bc25
|
|
@ -79,7 +79,6 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
|
|||
goto cleanup;
|
||||
|
||||
list->type = ops[i]->base.id;
|
||||
list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", ops[i]->base.id);
|
||||
|
||||
i++;
|
||||
|
||||
|
|
@ -197,6 +196,9 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
|
|||
goto cleanup;
|
||||
|
||||
drm_colorop_set_next_property(ops[i-1], ops[i]);
|
||||
|
||||
list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", ops[0]->base.id);
|
||||
|
||||
return 0;
|
||||
|
||||
cleanup:
|
||||
|
|
|
|||
|
|
@ -1790,12 +1790,13 @@ dm_atomic_plane_get_property(struct drm_plane *plane,
|
|||
static int
|
||||
dm_plane_init_colorops(struct drm_plane *plane)
|
||||
{
|
||||
struct drm_prop_enum_list pipelines[MAX_COLOR_PIPELINES];
|
||||
struct drm_prop_enum_list pipelines[MAX_COLOR_PIPELINES] = {};
|
||||
struct drm_device *dev = plane->dev;
|
||||
struct amdgpu_device *adev = drm_to_adev(dev);
|
||||
struct dc *dc = adev->dm.dc;
|
||||
int len = 0;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
int i;
|
||||
|
||||
if (plane->type == DRM_PLANE_TYPE_CURSOR)
|
||||
return 0;
|
||||
|
|
@ -1806,7 +1807,7 @@ dm_plane_init_colorops(struct drm_plane *plane)
|
|||
if (ret) {
|
||||
drm_err(plane->dev, "Failed to create color pipeline for plane %d: %d\n",
|
||||
plane->base.id, ret);
|
||||
return ret;
|
||||
goto out;
|
||||
}
|
||||
len++;
|
||||
|
||||
|
|
@ -1814,7 +1815,11 @@ dm_plane_init_colorops(struct drm_plane *plane)
|
|||
drm_plane_create_color_pipeline_property(plane, pipelines, len);
|
||||
}
|
||||
|
||||
return 0;
|
||||
out:
|
||||
for (i = 0; i < len; i++)
|
||||
kfree(pipelines[i].name);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -2062,33 +2062,41 @@ struct dw_dp *dw_dp_bind(struct device *dev, struct drm_encoder *encoder,
|
|||
}
|
||||
|
||||
ret = drm_bridge_attach(encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_err_probe(dev, ret, "Failed to attach bridge\n");
|
||||
goto unregister_aux;
|
||||
}
|
||||
|
||||
dw_dp_init_hw(dp);
|
||||
|
||||
ret = phy_init(dp->phy);
|
||||
if (ret) {
|
||||
dev_err_probe(dev, ret, "phy init failed\n");
|
||||
return ERR_PTR(ret);
|
||||
goto unregister_aux;
|
||||
}
|
||||
|
||||
ret = devm_add_action_or_reset(dev, dw_dp_phy_exit, dp);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
goto unregister_aux;
|
||||
|
||||
dp->irq = platform_get_irq(pdev, 0);
|
||||
if (dp->irq < 0)
|
||||
return ERR_PTR(ret);
|
||||
if (dp->irq < 0) {
|
||||
ret = dp->irq;
|
||||
goto unregister_aux;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(dev, dp->irq, NULL, dw_dp_irq,
|
||||
IRQF_ONESHOT, dev_name(dev), dp);
|
||||
if (ret) {
|
||||
dev_err_probe(dev, ret, "failed to request irq\n");
|
||||
return ERR_PTR(ret);
|
||||
goto unregister_aux;
|
||||
}
|
||||
|
||||
return dp;
|
||||
|
||||
unregister_aux:
|
||||
drm_dp_aux_unregister(&dp->aux);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dw_dp_bind);
|
||||
|
||||
|
|
|
|||
|
|
@ -34,11 +34,19 @@ int _intel_color_pipeline_plane_init(struct drm_plane *plane, struct drm_prop_en
|
|||
return ret;
|
||||
|
||||
list->type = colorop->base.base.id;
|
||||
list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", colorop->base.base.id);
|
||||
|
||||
/* TODO: handle failures and clean up */
|
||||
prev_op = &colorop->base;
|
||||
|
||||
colorop = intel_colorop_create(INTEL_PLANE_CB_CSC);
|
||||
ret = drm_plane_colorop_ctm_3x4_init(dev, &colorop->base, plane,
|
||||
DRM_COLOROP_FLAG_ALLOW_BYPASS);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
drm_colorop_set_next_property(prev_op, &colorop->base);
|
||||
prev_op = &colorop->base;
|
||||
|
||||
if (DISPLAY_VER(display) >= 35 &&
|
||||
intel_color_crtc_has_3dlut(display, pipe) &&
|
||||
plane->type == DRM_PLANE_TYPE_PRIMARY) {
|
||||
|
|
@ -55,15 +63,6 @@ int _intel_color_pipeline_plane_init(struct drm_plane *plane, struct drm_prop_en
|
|||
prev_op = &colorop->base;
|
||||
}
|
||||
|
||||
colorop = intel_colorop_create(INTEL_PLANE_CB_CSC);
|
||||
ret = drm_plane_colorop_ctm_3x4_init(dev, &colorop->base, plane,
|
||||
DRM_COLOROP_FLAG_ALLOW_BYPASS);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
drm_colorop_set_next_property(prev_op, &colorop->base);
|
||||
prev_op = &colorop->base;
|
||||
|
||||
colorop = intel_colorop_create(INTEL_PLANE_CB_POST_CSC_LUT);
|
||||
ret = drm_plane_colorop_curve_1d_lut_init(dev, &colorop->base, plane,
|
||||
PLANE_GAMMA_SIZE,
|
||||
|
|
@ -74,6 +73,8 @@ int _intel_color_pipeline_plane_init(struct drm_plane *plane, struct drm_prop_en
|
|||
|
||||
drm_colorop_set_next_property(prev_op, &colorop->base);
|
||||
|
||||
list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", list->type);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -81,9 +82,10 @@ int intel_color_pipeline_plane_init(struct drm_plane *plane, enum pipe pipe)
|
|||
{
|
||||
struct drm_device *dev = plane->dev;
|
||||
struct intel_display *display = to_intel_display(dev);
|
||||
struct drm_prop_enum_list pipelines[MAX_COLOR_PIPELINES];
|
||||
struct drm_prop_enum_list pipelines[MAX_COLOR_PIPELINES] = {};
|
||||
int len = 0;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
int i;
|
||||
|
||||
/* Currently expose pipeline only for HDR planes */
|
||||
if (!icl_is_hdr_plane(display, to_intel_plane(plane)->id))
|
||||
|
|
@ -92,8 +94,14 @@ int intel_color_pipeline_plane_init(struct drm_plane *plane, enum pipe pipe)
|
|||
/* Add pipeline consisting of transfer functions */
|
||||
ret = _intel_color_pipeline_plane_init(plane, &pipelines[len], pipe);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto out;
|
||||
len++;
|
||||
|
||||
return drm_plane_create_color_pipeline_property(plane, pipelines, len);
|
||||
ret = drm_plane_create_color_pipeline_property(plane, pipelines, len);
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
kfree(pipelines[i].name);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@ update_logtype(struct pvr_device *pvr_dev, u32 group_mask)
|
|||
struct rogue_fwif_kccb_cmd cmd;
|
||||
int idx;
|
||||
int err;
|
||||
int slot;
|
||||
|
||||
if (group_mask)
|
||||
fw_trace->tracebuf_ctrl->log_type = ROGUE_FWIF_LOG_TYPE_TRACE | group_mask;
|
||||
|
|
@ -154,8 +155,13 @@ update_logtype(struct pvr_device *pvr_dev, u32 group_mask)
|
|||
cmd.cmd_type = ROGUE_FWIF_KCCB_CMD_LOGTYPE_UPDATE;
|
||||
cmd.kccb_flags = 0;
|
||||
|
||||
err = pvr_kccb_send_cmd(pvr_dev, &cmd, NULL);
|
||||
err = pvr_kccb_send_cmd(pvr_dev, &cmd, &slot);
|
||||
if (err)
|
||||
goto err_drm_dev_exit;
|
||||
|
||||
err = pvr_kccb_wait_for_completion(pvr_dev, slot, HZ, NULL);
|
||||
|
||||
err_drm_dev_exit:
|
||||
drm_dev_exit(idx);
|
||||
|
||||
err_up_read:
|
||||
|
|
|
|||
|
|
@ -1,28 +1,81 @@
|
|||
/* SPDX-License-Identifier: MIT */
|
||||
#ifndef __NVBIOS_CONN_H__
|
||||
#define __NVBIOS_CONN_H__
|
||||
|
||||
/*
|
||||
* An enumerator representing all of the possible VBIOS connector types defined
|
||||
* by Nvidia at
|
||||
* https://nvidia.github.io/open-gpu-doc/DCB/DCB-4.x-Specification.html.
|
||||
*
|
||||
* [1] Nvidia's documentation actually claims DCB_CONNECTOR_HDMI_0 is a "3-Pin
|
||||
* DIN Stereo Connector". This seems very likely to be a documentation typo
|
||||
* or some sort of funny historical baggage, because we've treated this
|
||||
* connector type as HDMI for years without issue.
|
||||
* TODO: Check with Nvidia what's actually happening here.
|
||||
*/
|
||||
enum dcb_connector_type {
|
||||
DCB_CONNECTOR_VGA = 0x00,
|
||||
DCB_CONNECTOR_TV_0 = 0x10,
|
||||
DCB_CONNECTOR_TV_1 = 0x11,
|
||||
DCB_CONNECTOR_TV_3 = 0x13,
|
||||
DCB_CONNECTOR_DVI_I = 0x30,
|
||||
DCB_CONNECTOR_DVI_D = 0x31,
|
||||
DCB_CONNECTOR_DMS59_0 = 0x38,
|
||||
DCB_CONNECTOR_DMS59_1 = 0x39,
|
||||
DCB_CONNECTOR_LVDS = 0x40,
|
||||
DCB_CONNECTOR_LVDS_SPWG = 0x41,
|
||||
DCB_CONNECTOR_DP = 0x46,
|
||||
DCB_CONNECTOR_eDP = 0x47,
|
||||
DCB_CONNECTOR_mDP = 0x48,
|
||||
DCB_CONNECTOR_HDMI_0 = 0x60,
|
||||
DCB_CONNECTOR_HDMI_1 = 0x61,
|
||||
DCB_CONNECTOR_HDMI_C = 0x63,
|
||||
DCB_CONNECTOR_DMS59_DP0 = 0x64,
|
||||
DCB_CONNECTOR_DMS59_DP1 = 0x65,
|
||||
DCB_CONNECTOR_WFD = 0x70,
|
||||
DCB_CONNECTOR_USB_C = 0x71,
|
||||
DCB_CONNECTOR_NONE = 0xff
|
||||
/* Analog outputs */
|
||||
DCB_CONNECTOR_VGA = 0x00, // VGA 15-pin connector
|
||||
DCB_CONNECTOR_DVI_A = 0x01, // DVI-A
|
||||
DCB_CONNECTOR_POD_VGA = 0x02, // Pod - VGA 15-pin connector
|
||||
DCB_CONNECTOR_TV_0 = 0x10, // TV - Composite Out
|
||||
DCB_CONNECTOR_TV_1 = 0x11, // TV - S-Video Out
|
||||
DCB_CONNECTOR_TV_2 = 0x12, // TV - S-Video Breakout - Composite
|
||||
DCB_CONNECTOR_TV_3 = 0x13, // HDTV Component - YPrPb
|
||||
DCB_CONNECTOR_TV_SCART = 0x14, // TV - SCART Connector
|
||||
DCB_CONNECTOR_TV_SCART_D = 0x16, // TV - Composite SCART over D-connector
|
||||
DCB_CONNECTOR_TV_DTERM = 0x17, // HDTV - D-connector (EIAJ4120)
|
||||
DCB_CONNECTOR_POD_TV_3 = 0x18, // Pod - HDTV - YPrPb
|
||||
DCB_CONNECTOR_POD_TV_1 = 0x19, // Pod - S-Video
|
||||
DCB_CONNECTOR_POD_TV_0 = 0x1a, // Pod - Composite
|
||||
|
||||
/* DVI digital outputs */
|
||||
DCB_CONNECTOR_DVI_I_TV_1 = 0x20, // DVI-I-TV-S-Video
|
||||
DCB_CONNECTOR_DVI_I_TV_0 = 0x21, // DVI-I-TV-Composite
|
||||
DCB_CONNECTOR_DVI_I_TV_2 = 0x22, // DVI-I-TV-S-Video Breakout-Composite
|
||||
DCB_CONNECTOR_DVI_I = 0x30, // DVI-I
|
||||
DCB_CONNECTOR_DVI_D = 0x31, // DVI-D
|
||||
DCB_CONNECTOR_DVI_ADC = 0x32, // Apple Display Connector (ADC)
|
||||
DCB_CONNECTOR_DMS59_0 = 0x38, // LFH-DVI-I-1
|
||||
DCB_CONNECTOR_DMS59_1 = 0x39, // LFH-DVI-I-2
|
||||
DCB_CONNECTOR_BNC = 0x3c, // BNC Connector [for SDI?]
|
||||
|
||||
/* LVDS / TMDS digital outputs */
|
||||
DCB_CONNECTOR_LVDS = 0x40, // LVDS-SPWG-Attached [is this name correct?]
|
||||
DCB_CONNECTOR_LVDS_SPWG = 0x41, // LVDS-OEM-Attached (non-removable)
|
||||
DCB_CONNECTOR_LVDS_REM = 0x42, // LVDS-SPWG-Detached [following naming above]
|
||||
DCB_CONNECTOR_LVDS_SPWG_REM = 0x43, // LVDS-OEM-Detached (removable)
|
||||
DCB_CONNECTOR_TMDS = 0x45, // TMDS-OEM-Attached (non-removable)
|
||||
|
||||
/* DP digital outputs */
|
||||
DCB_CONNECTOR_DP = 0x46, // DisplayPort External Connector
|
||||
DCB_CONNECTOR_eDP = 0x47, // DisplayPort Internal Connector
|
||||
DCB_CONNECTOR_mDP = 0x48, // DisplayPort (Mini) External Connector
|
||||
|
||||
/* Dock outputs (not used) */
|
||||
DCB_CONNECTOR_DOCK_VGA_0 = 0x50, // VGA 15-pin if not docked
|
||||
DCB_CONNECTOR_DOCK_VGA_1 = 0x51, // VGA 15-pin if docked
|
||||
DCB_CONNECTOR_DOCK_DVI_I_0 = 0x52, // DVI-I if not docked
|
||||
DCB_CONNECTOR_DOCK_DVI_I_1 = 0x53, // DVI-I if docked
|
||||
DCB_CONNECTOR_DOCK_DVI_D_0 = 0x54, // DVI-D if not docked
|
||||
DCB_CONNECTOR_DOCK_DVI_D_1 = 0x55, // DVI-D if docked
|
||||
DCB_CONNECTOR_DOCK_DP_0 = 0x56, // DisplayPort if not docked
|
||||
DCB_CONNECTOR_DOCK_DP_1 = 0x57, // DisplayPort if docked
|
||||
DCB_CONNECTOR_DOCK_mDP_0 = 0x58, // DisplayPort (Mini) if not docked
|
||||
DCB_CONNECTOR_DOCK_mDP_1 = 0x59, // DisplayPort (Mini) if docked
|
||||
|
||||
/* HDMI? digital outputs */
|
||||
DCB_CONNECTOR_HDMI_0 = 0x60, // HDMI? See [1] in top-level enum comment above
|
||||
DCB_CONNECTOR_HDMI_1 = 0x61, // HDMI-A connector
|
||||
DCB_CONNECTOR_SPDIF = 0x62, // Audio S/PDIF connector
|
||||
DCB_CONNECTOR_HDMI_C = 0x63, // HDMI-C (Mini) connector
|
||||
|
||||
/* Misc. digital outputs */
|
||||
DCB_CONNECTOR_DMS59_DP0 = 0x64, // LFH-DP-1
|
||||
DCB_CONNECTOR_DMS59_DP1 = 0x65, // LFH-DP-2
|
||||
DCB_CONNECTOR_WFD = 0x70, // Virtual connector for Wifi Display (WFD)
|
||||
DCB_CONNECTOR_USB_C = 0x71, // [DP over USB-C; not present in docs]
|
||||
DCB_CONNECTOR_NONE = 0xff // Skip Entry
|
||||
};
|
||||
|
||||
struct nvbios_connT {
|
||||
|
|
|
|||
|
|
@ -352,6 +352,8 @@ nouveau_user_framebuffer_create(struct drm_device *dev,
|
|||
|
||||
static const struct drm_mode_config_funcs nouveau_mode_config_funcs = {
|
||||
.fb_create = nouveau_user_framebuffer_create,
|
||||
.atomic_commit = drm_atomic_helper_commit,
|
||||
.atomic_check = drm_atomic_helper_check,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_pr
|
|||
goto cleanup;
|
||||
|
||||
list->type = ops[i]->base.id;
|
||||
list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", ops[i]->base.id);
|
||||
|
||||
i++;
|
||||
|
||||
|
|
@ -88,6 +87,8 @@ static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_pr
|
|||
|
||||
drm_colorop_set_next_property(ops[i - 1], ops[i]);
|
||||
|
||||
list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", ops[0]->base.id);
|
||||
|
||||
return 0;
|
||||
|
||||
cleanup:
|
||||
|
|
@ -103,18 +104,18 @@ static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_pr
|
|||
|
||||
int vkms_initialize_colorops(struct drm_plane *plane)
|
||||
{
|
||||
struct drm_prop_enum_list pipeline;
|
||||
int ret;
|
||||
struct drm_prop_enum_list pipeline = {};
|
||||
int ret = 0;
|
||||
|
||||
/* Add color pipeline */
|
||||
ret = vkms_initialize_color_pipeline(plane, &pipeline);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto out;
|
||||
|
||||
/* Create COLOR_PIPELINE property and attach */
|
||||
ret = drm_plane_create_color_pipeline_property(plane, &pipeline, 1);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
kfree(pipeline.name);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user