| .. | .. |
|---|
| 99 | 99 | } *args = data; |
|---|
| 100 | 100 | int ret = -ENOSYS; |
|---|
| 101 | 101 | 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); |
|---|
| 103 | 103 | if (ret == 0) { |
|---|
| 104 | 104 | args->v0.or = outp->ior->id; |
|---|
| 105 | 105 | args->v0.link = outp->ior->asy.link; |
|---|
| .. | .. |
|---|
| 119 | 119 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
|---|
| 120 | 120 | if (args->v0.data & 0xfff00000) |
|---|
| 121 | 121 | return -EINVAL; |
|---|
| 122 | | - ret = nvkm_outp_acquire(outp, NVKM_OUTP_PRIV); |
|---|
| 122 | + ret = nvkm_outp_acquire(outp, NVKM_OUTP_PRIV, false); |
|---|
| 123 | 123 | if (ret) |
|---|
| 124 | 124 | return ret; |
|---|
| 125 | 125 | ret = outp->ior->func->sense(outp->ior, args->v0.data); |
|---|
| .. | .. |
|---|
| 155 | 155 | if (outp->info.type == DCB_OUTPUT_DP) |
|---|
| 156 | 156 | ior->func->dp.audio(ior, hidx, true); |
|---|
| 157 | 157 | ior->func->hda.hpd(ior, hidx, true); |
|---|
| 158 | | - ior->func->hda.eld(ior, data, size); |
|---|
| 158 | + ior->func->hda.eld(ior, hidx, data, size); |
|---|
| 159 | 159 | } else { |
|---|
| 160 | 160 | if (outp->info.type == DCB_OUTPUT_DP) |
|---|
| 161 | 161 | ior->func->dp.audio(ior, hidx, false); |
|---|
| .. | .. |
|---|
| 176 | 176 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); |
|---|
| 177 | 177 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
|---|
| 178 | 178 | 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", |
|---|
| 180 | 180 | 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); |
|---|
| 182 | 183 | if (args->v0.max_ac_packet > 0x1f || args->v0.rekey > 0x7f) |
|---|
| 183 | 184 | return -EINVAL; |
|---|
| 184 | 185 | if ((args->v0.avi_infoframe_length |
|---|
| .. | .. |
|---|
| 202 | 203 | args->v0.max_ac_packet, |
|---|
| 203 | 204 | args->v0.rekey, avi, avi_size, |
|---|
| 204 | 205 | vendor, vendor_size); |
|---|
| 206 | + |
|---|
| 207 | + if (outp->ior->func->hdmi.scdc) |
|---|
| 208 | + outp->ior->func->hdmi.scdc(outp->ior, args->v0.scdc); |
|---|
| 209 | + |
|---|
| 205 | 210 | return 0; |
|---|
| 206 | 211 | } |
|---|
| 207 | 212 | break; |
|---|