diff --git a/boards/xtensa/esp32/common/include/esp32_board_i2c.h b/boards/xtensa/esp32/common/include/esp32_board_i2c.h new file mode 100644 index 0000000000..13717078bd --- /dev/null +++ b/boards/xtensa/esp32/common/include/esp32_board_i2c.h @@ -0,0 +1,69 @@ +/**************************************************************************** + * boards/xtensa/esp32/common/include/esp32_board_i2c.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __BOARDS_XTENSA_ESP32_COMMON_INCLUDE_BOARD_I2C_H +#define __BOARDS_XTENSA_ESP32_COMMON_INCLUDE_BOARD_I2C_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#ifndef __ASSEMBLY__ + +#undef EXTERN +#if defined(__cplusplus) +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +#ifdef CONFIG_I2C_DRIVER + +/**************************************************************************** + * Name: esp32_i2c_register + * + * Description: + * registar an ESP32 I2C interface. + * + * Returned Value: + * Zero (OK) is returned on success; A negated errno value is returned + * to indicate the nature of any failure. + * + ****************************************************************************/ + +int esp32_i2c_register(int bus); + +#endif /* CONFIG_I2C_DRIVER */ + +#undef EXTERN +#if defined(__cplusplus) +} +#endif + +#endif /* __ASSEMBLY__ */ +#endif /* __BOARDS_XTENSA_ESP32_COMMON_INCLUDE_BOARD_I2C_H */ \ No newline at end of file diff --git a/boards/xtensa/esp32/common/src/Make.defs b/boards/xtensa/esp32/common/src/Make.defs index a0215a2e93..5afdb5d3e6 100644 --- a/boards/xtensa/esp32/common/src/Make.defs +++ b/boards/xtensa/esp32/common/src/Make.defs @@ -26,7 +26,10 @@ ifeq ($(CONFIG_WATCHDOG),y) CSRCS += esp32_board_wdt.c endif +ifeq ($(CONFIG_I2C_DRIVER),y) + CSRCS += esp32_board_i2c.c +endif + DEPPATH += --dep-path src VPATH += :src -CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)src) - +CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)src) \ No newline at end of file diff --git a/boards/xtensa/esp32/common/src/esp32_board_i2c.c b/boards/xtensa/esp32/common/src/esp32_board_i2c.c new file mode 100644 index 0000000000..155aa03598 --- /dev/null +++ b/boards/xtensa/esp32/common/src/esp32_board_i2c.c @@ -0,0 +1,76 @@ +/**************************************************************************** + * boards/xtensa/esp32/common/src/esp32_board_i2c.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include + +#include "esp32_board_i2c.h" +#include "esp32_i2c.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: esp32_i2c_register + * + * Description: + * registar an ESP32 I2C interface. + * + * Returned Value: + * Zero (OK) is returned on success; A negated errno value is returned + * to indicate the nature of any failure. + * + ****************************************************************************/ + +int esp32_i2c_register(int bus) +{ + FAR struct i2c_master_s *i2c; + int ret; + + i2c = esp32_i2cbus_initialize(bus); + + if (i2c == NULL) + { + syslog(LOG_ERR, "ERROR: Failed to get I2C%d interface\n", bus); + } + else + { + ret = i2c_register(i2c, bus); + if (ret < 0) + { + syslog(LOG_ERR, "ERROR: Failed to register I2C%d driver: %d\n", + bus, ret); + esp32_i2cbus_uninitialize(i2c); + } + + return ret; + } + + return -1; +} + diff --git a/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_bringup.c b/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_bringup.c index 28d8f690a2..9adffa7a42 100644 --- a/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_bringup.c +++ b/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_bringup.c @@ -56,6 +56,10 @@ # include "esp32_board_wdt.h" #endif +#ifdef CONFIG_ESP32_I2C +# include "esp32_board_i2c.h" +#endif + #include "esp32-wrover-kit.h" /**************************************************************************** @@ -231,6 +235,30 @@ int esp32_bringup(void) syslog(LOG_ERR, "Failed to initialize GPIO Driver: %d\n", ret); return ret; } +#endif + +#ifdef CONFIG_I2C_DRIVER + +#ifdef CONFIG_ESP32_I2C0 + ret = esp32_i2c_register(0); + + if (ret < 0) + { + syslog(LOG_ERR, "Failed to initialize I2C Driver for I2C0: %d\n", ret); + return ret; + } +#endif + +#ifdef CONFIG_ESP32_I2C1 + ret = esp32_i2c_register(1); + + if (ret < 0) + { + syslog(LOG_ERR, "Failed to initialize I2C Driver for I2C1: %d\n", ret); + return ret; + } +#endif + #endif /* If we got here then perhaps not all initialization was successful, but