1 #ifndef __NOUVEAU_VOLT_H__ 2 #define __NOUVEAU_VOLT_H__ 3 4 #include <core/subdev.h> 5 #include <core/device.h> 6 7 struct nouveau_voltage { 8 u32 uv; 9 u8 id; 10 }; 11 12 struct nouveau_volt { 13 struct nouveau_subdev base; 14 15 int (*vid_get)(struct nouveau_volt *); 16 int (*get)(struct nouveau_volt *); 17 int (*vid_set)(struct nouveau_volt *, u8 vid); 18 int (*set)(struct nouveau_volt *, u32 uv); 19 int (*set_id)(struct nouveau_volt *, u8 id, int condition); 20 21 u8 vid_mask; 22 u8 vid_nr; 23 struct { 24 u32 uv; 25 u8 vid; 26 } vid[256]; 27 }; 28 29 static inline struct nouveau_volt * 30 nouveau_volt(void *obj) 31 { 32 return (void *)nouveau_subdev(obj, NVDEV_SUBDEV_VOLT); 33 } 34 35 #define nouveau_volt_create(p, e, o, d) \ 36 nouveau_volt_create_((p), (e), (o), sizeof(**d), (void **)d) 37 #define nouveau_volt_destroy(p) ({ \ 38 struct nouveau_volt *v = (p); \ 39 _nouveau_volt_dtor(nv_object(v)); \ 40 }) 41 #define nouveau_volt_init(p) ({ \ 42 struct nouveau_volt *v = (p); \ 43 _nouveau_volt_init(nv_object(v)); \ 44 }) 45 #define nouveau_volt_fini(p,s) \ 46 nouveau_subdev_fini((p), (s)) 47 48 int nouveau_volt_create_(struct nouveau_object *, struct nouveau_object *, 49 struct nouveau_oclass *, int, void **); 50 void _nouveau_volt_dtor(struct nouveau_object *); 51 int _nouveau_volt_init(struct nouveau_object *); 52 #define _nouveau_volt_fini _nouveau_subdev_fini 53 54 extern struct nouveau_oclass nv40_volt_oclass; 55 extern struct nouveau_oclass gk20a_volt_oclass; 56 57 int nouveau_voltgpio_init(struct nouveau_volt *); 58 int nouveau_voltgpio_get(struct nouveau_volt *); 59 int nouveau_voltgpio_set(struct nouveau_volt *, u8); 60 61 #endif 62