xref: /rk3399_ARM-atf/drivers/st/regulator/regulator_fixed.c (revision 9526ad6058720fa6ad0369839c1aa72e60f5ce82)
15d6a2646SPascal Paillet /*
2*adeee68bSPascal Paillet  * Copyright (c) 2021-2025, STMicroelectronics - All Rights Reserved
35d6a2646SPascal Paillet  *
45d6a2646SPascal Paillet  * SPDX-License-Identifier: BSD-3-Clause
55d6a2646SPascal Paillet  */
65d6a2646SPascal Paillet 
75d6a2646SPascal Paillet #include <assert.h>
85d6a2646SPascal Paillet #include <errno.h>
95d6a2646SPascal Paillet 
105d6a2646SPascal Paillet #include <common/debug.h>
115d6a2646SPascal Paillet #include <common/fdt_wrappers.h>
125d6a2646SPascal Paillet #include <drivers/st/regulator.h>
135d6a2646SPascal Paillet #include <drivers/st/regulator_fixed.h>
145d6a2646SPascal Paillet #include <libfdt.h>
155d6a2646SPascal Paillet 
16cff2b114SPascal Paillet #ifndef PLAT_NB_FIXED_REGUS
17cff2b114SPascal Paillet #error "Missing PLAT_NB_FIXED_REGUS"
185d6a2646SPascal Paillet #endif
195d6a2646SPascal Paillet 
205d6a2646SPascal Paillet #define FIXED_NAME_LEN 32
215d6a2646SPascal Paillet 
225d6a2646SPascal Paillet struct fixed_data {
235d6a2646SPascal Paillet 	char name[FIXED_NAME_LEN];
245d6a2646SPascal Paillet 	struct regul_description desc;
255d6a2646SPascal Paillet };
265d6a2646SPascal Paillet 
27cff2b114SPascal Paillet static struct fixed_data data[PLAT_NB_FIXED_REGUS];
285d6a2646SPascal Paillet 
fixed_set_state(const struct regul_description * desc,bool state)295d6a2646SPascal Paillet static int fixed_set_state(const struct regul_description *desc, bool state)
305d6a2646SPascal Paillet {
315d6a2646SPascal Paillet 	return 0;
325d6a2646SPascal Paillet }
335d6a2646SPascal Paillet 
fixed_get_state(const struct regul_description * desc)345d6a2646SPascal Paillet static int fixed_get_state(const struct regul_description *desc)
355d6a2646SPascal Paillet {
365d6a2646SPascal Paillet 	return 1;
375d6a2646SPascal Paillet }
385d6a2646SPascal Paillet 
395d6a2646SPascal Paillet static struct regul_ops fixed_ops = {
405d6a2646SPascal Paillet 	.set_state = fixed_set_state,
415d6a2646SPascal Paillet 	.get_state = fixed_get_state,
425d6a2646SPascal Paillet };
435d6a2646SPascal Paillet 
fixed_regulator_register(void)445d6a2646SPascal Paillet int fixed_regulator_register(void)
455d6a2646SPascal Paillet {
465d6a2646SPascal Paillet 	uint32_t count = 0;
475d6a2646SPascal Paillet 	void *fdt;
485d6a2646SPascal Paillet 	int node;
495d6a2646SPascal Paillet 
505d6a2646SPascal Paillet 	VERBOSE("fixed reg init!\n");
515d6a2646SPascal Paillet 
525d6a2646SPascal Paillet 	if (fdt_get_address(&fdt) == 0) {
535d6a2646SPascal Paillet 		return -FDT_ERR_NOTFOUND;
545d6a2646SPascal Paillet 	}
555d6a2646SPascal Paillet 
565d6a2646SPascal Paillet 	fdt_for_each_compatible_node(fdt, node, "regulator-fixed") {
575d6a2646SPascal Paillet 		int len __unused;
585d6a2646SPascal Paillet 		int ret;
595d6a2646SPascal Paillet 		struct fixed_data *d = &data[count];
605d6a2646SPascal Paillet 		const char *reg_name;
615d6a2646SPascal Paillet 
625d6a2646SPascal Paillet 		reg_name = fdt_get_name(fdt, node, NULL);
635d6a2646SPascal Paillet 
645d6a2646SPascal Paillet 		VERBOSE("register fixed reg %s!\n", reg_name);
655d6a2646SPascal Paillet 
665d6a2646SPascal Paillet 		len = snprintf(d->name, FIXED_NAME_LEN - 1, "%s", reg_name);
675d6a2646SPascal Paillet 		assert((len > 0) && (len < (FIXED_NAME_LEN - 1)));
685d6a2646SPascal Paillet 
695d6a2646SPascal Paillet 		d->desc.node_name = d->name;
705d6a2646SPascal Paillet 		d->desc.driver_data = d;
715d6a2646SPascal Paillet 		d->desc.ops = &fixed_ops;
725d6a2646SPascal Paillet 
735d6a2646SPascal Paillet 		ret = regulator_register(&d->desc, node);
745d6a2646SPascal Paillet 		if (ret != 0) {
755d6a2646SPascal Paillet 			WARN("%s:%d failed to register %s\n", __func__,
765d6a2646SPascal Paillet 			     __LINE__, reg_name);
775d6a2646SPascal Paillet 			return ret;
785d6a2646SPascal Paillet 		}
795d6a2646SPascal Paillet 
805d6a2646SPascal Paillet 		count++;
81cff2b114SPascal Paillet 		assert(count <= PLAT_NB_FIXED_REGUS);
825d6a2646SPascal Paillet 
835d6a2646SPascal Paillet 	}
845d6a2646SPascal Paillet 
855d6a2646SPascal Paillet 	return 0;
865d6a2646SPascal Paillet }
87