diff options
Diffstat (limited to 'includes/dt_util.h')
-rw-r--r-- | includes/dt_util.h | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/includes/dt_util.h b/includes/dt_util.h index 7ef6808b..bec9af1c 100644 --- a/includes/dt_util.h +++ b/includes/dt_util.h @@ -20,6 +20,7 @@ enum { DTP_STR, /* null-delimited list of strings */ DTP_HEX, /* list of 32-bit values displayed in hex */ DTP_UINT, /* unsigned int list */ + DTP_UINT64, /* unsigned int64 list */ DTP_INTRUPT, /* interrupt-specifier list */ DTP_INTRUPT_EX, /* extended interrupt-specifier list */ DTP_OVR, /* all in /__overrides__ */ @@ -29,6 +30,8 @@ enum { DTP_CLOCKS, /* <phref, #clock-cells> */ DTP_GPIOS, /* <phref, #gpio-cells> */ DTP_DMAS, /* dma-specifier list */ + DTP_OPP1, /* list of operating points, pairs of (kHz,uV) */ + DTP_PH_REF_OPP2, /* phandle reference to opp-v2 table */ }; /* simplest, no aliases, doesn't require an existing dt. @@ -36,6 +39,7 @@ enum { char* dtr_get_string(const char *p, int decode); typedef uint32_t dt_uint; /* big-endian */ +typedef uint64_t dt_uint64; /* big-endian */ typedef struct _dtr dtr; typedef struct _dtr_obj dtr_obj; @@ -53,18 +57,20 @@ char *dtr_obj_alias(dtr_obj *); char *dtr_obj_symbol(dtr_obj *); char *dtr_obj_path(dtr_obj *); /* device tree path */ char *dtr_obj_full_path(dtr_obj *); /* system path */ +dtr_obj *dtr_get_parent_obj(dtr_obj *); /* find property/node 'name' relative to node * if node is NULL, then from root */ dtr_obj *dtr_get_prop_obj(dtr *, dtr_obj *node, const char *name); char *dtr_get_prop_str(dtr *, dtr_obj *node, const char *name); uint32_t dtr_get_prop_u32(dtr *, dtr_obj *node, const char *name); +uint64_t dtr_get_prop_u64(dtr *, dtr_obj *node, const char *name); /* attempts to render the object as a string */ char* dtr_str(dtr_obj *obj); int dtr_guess_type(dtr_obj *obj); -char *dtr_elem_phref(dtr *, dt_uint e, int show_path); +char *dtr_elem_phref(dtr *, dt_uint e, int show_path, const char *extra); char *dtr_elem_hex(dt_uint e); char *dtr_elem_byte(uint8_t e); char *dtr_elem_uint(dt_uint e); @@ -80,10 +86,16 @@ const char *dtr_find_device_tree_root(void); /* write to the message log */ void dtr_msg(dtr *s, char *fmt, ...); -#define sp_sep(STR) (strlen(STR) ? " " : "") -/* appends an element to a string, adding a space if - * the string is not empty. - * ex: ret = appf(ret, "%s=%s\n", name, value); */ -char *appf(char *src, char *fmt, ...); +/* operating-points v0,v1,v2 */ +typedef struct { + uint32_t version; /* opp version, 0 = clock-frequency only */ + uint32_t phandle; /* v2 only */ + uint32_t khz_min; + uint32_t khz_max; + uint32_t clock_latency_ns; +} dt_opp_range; + +/* free result with g_free() */ +dt_opp_range *dtr_get_opp_range(dtr *, const char *name); #endif |