1 #ifndef __NVKM_I2C_PRIV_H__
2 #define __NVKM_I2C_PRIV_H__
3 #include <subdev/i2c.h>
4 
5 #define nvkm_i2c_create(p,e,o,d)                                            \
6 	nvkm_i2c_create_((p), (e), (o), sizeof(**d), (void **)d)
7 #define nvkm_i2c_destroy(p) ({                                              \
8 	struct nvkm_i2c *i2c = (p);                                         \
9 	_nvkm_i2c_dtor(nv_object(i2c));                                     \
10 })
11 #define nvkm_i2c_init(p) ({                                                 \
12 	struct nvkm_i2c *i2c = (p);                                         \
13 	_nvkm_i2c_init(nv_object(i2c));                                     \
14 })
15 #define nvkm_i2c_fini(p,s) ({                                               \
16 	struct nvkm_i2c *i2c = (p);                                         \
17 	_nvkm_i2c_fini(nv_object(i2c), (s));                                \
18 })
19 
20 int nvkm_i2c_create_(struct nvkm_object *, struct nvkm_object *,
21 			struct nvkm_oclass *, int, void **);
22 int  _nvkm_i2c_ctor(struct nvkm_object *, struct nvkm_object *,
23 		       struct nvkm_oclass *, void *, u32,
24 		       struct nvkm_object **);
25 void _nvkm_i2c_dtor(struct nvkm_object *);
26 int  _nvkm_i2c_init(struct nvkm_object *);
27 int  _nvkm_i2c_fini(struct nvkm_object *, bool);
28 
29 struct nvkm_i2c_impl {
30 	struct nvkm_oclass base;
31 
32 	int (*pad_x_new)(struct nvkm_i2c *, int id, struct nvkm_i2c_pad **);
33 	int (*pad_s_new)(struct nvkm_i2c *, int id, struct nvkm_i2c_pad **);
34 
35 	/* number of native dp aux channels present */
36 	int aux;
37 
38 	/* read and ack pending interrupts, returning only data
39 	 * for ports that have not been masked off, while still
40 	 * performing the ack for anything that was pending.
41 	 */
42 	void (*aux_stat)(struct nvkm_i2c *, u32 *, u32 *, u32 *, u32 *);
43 
44 	/* mask on/off interrupt types for a given set of auxch
45 	 */
46 	void (*aux_mask)(struct nvkm_i2c *, u32, u32, u32);
47 };
48 
49 void g94_aux_stat(struct nvkm_i2c *, u32 *, u32 *, u32 *, u32 *);
50 void g94_aux_mask(struct nvkm_i2c *, u32, u32, u32);
51 
52 void gk104_aux_stat(struct nvkm_i2c *, u32 *, u32 *, u32 *, u32 *);
53 void gk104_aux_mask(struct nvkm_i2c *, u32, u32, u32);
54 #endif
55