From 1f8db2f18ffb4babb27c2070419b7100f998c7f4 Mon Sep 17 00:00:00 2001 From: Samuel Holland Date: Mon, 11 Nov 2024 14:02:52 -0800 Subject: lib: utils/regmap: Use fdt_driver for initialization The regmap driver subsystem does not need any extra data, so it can use `struct fdt_driver` directly. It always initializes the driver for a specific DT node. Signed-off-by: Samuel Holland Reviewed-by: Anup Patel --- lib/utils/regmap/fdt_regmap.c | 28 +++------------------------- lib/utils/regmap/fdt_regmap_drivers.carray | 2 +- lib/utils/regmap/fdt_regmap_syscon.c | 2 +- 3 files changed, 5 insertions(+), 27 deletions(-) (limited to 'lib/utils') diff --git a/lib/utils/regmap/fdt_regmap.c b/lib/utils/regmap/fdt_regmap.c index ab991c4..2e8c214 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 c2f1c9d..d19a932 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 ba55908..1309a55 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, }; -- cgit v1.1