forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-04 1543e317f1da31b75942316931e8f491a8920811
kernel/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c
....@@ -99,7 +99,7 @@
9999 } *args = data;
100100 int ret = -ENOSYS;
101101 if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
102
- ret = nvkm_outp_acquire(outp, NVKM_OUTP_USER);
102
+ ret = nvkm_outp_acquire(outp, NVKM_OUTP_USER, args->v0.hda);
103103 if (ret == 0) {
104104 args->v0.or = outp->ior->id;
105105 args->v0.link = outp->ior->asy.link;
....@@ -119,7 +119,7 @@
119119 if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
120120 if (args->v0.data & 0xfff00000)
121121 return -EINVAL;
122
- ret = nvkm_outp_acquire(outp, NVKM_OUTP_PRIV);
122
+ ret = nvkm_outp_acquire(outp, NVKM_OUTP_PRIV, false);
123123 if (ret)
124124 return ret;
125125 ret = outp->ior->func->sense(outp->ior, args->v0.data);
....@@ -155,7 +155,7 @@
155155 if (outp->info.type == DCB_OUTPUT_DP)
156156 ior->func->dp.audio(ior, hidx, true);
157157 ior->func->hda.hpd(ior, hidx, true);
158
- ior->func->hda.eld(ior, data, size);
158
+ ior->func->hda.eld(ior, hidx, data, size);
159159 } else {
160160 if (outp->info.type == DCB_OUTPUT_DP)
161161 ior->func->dp.audio(ior, hidx, false);
....@@ -176,9 +176,10 @@
176176 nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size);
177177 if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
178178 nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d "
179
- "max_ac_packet %d rekey %d\n",
179
+ "max_ac_packet %d rekey %d scdc %d\n",
180180 args->v0.version, args->v0.state,
181
- args->v0.max_ac_packet, args->v0.rekey);
181
+ args->v0.max_ac_packet, args->v0.rekey,
182
+ args->v0.scdc);
182183 if (args->v0.max_ac_packet > 0x1f || args->v0.rekey > 0x7f)
183184 return -EINVAL;
184185 if ((args->v0.avi_infoframe_length
....@@ -202,6 +203,10 @@
202203 args->v0.max_ac_packet,
203204 args->v0.rekey, avi, avi_size,
204205 vendor, vendor_size);
206
+
207
+ if (outp->ior->func->hdmi.scdc)
208
+ outp->ior->func->hdmi.scdc(outp->ior, args->v0.scdc);
209
+
205210 return 0;
206211 }
207212 break;