forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 61598093bbdd283a7edc367d900f223070ead8d2
kernel/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
....@@ -89,7 +89,7 @@
8989 }
9090
9191 static const struct nvkm_ior_func
92
-gm200_sor = {
92
+gm200_sor_hda = {
9393 .route = {
9494 .get = gm200_sor_route_get,
9595 .set = gm200_sor_route_set,
....@@ -99,6 +99,7 @@
9999 .clock = gf119_sor_clock,
100100 .hdmi = {
101101 .ctrl = gk104_hdmi_ctrl,
102
+ .scdc = gm200_hdmi_scdc,
102103 },
103104 .dp = {
104105 .lanes = { 0, 1, 2, 3 },
....@@ -114,11 +115,46 @@
114115 .hda = {
115116 .hpd = gf119_hda_hpd,
116117 .eld = gf119_hda_eld,
118
+ .device_entry = gf119_hda_device_entry,
119
+ },
120
+};
121
+
122
+static const struct nvkm_ior_func
123
+gm200_sor = {
124
+ .route = {
125
+ .get = gm200_sor_route_get,
126
+ .set = gm200_sor_route_set,
127
+ },
128
+ .state = gf119_sor_state,
129
+ .power = nv50_sor_power,
130
+ .clock = gf119_sor_clock,
131
+ .hdmi = {
132
+ .ctrl = gk104_hdmi_ctrl,
133
+ .scdc = gm200_hdmi_scdc,
134
+ },
135
+ .dp = {
136
+ .lanes = { 0, 1, 2, 3 },
137
+ .links = gf119_sor_dp_links,
138
+ .power = g94_sor_dp_power,
139
+ .pattern = gm107_sor_dp_pattern,
140
+ .drive = gm200_sor_dp_drive,
141
+ .vcpi = gf119_sor_dp_vcpi,
142
+ .audio = gf119_sor_dp_audio,
143
+ .audio_sym = gf119_sor_dp_audio_sym,
144
+ .watermark = gf119_sor_dp_watermark,
117145 },
118146 };
119147
120148 int
121149 gm200_sor_new(struct nvkm_disp *disp, int id)
122150 {
151
+ struct nvkm_device *device = disp->engine.subdev.device;
152
+ u32 hda;
153
+
154
+ if (!((hda = nvkm_rd32(device, 0x08a15c)) & 0x40000000))
155
+ hda = nvkm_rd32(device, 0x101034);
156
+
157
+ if (hda & BIT(id))
158
+ return nvkm_ior_new_(&gm200_sor_hda, disp, SOR, id);
123159 return nvkm_ior_new_(&gm200_sor, disp, SOR, id);
124160 }