79 lines
2.1 KiB
C
79 lines
2.1 KiB
C
|
/*
|
||
|
* 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_NEW_API
|
||
|
#include <zephyr/ztest.h>
|
||
|
#endif /* CONFIG_ZTEST_NEW_API */
|
||
|
|
||
|
#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_NEW_API
|
||
|
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_NEW_API */
|
||
|
|
||
|
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)
|