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