1#ifndef __NVKM_I2C_PRIV_H__ 2#define __NVKM_I2C_PRIV_H__ 3#include <subdev/i2c.h> 4 5extern struct nvkm_oclass nv04_i2c_pad_oclass; 6extern struct nvkm_oclass g94_i2c_pad_oclass; 7extern struct nvkm_oclass gm204_i2c_pad_oclass; 8 9#define nvkm_i2c_port_create(p,e,o,i,a,f,d) \ 10 nvkm_i2c_port_create_((p), (e), (o), (i), (a), (f), \ 11 sizeof(**d), (void **)d) 12#define nvkm_i2c_port_destroy(p) ({ \ 13 struct nvkm_i2c_port *port = (p); \ 14 _nvkm_i2c_port_dtor(nv_object(i2c)); \ 15}) 16#define nvkm_i2c_port_init(p) \ 17 nvkm_object_init(&(p)->base) 18#define nvkm_i2c_port_fini(p,s) \ 19 nvkm_object_fini(&(p)->base, (s)) 20 21int nvkm_i2c_port_create_(struct nvkm_object *, struct nvkm_object *, 22 struct nvkm_oclass *, u8, 23 const struct i2c_algorithm *, 24 const struct nvkm_i2c_func *, 25 int, void **); 26void _nvkm_i2c_port_dtor(struct nvkm_object *); 27#define _nvkm_i2c_port_init nvkm_object_init 28int _nvkm_i2c_port_fini(struct nvkm_object *, bool); 29 30#define nvkm_i2c_create(p,e,o,d) \ 31 nvkm_i2c_create_((p), (e), (o), sizeof(**d), (void **)d) 32#define nvkm_i2c_destroy(p) ({ \ 33 struct nvkm_i2c *i2c = (p); \ 34 _nvkm_i2c_dtor(nv_object(i2c)); \ 35}) 36#define nvkm_i2c_init(p) ({ \ 37 struct nvkm_i2c *i2c = (p); \ 38 _nvkm_i2c_init(nv_object(i2c)); \ 39}) 40#define nvkm_i2c_fini(p,s) ({ \ 41 struct nvkm_i2c *i2c = (p); \ 42 _nvkm_i2c_fini(nv_object(i2c), (s)); \ 43}) 44 45int nvkm_i2c_create_(struct nvkm_object *, struct nvkm_object *, 46 struct nvkm_oclass *, int, void **); 47int _nvkm_i2c_ctor(struct nvkm_object *, struct nvkm_object *, 48 struct nvkm_oclass *, void *, u32, 49 struct nvkm_object **); 50void _nvkm_i2c_dtor(struct nvkm_object *); 51int _nvkm_i2c_init(struct nvkm_object *); 52int _nvkm_i2c_fini(struct nvkm_object *, bool); 53 54extern struct nvkm_oclass nvkm_anx9805_sclass[]; 55extern struct nvkm_oclass gf110_i2c_sclass[]; 56 57extern const struct i2c_algorithm nvkm_i2c_bit_algo; 58extern const struct i2c_algorithm nvkm_i2c_aux_algo; 59 60struct nvkm_i2c_impl { 61 struct nvkm_oclass base; 62 63 /* supported i2c port classes */ 64 struct nvkm_oclass *sclass; 65 struct nvkm_oclass *pad_x; 66 struct nvkm_oclass *pad_s; 67 68 /* number of native dp aux channels present */ 69 int aux; 70 71 /* read and ack pending interrupts, returning only data 72 * for ports that have not been masked off, while still 73 * performing the ack for anything that was pending. 74 */ 75 void (*aux_stat)(struct nvkm_i2c *, u32 *, u32 *, u32 *, u32 *); 76 77 /* mask on/off interrupt types for a given set of auxch 78 */ 79 void (*aux_mask)(struct nvkm_i2c *, u32, u32, u32); 80}; 81 82void g94_aux_stat(struct nvkm_i2c *, u32 *, u32 *, u32 *, u32 *); 83void g94_aux_mask(struct nvkm_i2c *, u32, u32, u32); 84 85void gk104_aux_stat(struct nvkm_i2c *, u32 *, u32 *, u32 *, u32 *); 86void gk104_aux_mask(struct nvkm_i2c *, u32, u32, u32); 87#endif 88