2015-01-14 13:13:36 +08:00
|
|
|
#ifndef __NVKM_VOLT_H__
|
|
|
|
#define __NVKM_VOLT_H__
|
2013-02-08 07:34:56 +08:00
|
|
|
#include <core/subdev.h>
|
|
|
|
|
2015-01-14 13:13:36 +08:00
|
|
|
struct nvkm_voltage {
|
2013-02-08 07:34:56 +08:00
|
|
|
u32 uv;
|
|
|
|
u8 id;
|
|
|
|
};
|
|
|
|
|
2015-01-14 13:13:36 +08:00
|
|
|
struct nvkm_volt {
|
|
|
|
struct nvkm_subdev base;
|
2013-02-08 07:34:56 +08:00
|
|
|
|
2015-01-14 13:13:36 +08:00
|
|
|
int (*vid_get)(struct nvkm_volt *);
|
|
|
|
int (*get)(struct nvkm_volt *);
|
|
|
|
int (*vid_set)(struct nvkm_volt *, u8 vid);
|
|
|
|
int (*set)(struct nvkm_volt *, u32 uv);
|
|
|
|
int (*set_id)(struct nvkm_volt *, u8 id, int condition);
|
2013-02-08 07:34:56 +08:00
|
|
|
|
|
|
|
u8 vid_mask;
|
|
|
|
u8 vid_nr;
|
|
|
|
struct {
|
|
|
|
u32 uv;
|
|
|
|
u8 vid;
|
|
|
|
} vid[256];
|
|
|
|
};
|
|
|
|
|
2015-01-14 13:13:36 +08:00
|
|
|
static inline struct nvkm_volt *
|
|
|
|
nvkm_volt(void *obj)
|
2013-02-08 07:34:56 +08:00
|
|
|
{
|
2015-01-14 13:13:36 +08:00
|
|
|
return (void *)nvkm_subdev(obj, NVDEV_SUBDEV_VOLT);
|
2013-02-08 07:34:56 +08:00
|
|
|
}
|
|
|
|
|
2015-01-14 13:13:36 +08:00
|
|
|
#define nvkm_volt_create(p, e, o, d) \
|
|
|
|
nvkm_volt_create_((p), (e), (o), sizeof(**d), (void **)d)
|
|
|
|
#define nvkm_volt_destroy(p) ({ \
|
|
|
|
struct nvkm_volt *v = (p); \
|
|
|
|
_nvkm_volt_dtor(nv_object(v)); \
|
2013-02-08 07:34:56 +08:00
|
|
|
})
|
2015-01-14 13:13:36 +08:00
|
|
|
#define nvkm_volt_init(p) ({ \
|
|
|
|
struct nvkm_volt *v = (p); \
|
|
|
|
_nvkm_volt_init(nv_object(v)); \
|
2013-02-08 07:34:56 +08:00
|
|
|
})
|
2015-01-14 13:13:36 +08:00
|
|
|
#define nvkm_volt_fini(p,s) \
|
|
|
|
nvkm_subdev_fini((p), (s))
|
2013-02-08 07:34:56 +08:00
|
|
|
|
2015-01-14 13:13:36 +08:00
|
|
|
int nvkm_volt_create_(struct nvkm_object *, struct nvkm_object *,
|
|
|
|
struct nvkm_oclass *, int, void **);
|
|
|
|
void _nvkm_volt_dtor(struct nvkm_object *);
|
|
|
|
int _nvkm_volt_init(struct nvkm_object *);
|
|
|
|
#define _nvkm_volt_fini _nvkm_subdev_fini
|
2013-02-08 07:34:56 +08:00
|
|
|
|
2015-01-14 13:13:36 +08:00
|
|
|
extern struct nvkm_oclass nv40_volt_oclass;
|
|
|
|
extern struct nvkm_oclass gk20a_volt_oclass;
|
2013-02-08 07:34:56 +08:00
|
|
|
|
2015-01-14 13:13:36 +08:00
|
|
|
int nvkm_voltgpio_init(struct nvkm_volt *);
|
|
|
|
int nvkm_voltgpio_get(struct nvkm_volt *);
|
|
|
|
int nvkm_voltgpio_set(struct nvkm_volt *, u8);
|
2013-02-08 07:34:56 +08:00
|
|
|
#endif
|