diff --git a/CODEOWNERS b/CODEOWNERS index 02eb8208fed..52728223921 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -215,6 +215,8 @@ /drivers/i2c/Kconfig.i2c_emul @sjg20 /drivers/i2c/Kconfig.it8xxx2 @GTLin08 /drivers/i2c/slave/*eeprom* @henrikbrixandersen +/drivers/i2c/Kconfig.test @mbolivar-nordic +/drivers/i2c/i2c_test.c @mbolivar-nordic /drivers/i2s/*litex* @mateusz-holenko @kgugala @pgielda /drivers/ieee802154/ @jukkar @tbursztyka /drivers/ieee802154/ieee802154_rf2xx* @jukkar @tbursztyka @nandojve diff --git a/drivers/i2c/CMakeLists.txt b/drivers/i2c/CMakeLists.txt index 7afa5a31c71..2825364994b 100644 --- a/drivers/i2c/CMakeLists.txt +++ b/drivers/i2c/CMakeLists.txt @@ -54,6 +54,8 @@ if(CONFIG_I2C_DW) endforeach(NUM) endif() +zephyr_library_sources_ifdef(CONFIG_I2C_TEST i2c_test.c) + zephyr_library_sources_ifdef(CONFIG_USERSPACE i2c_handlers.c) add_subdirectory_ifdef(CONFIG_I2C_SLAVE slave) diff --git a/drivers/i2c/Kconfig b/drivers/i2c/Kconfig index fbed4e5a864..647a6093baf 100644 --- a/drivers/i2c/Kconfig +++ b/drivers/i2c/Kconfig @@ -40,6 +40,7 @@ source "drivers/i2c/Kconfig.sam0" source "drivers/i2c/Kconfig.litex" source "drivers/i2c/Kconfig.lpc11u6x" source "drivers/i2c/Kconfig.npcx" +source "drivers/i2c/Kconfig.test" config I2C_INIT_PRIORITY int "Init priority" diff --git a/drivers/i2c/Kconfig.test b/drivers/i2c/Kconfig.test new file mode 100644 index 00000000000..bd73ff10642 --- /dev/null +++ b/drivers/i2c/Kconfig.test @@ -0,0 +1,9 @@ +# Copyright (c) 2021, Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +DT_COMPAT_VND_I2C := vnd,i2c + +# Hidden option for turning on the dummy driver for vnd,i2c devices +# used in testing. +config I2C_TEST + def_bool $(dt_compat_enabled,$(DT_COMPAT_VND_I2C)) diff --git a/drivers/i2c/i2c_test.c b/drivers/i2c/i2c_test.c new file mode 100644 index 00000000000..3d51c51e65f --- /dev/null +++ b/drivers/i2c/i2c_test.c @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021, Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * This is not a real I2C driver. It is used to instantiate struct + * devices for the "vnd,i2c" devicetree compatible used in test code. + */ + +#include +#include + +#define DT_DRV_COMPAT vnd_i2c + +static int vnd_i2c_configure(const struct device *dev, + uint32_t dev_config) +{ + return -ENOTSUP; +} + +static int vnd_i2c_transfer(const struct device *dev, + struct i2c_msg *msgs, + uint8_t num_msgs, uint16_t addr) +{ + return -ENOTSUP; +} + +static const struct i2c_driver_api vnd_i2c_api = { + .configure = vnd_i2c_configure, + .transfer = vnd_i2c_transfer, +}; + +static int vnd_i2c_init(const struct device *dev) +{ + return 0; +} + +#define VND_I2C_INIT(n) \ + DEVICE_DT_INST_DEFINE(n, &vnd_i2c_init, device_pm_control_nop, \ + NULL, NULL, POST_KERNEL, \ + CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \ + &vnd_i2c_api); + +DT_INST_FOREACH_STATUS_OKAY(VND_I2C_INIT)