| /* |
| * Copyright (c) 2022 Vestas Wind Systems A/S |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <zephyr/device.h> |
| #include <zephyr/drivers/eeprom.h> |
| #include <zephyr/drivers/eeprom/eeprom_fake.h> |
| #include <zephyr/fff.h> |
| |
| #ifdef CONFIG_ZTEST |
| #include <zephyr/ztest.h> |
| #endif /* CONFIG_ZTEST */ |
| |
| #define DT_DRV_COMPAT zephyr_fake_eeprom |
| |
| struct fake_eeprom_config { |
| size_t size; |
| }; |
| |
| DEFINE_FAKE_VALUE_FUNC(int, fake_eeprom_read, const struct device *, off_t, void *, size_t); |
| |
| DEFINE_FAKE_VALUE_FUNC(int, fake_eeprom_write, const struct device *, off_t, const void *, size_t); |
| |
| DEFINE_FAKE_VALUE_FUNC(size_t, fake_eeprom_size, const struct device *); |
| |
| size_t fake_eeprom_size_delegate(const struct device *dev) |
| { |
| const struct fake_eeprom_config *config = dev->config; |
| |
| return config->size; |
| } |
| |
| #ifdef CONFIG_ZTEST |
| static void fake_eeprom_reset_rule_before(const struct ztest_unit_test *test, void *fixture) |
| { |
| ARG_UNUSED(test); |
| ARG_UNUSED(fixture); |
| |
| RESET_FAKE(fake_eeprom_read); |
| RESET_FAKE(fake_eeprom_write); |
| RESET_FAKE(fake_eeprom_size); |
| |
| /* Re-install default delegate for reporting the EEPROM size */ |
| fake_eeprom_size_fake.custom_fake = fake_eeprom_size_delegate; |
| } |
| |
| ZTEST_RULE(fake_eeprom_reset_rule, fake_eeprom_reset_rule_before, NULL); |
| #endif /* CONFIG_ZTEST */ |
| |
| static const struct eeprom_driver_api fake_eeprom_driver_api = { |
| .read = fake_eeprom_read, |
| .write = fake_eeprom_write, |
| .size = fake_eeprom_size, |
| }; |
| |
| static int fake_eeprom_init(const struct device *dev) |
| { |
| ARG_UNUSED(dev); |
| |
| /* Install default delegate for reporting the EEPROM size */ |
| fake_eeprom_size_fake.custom_fake = fake_eeprom_size_delegate; |
| |
| return 0; |
| } |
| |
| #define FAKE_EEPROM_INIT(inst) \ |
| static const struct fake_eeprom_config fake_eeprom_config_##inst = { \ |
| .size = DT_INST_PROP(inst, size), \ |
| }; \ |
| \ |
| DEVICE_DT_INST_DEFINE(inst, &fake_eeprom_init, NULL, NULL, \ |
| &fake_eeprom_config_##inst, \ |
| POST_KERNEL, CONFIG_EEPROM_INIT_PRIORITY, \ |
| &fake_eeprom_driver_api); |
| |
| DT_INST_FOREACH_STATUS_OKAY(FAKE_EEPROM_INIT) |