]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h
Merge branch 'for-4.8/core' of git://git.kernel.dk/linux-block
[karo-tx-linux.git] / drivers / gpu / drm / nouveau / nvkm / engine / disp / outpdp.h
1 #ifndef __NVKM_DISP_OUTP_DP_H__
2 #define __NVKM_DISP_OUTP_DP_H__
3 #define nvkm_output_dp(p) container_of((p), struct nvkm_output_dp, base)
4 #ifndef MSG
5 #define MSG(l,f,a...)                                                          \
6         nvkm_##l(&outp->base.disp->engine.subdev, "%02x:%04x:%04x: "f,         \
7                  outp->base.index, outp->base.info.hasht,                      \
8                  outp->base.info.hashm, ##a)
9 #define DBG(f,a...) MSG(debug, f, ##a)
10 #define ERR(f,a...) MSG(error, f, ##a)
11 #endif
12 #include "outp.h"
13
14 #include <core/notify.h>
15 #include <subdev/bios.h>
16 #include <subdev/bios/dp.h>
17
18 struct nvkm_output_dp {
19         const struct nvkm_output_dp_func *func;
20         struct nvkm_output base;
21
22         struct nvbios_dpout info;
23         u8 version;
24
25         struct nvkm_i2c_aux *aux;
26
27         struct nvkm_notify irq;
28         struct nvkm_notify hpd;
29         bool present;
30         u8 dpcd[16];
31
32         struct {
33                 struct work_struct work;
34                 wait_queue_head_t wait;
35                 atomic_t done;
36         } lt;
37 };
38
39 struct nvkm_output_dp_func {
40         int (*pattern)(struct nvkm_output_dp *, int);
41         int (*lnk_pwr)(struct nvkm_output_dp *, int nr);
42         int (*lnk_ctl)(struct nvkm_output_dp *, int nr, int bw, bool ef);
43         int (*drv_ctl)(struct nvkm_output_dp *, int ln, int vs, int pe, int pc);
44 };
45
46 int nvkm_output_dp_train(struct nvkm_output *, u32 rate, bool wait);
47
48 int nvkm_output_dp_ctor(const struct nvkm_output_dp_func *, struct nvkm_disp *,
49                         int index, struct dcb_output *, struct nvkm_i2c_aux *,
50                         struct nvkm_output_dp *);
51 int nvkm_output_dp_new_(const struct nvkm_output_dp_func *, struct nvkm_disp *,
52                         int index, struct dcb_output *,
53                         struct nvkm_output **);
54
55 int nv50_pior_dp_new(struct nvkm_disp *, int, struct dcb_output *,
56                      struct nvkm_output **);
57
58 int g94_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
59                    struct nvkm_output **);
60 int g94_sor_dp_lnk_pwr(struct nvkm_output_dp *, int);
61
62 int gf119_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
63                      struct nvkm_output **);
64 int gf119_sor_dp_lnk_ctl(struct nvkm_output_dp *, int, int, bool);
65 int gf119_sor_dp_drv_ctl(struct nvkm_output_dp *, int, int, int, int);
66
67 int gm107_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
68                      struct nvkm_output **);
69 int gm107_sor_dp_pattern(struct nvkm_output_dp *, int);
70
71 int gm200_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
72                      struct nvkm_output **);
73 #endif