diff --git a/include/sbi_utils/regmap/fdt_regmap.h b/include/sbi_utils/regmap/fdt_regmap.h index de946f27..a24f7a98 100644 --- a/include/sbi_utils/regmap/fdt_regmap.h +++ b/include/sbi_utils/regmap/fdt_regmap.h @@ -10,17 +10,11 @@ #ifndef __FDT_REGMAP_H__ #define __FDT_REGMAP_H__ +#include #include struct fdt_phandle_args; -/** FDT based regmap driver */ -struct fdt_regmap { - const struct fdt_match *match_table; - int (*init)(const void *fdt, int nodeoff, - const struct fdt_match *match); -}; - /** Get regmap instance based on phandle */ int fdt_regmap_get_by_phandle(const void *fdt, u32 phandle, struct regmap **out_rmap); diff --git a/lib/utils/regmap/fdt_regmap.c b/lib/utils/regmap/fdt_regmap.c index ab991c45..2e8c2143 100644 --- a/lib/utils/regmap/fdt_regmap.c +++ b/lib/utils/regmap/fdt_regmap.c @@ -13,30 +13,7 @@ #include /* List of FDT regmap drivers generated at compile time */ -extern struct fdt_regmap *const fdt_regmap_drivers[]; - -static int fdt_regmap_init(const void *fdt, int nodeoff) -{ - int pos, rc; - struct fdt_regmap *drv; - const struct fdt_match *match; - - /* Try all I2C drivers one-by-one */ - for (pos = 0; fdt_regmap_drivers[pos]; pos++) { - drv = fdt_regmap_drivers[pos]; - match = fdt_match_node(fdt, nodeoff, drv->match_table); - if (match && drv->init) { - rc = drv->init(fdt, nodeoff, match); - if (rc == SBI_ENODEV) - continue; - if (rc) - return rc; - return 0; - } - } - - return SBI_ENOSYS; -} +extern const struct fdt_driver *const fdt_regmap_drivers[]; static int fdt_regmap_find(const void *fdt, int nodeoff, struct regmap **out_rmap) @@ -46,7 +23,8 @@ static int fdt_regmap_find(const void *fdt, int nodeoff, if (!rmap) { /* Regmap not found so initialize matching driver */ - rc = fdt_regmap_init(fdt, nodeoff); + rc = fdt_driver_init_by_offset(fdt, nodeoff, + fdt_regmap_drivers); if (rc) return rc; diff --git a/lib/utils/regmap/fdt_regmap_drivers.carray b/lib/utils/regmap/fdt_regmap_drivers.carray index c2f1c9d0..d19a932b 100644 --- a/lib/utils/regmap/fdt_regmap_drivers.carray +++ b/lib/utils/regmap/fdt_regmap_drivers.carray @@ -1,3 +1,3 @@ HEADER: sbi_utils/regmap/fdt_regmap.h -TYPE: struct fdt_regmap +TYPE: const struct fdt_driver NAME: fdt_regmap_drivers diff --git a/lib/utils/regmap/fdt_regmap_syscon.c b/lib/utils/regmap/fdt_regmap_syscon.c index ba559086..1309a55c 100644 --- a/lib/utils/regmap/fdt_regmap_syscon.c +++ b/lib/utils/regmap/fdt_regmap_syscon.c @@ -263,7 +263,7 @@ static const struct fdt_match regmap_syscon_match[] = { { }, }; -struct fdt_regmap fdt_regmap_syscon = { +const struct fdt_driver fdt_regmap_syscon = { .match_table = regmap_syscon_match, .init = regmap_syscon_init, };