blob: d9253d26c31b64aebac2625ffade7cd9bfc586d7 [file] [log] [blame]
Ben Skeggs7a014a82014-05-16 14:36:15 +10001#ifndef __NVKM_DISP_OUTP_H__
2#define __NVKM_DISP_OUTP_H__
Ben Skeggs878da152015-01-14 15:24:57 +10003#include <core/object.h>
Ben Skeggs7a014a82014-05-16 14:36:15 +10004
Ben Skeggs878da152015-01-14 15:24:57 +10005#include <subdev/bios.h>
6#include <subdev/bios/dcb.h>
Ben Skeggs7a014a82014-05-16 14:36:15 +10007
8struct nvkm_output {
Ben Skeggs878da152015-01-14 15:24:57 +10009 struct nvkm_object base;
Ben Skeggs7a014a82014-05-16 14:36:15 +100010 struct list_head head;
11
12 struct dcb_output info;
13 int index;
Ben Skeggsbf0eb892014-08-10 04:10:26 +100014 int or;
Ben Skeggs7a014a82014-05-16 14:36:15 +100015
Ben Skeggs878da152015-01-14 15:24:57 +100016 struct nvkm_i2c_port *port;
17 struct nvkm_i2c_port *edid;
Ben Skeggs7a014a82014-05-16 14:36:15 +100018
19 struct nvkm_connector *conn;
20};
21
22#define nvkm_output_create(p,e,c,b,i,d) \
23 nvkm_output_create_((p), (e), (c), (b), (i), sizeof(**d), (void **)d)
24#define nvkm_output_destroy(d) ({ \
25 struct nvkm_output *_outp = (d); \
26 _nvkm_output_dtor(nv_object(_outp)); \
27})
28#define nvkm_output_init(d) ({ \
29 struct nvkm_output *_outp = (d); \
30 _nvkm_output_init(nv_object(_outp)); \
31})
32#define nvkm_output_fini(d,s) ({ \
33 struct nvkm_output *_outp = (d); \
34 _nvkm_output_fini(nv_object(_outp), (s)); \
35})
36
Ben Skeggs878da152015-01-14 15:24:57 +100037int nvkm_output_create_(struct nvkm_object *, struct nvkm_object *,
38 struct nvkm_oclass *, struct dcb_output *,
Ben Skeggs7a014a82014-05-16 14:36:15 +100039 int, int, void **);
40
Ben Skeggs878da152015-01-14 15:24:57 +100041int _nvkm_output_ctor(struct nvkm_object *, struct nvkm_object *,
42 struct nvkm_oclass *, void *, u32,
43 struct nvkm_object **);
44void _nvkm_output_dtor(struct nvkm_object *);
45int _nvkm_output_init(struct nvkm_object *);
46int _nvkm_output_fini(struct nvkm_object *, bool);
Ben Skeggs7a014a82014-05-16 14:36:15 +100047
48struct nvkm_output_impl {
Ben Skeggs878da152015-01-14 15:24:57 +100049 struct nvkm_oclass base;
Ben Skeggs7a014a82014-05-16 14:36:15 +100050};
51
52#ifndef MSG
53#define MSG(l,f,a...) do { \
54 struct nvkm_output *_outp = (void *)outp; \
Ben Skeggsbdda4702014-12-05 12:12:23 +100055 nv_##l(_outp, "%02x:%04x:%04x: "f, _outp->index, \
Ben Skeggs7a014a82014-05-16 14:36:15 +100056 _outp->info.hasht, _outp->info.hashm, ##a); \
57} while(0)
58#define DBG(f,a...) MSG(debug, f, ##a)
59#define ERR(f,a...) MSG(error, f, ##a)
60#endif
Ben Skeggs7a014a82014-05-16 14:36:15 +100061#endif