/* * Copyright (c) 2022 Vestas Wind Systems A/S * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #ifdef CONFIG_ZTEST #include #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)