12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Copyright (c) 2015 Endless Mobile, Inc.
- * Author: Carlo Caione <[email protected]>
- */
- #ifndef __MESON_PARM_H
- #define __MESON_PARM_H
- #include <linux/bits.h>
- #include <linux/regmap.h>
- #define PMASK(width) GENMASK(width - 1, 0)
- #define SETPMASK(width, shift) GENMASK(shift + width - 1, shift)
- #define CLRPMASK(width, shift) (~SETPMASK(width, shift))
- #define PARM_GET(width, shift, reg) \
- (((reg) & SETPMASK(width, shift)) >> (shift))
- #define PARM_SET(width, shift, reg, val) \
- (((reg) & CLRPMASK(width, shift)) | ((val) << (shift)))
- #define MESON_PARM_APPLICABLE(p) (!!((p)->width))
- struct parm {
- u16 reg_off;
- u8 shift;
- u8 width;
- };
- static inline unsigned int meson_parm_read(struct regmap *map, struct parm *p)
- {
- unsigned int val;
- regmap_read(map, p->reg_off, &val);
- return PARM_GET(p->width, p->shift, val);
- }
- static inline void meson_parm_write(struct regmap *map, struct parm *p,
- unsigned int val)
- {
- regmap_update_bits(map, p->reg_off, SETPMASK(p->width, p->shift),
- val << p->shift);
- }
- #endif /* __MESON_PARM_H */
|