forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/gpu/drm/nouveau/nouveau_connector.h
....@@ -29,14 +29,25 @@
2929
3030 #include <nvif/notify.h>
3131
32
+#include <nvhw/class/cl507d.h>
33
+#include <nvhw/class/cl907d.h>
34
+#include <nvhw/drf.h>
35
+
3236 #include <drm/drm_crtc.h>
3337 #include <drm/drm_edid.h>
3438 #include <drm/drm_encoder.h>
3539 #include <drm/drm_dp_helper.h>
40
+#include <drm/drm_util.h>
41
+
3642 #include "nouveau_crtc.h"
3743 #include "nouveau_encoder.h"
3844
3945 struct nvkm_i2c_port;
46
+struct dcb_output;
47
+
48
+#ifdef CONFIG_DRM_NOUVEAU_BACKLIGHT
49
+struct nouveau_backlight;
50
+#endif
4051
4152 #define nouveau_conn_atom(p) \
4253 container_of((p), struct nouveau_conn_atom, state)
....@@ -49,16 +60,23 @@
4960 * hw values, and the code relies on this.
5061 */
5162 enum {
52
- DITHERING_MODE_OFF = 0x00,
53
- DITHERING_MODE_ON = 0x01,
54
- DITHERING_MODE_DYNAMIC2X2 = 0x10 | DITHERING_MODE_ON,
55
- DITHERING_MODE_STATIC2X2 = 0x18 | DITHERING_MODE_ON,
56
- DITHERING_MODE_TEMPORAL = 0x20 | DITHERING_MODE_ON,
63
+ DITHERING_MODE_OFF =
64
+ NVDEF(NV507D, HEAD_SET_DITHER_CONTROL, ENABLE, DISABLE),
65
+ DITHERING_MODE_ON =
66
+ NVDEF(NV507D, HEAD_SET_DITHER_CONTROL, ENABLE, ENABLE),
67
+ DITHERING_MODE_DYNAMIC2X2 = DITHERING_MODE_ON |
68
+ NVDEF(NV507D, HEAD_SET_DITHER_CONTROL, MODE, DYNAMIC_2X2),
69
+ DITHERING_MODE_STATIC2X2 = DITHERING_MODE_ON |
70
+ NVDEF(NV507D, HEAD_SET_DITHER_CONTROL, MODE, STATIC_2X2),
71
+ DITHERING_MODE_TEMPORAL = DITHERING_MODE_ON |
72
+ NVDEF(NV907D, HEAD_SET_DITHER_CONTROL, MODE, TEMPORAL),
5773 DITHERING_MODE_AUTO
5874 } mode;
5975 enum {
60
- DITHERING_DEPTH_6BPC = 0x00,
61
- DITHERING_DEPTH_8BPC = 0x02,
76
+ DITHERING_DEPTH_6BPC =
77
+ NVDEF(NV507D, HEAD_SET_DITHER_CONTROL, BITS, DITHER_TO_6_BITS),
78
+ DITHERING_DEPTH_8BPC =
79
+ NVDEF(NV507D, HEAD_SET_DITHER_CONTROL, BITS, DITHER_TO_8_BITS),
6280 DITHERING_DEPTH_AUTO
6381 } depth;
6482 } dither;
....@@ -108,6 +126,15 @@
108126 struct nouveau_encoder *detected_encoder;
109127 struct edid *edid;
110128 struct drm_display_mode *native_mode;
129
+#ifdef CONFIG_DRM_NOUVEAU_BACKLIGHT
130
+ struct nouveau_backlight *backlight;
131
+#endif
132
+ /*
133
+ * Our connector property code expects a nouveau_conn_atom struct
134
+ * even on pre-nv50 where we do not support atomic. This embedded
135
+ * version gets used in the non atomic modeset case.
136
+ */
137
+ struct nouveau_conn_atom properties_state;
111138 };
112139
113140 static inline struct nouveau_connector *nouveau_connector(
....@@ -159,7 +186,8 @@
159186 }
160187
161188 struct drm_connector *
162
-nouveau_connector_create(struct drm_device *, int index);
189
+nouveau_connector_create(struct drm_device *, const struct dcb_output *);
190
+void nouveau_connector_hpd(struct drm_connector *connector);
163191
164192 extern int nouveau_tv_disable;
165193 extern int nouveau_ignorelid;
....@@ -179,4 +207,35 @@
179207 const struct drm_connector_state *,
180208 struct drm_property *, u64 *);
181209 struct drm_display_mode *nouveau_conn_native_mode(struct drm_connector *);
210
+enum drm_mode_status
211
+nouveau_conn_mode_clock_valid(const struct drm_display_mode *,
212
+ const unsigned min_clock,
213
+ const unsigned max_clock,
214
+ unsigned *clock);
215
+
216
+#ifdef CONFIG_DRM_NOUVEAU_BACKLIGHT
217
+extern int nouveau_backlight_init(struct drm_connector *);
218
+extern void nouveau_backlight_fini(struct drm_connector *);
219
+extern void nouveau_backlight_ctor(void);
220
+extern void nouveau_backlight_dtor(void);
221
+#else
222
+static inline int
223
+nouveau_backlight_init(struct drm_connector *connector)
224
+{
225
+ return 0;
226
+}
227
+
228
+static inline void
229
+nouveau_backlight_fini(struct drm_connector *connector) {
230
+}
231
+
232
+static inline void
233
+nouveau_backlight_ctor(void) {
234
+}
235
+
236
+static inline void
237
+nouveau_backlight_dtor(void) {
238
+}
239
+#endif
240
+
182241 #endif /* __NOUVEAU_CONNECTOR_H__ */