From dcb9cd1beb59c4e4b306b10efc716ded3666d413 Mon Sep 17 00:00:00 2001 From: grvvy Date: Tue, 13 Sep 2022 14:48:20 -0600 Subject: [PATCH] h1r9: add preliminary MAX2839 register definitions --- firmware/common/max2839_regs.def | 210 +++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 firmware/common/max2839_regs.def diff --git a/firmware/common/max2839_regs.def b/firmware/common/max2839_regs.def new file mode 100644 index 00000000..b1f34bfb --- /dev/null +++ b/firmware/common/max2839_regs.def @@ -0,0 +1,210 @@ +/* -*- mode: c -*- */ + +#ifndef __MAX2839_REGS_DEF +#define __MAX2839_REGS_DEF + +/* Generate static inline accessors that operate on the global + * regs. Done this way to (1) allow defs to be scraped out and used + * elsewhere, e.g. in scripts, (2) to avoid dealing with endian + * (structs). This may be used in firmware, or on host predefined + * register loads. */ + +#define MAX2839_REG_SET_CLEAN(_d, _r) (_d->regs_dirty &= ~(1UL<<_r)) +#define MAX2839_REG_SET_DIRTY(_d, _r) (_d->regs_dirty |= (1UL<<_r)) + +/* On set_, register is always set dirty, even if nothing + * changed. This makes sure that write that have side effects, + * e.g. frequency setting, are not skipped. */ + +/* n=name, r=regnum, o=offset (bits from LSB), l=length (bits) */ +#define __MREG__(n,r,o,l) \ +static inline uint16_t get_##n(max2839_driver_t* const _d) { \ + return (_d->regs[r] >> (o-l+1)) & ((1<regs[r] &= ~(((1<regs[r] |= ((v&((1<