| /* | |
| * SPDX-License-Identifier: BSD-2-Clause | |
| * | |
| * Copyright (c) 2023 Ventana Micro Systems Inc. | |
| * | |
| * Authors: | |
| * Anup Patel <apatel@ventanamicro.com> | |
| */ | |
| #ifndef __REGMAP_H__ | |
| #define __REGMAP_H__ | |
| #include <sbi/sbi_types.h> | |
| #include <sbi/sbi_list.h> | |
| /** Representation of a regmap instance */ | |
| struct regmap { | |
| /** Uniquie ID of the regmap instance assigned by the driver */ | |
| unsigned int id; | |
| /** Configuration of regmap registers */ | |
| int reg_shift; | |
| int reg_stride; | |
| unsigned int reg_base; | |
| unsigned int reg_max; | |
| /** Read a regmap register */ | |
| int (*reg_read)(struct regmap *rmap, unsigned int reg, | |
| unsigned int *val); | |
| /** Write a regmap register */ | |
| int (*reg_write)(struct regmap *rmap, unsigned int reg, | |
| unsigned int val); | |
| /** Read-modify-write a regmap register */ | |
| int (*reg_update_bits)(struct regmap *rmap, unsigned int reg, | |
| unsigned int mask, unsigned int val); | |
| /** List */ | |
| struct sbi_dlist node; | |
| }; | |
| static inline struct regmap *to_regmap(struct sbi_dlist *node) | |
| { | |
| return container_of(node, struct regmap, node); | |
| } | |
| /** Find a registered regmap instance */ | |
| struct regmap *regmap_find(unsigned int id); | |
| /** Register a regmap instance */ | |
| int regmap_add(struct regmap *rmap); | |
| /** Un-register a regmap instance */ | |
| void regmap_remove(struct regmap *rmap); | |
| /** Read a register in a regmap instance */ | |
| int regmap_read(struct regmap *rmap, unsigned int reg, unsigned int *val); | |
| /** Write a register in a regmap instance */ | |
| int regmap_write(struct regmap *rmap, unsigned int reg, unsigned int val); | |
| /** Read-modify-write a register in a regmap instance */ | |
| int regmap_update_bits(struct regmap *rmap, unsigned int reg, | |
| unsigned int mask, unsigned int val); | |
| #endif |