123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /*
- * Copyright (c) 2021-2023, STMicroelectronics - All Rights Reserved
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #include <assert.h>
- #include <errno.h>
- #include <common/debug.h>
- #include <common/fdt_wrappers.h>
- #include <drivers/st/regulator.h>
- #include <drivers/st/regulator_fixed.h>
- #include <libfdt.h>
- #ifndef PLAT_NB_FIXED_REGUS
- #error "Missing PLAT_NB_FIXED_REGUS"
- #endif
- #define FIXED_NAME_LEN 32
- struct fixed_data {
- char name[FIXED_NAME_LEN];
- uint16_t volt;
- struct regul_description desc;
- };
- static struct fixed_data data[PLAT_NB_FIXED_REGUS];
- static int fixed_set_state(const struct regul_description *desc, bool state)
- {
- return 0;
- }
- static int fixed_get_state(const struct regul_description *desc)
- {
- return 1;
- }
- static struct regul_ops fixed_ops = {
- .set_state = fixed_set_state,
- .get_state = fixed_get_state,
- };
- int fixed_regulator_register(void)
- {
- uint32_t count = 0;
- void *fdt;
- int node;
- VERBOSE("fixed reg init!\n");
- if (fdt_get_address(&fdt) == 0) {
- return -FDT_ERR_NOTFOUND;
- }
- fdt_for_each_compatible_node(fdt, node, "regulator-fixed") {
- int len __unused;
- int ret;
- struct fixed_data *d = &data[count];
- const char *reg_name;
- reg_name = fdt_get_name(fdt, node, NULL);
- VERBOSE("register fixed reg %s!\n", reg_name);
- len = snprintf(d->name, FIXED_NAME_LEN - 1, "%s", reg_name);
- assert((len > 0) && (len < (FIXED_NAME_LEN - 1)));
- d->desc.node_name = d->name;
- d->desc.driver_data = d;
- d->desc.ops = &fixed_ops;
- ret = regulator_register(&d->desc, node);
- if (ret != 0) {
- WARN("%s:%d failed to register %s\n", __func__,
- __LINE__, reg_name);
- return ret;
- }
- count++;
- assert(count <= PLAT_NB_FIXED_REGUS);
- }
- return 0;
- }
|