From 81534df8a3c44d516f8b5814c9d321e74104fc5b Mon Sep 17 00:00:00 2001 From: SPRESENSE <41312067+SPRESENSE@users.noreply.github.com> Date: Mon, 11 Apr 2022 20:11:45 +0900 Subject: [PATCH] boards: cxd56xx: Add board function for scd41 sensor driver Add board function for SCD41 CO2, temperature and humidity sensor driver. --- boards/arm/cxd56xx/common/src/Make.defs | 4 ++ .../arm/cxd56xx/common/src/cxd56_scd41_i2c.c | 72 +++++++++++++++++++ boards/arm/cxd56xx/common/src/cxd56_sensors.c | 3 + boards/arm/cxd56xx/spresense/include/board.h | 1 + .../cxd56xx/spresense/include/cxd56_scd41.h | 71 ++++++++++++++++++ 5 files changed, 151 insertions(+) create mode 100644 boards/arm/cxd56xx/common/src/cxd56_scd41_i2c.c create mode 100644 boards/arm/cxd56xx/spresense/include/cxd56_scd41.h diff --git a/boards/arm/cxd56xx/common/src/Make.defs b/boards/arm/cxd56xx/common/src/Make.defs index 0dae761637..572a772536 100644 --- a/boards/arm/cxd56xx/common/src/Make.defs +++ b/boards/arm/cxd56xx/common/src/Make.defs @@ -110,6 +110,10 @@ ifeq ($(CONFIG_SENSORS_RPR0521RS_SCU),y) CSRCS += cxd56_rpr0521rs_scu.c endif +ifeq ($(CONFIG_SENSORS_SCD41),y) +CSRCS += cxd56_scd41_i2c.c +endif + ifeq ($(CONFIG_NETDEVICES),y) CSRCS += cxd56_netinit.c endif diff --git a/boards/arm/cxd56xx/common/src/cxd56_scd41_i2c.c b/boards/arm/cxd56xx/common/src/cxd56_scd41_i2c.c new file mode 100644 index 0000000000..d3f0b15e23 --- /dev/null +++ b/boards/arm/cxd56xx/common/src/cxd56_scd41_i2c.c @@ -0,0 +1,72 @@ +/**************************************************************************** + * boards/arm/cxd56xx/common/src/cxd56_scd41_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 + +#include + +#include "cxd56_i2c.h" + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +#if defined(CONFIG_I2C) && defined(CONFIG_SENSORS_SCD41) + +int board_scd41_initialize(FAR const char *devpath, int bus) +{ + int ret; + FAR struct i2c_master_s *i2c; + + sninfo("Initializing SCD41...\n"); + + /* Initialize i2c device */ + + i2c = cxd56_i2cbus_initialize(bus); + if (!i2c) + { + snerr("ERROR: Failed to initialize i2c%d.\n", bus); + return -ENODEV; + } + + ret = scd41_register_i2c(devpath, i2c); + if (ret < 0) + { + snerr("Error registering SCD41.\n"); + } + + return ret; +} + +#endif diff --git a/boards/arm/cxd56xx/common/src/cxd56_sensors.c b/boards/arm/cxd56xx/common/src/cxd56_sensors.c index a01a6d634f..26fe4b58d8 100644 --- a/boards/arm/cxd56xx/common/src/cxd56_sensors.c +++ b/boards/arm/cxd56xx/common/src/cxd56_sensors.c @@ -216,6 +216,9 @@ static struct sensor_device_s sensor_device[] = #if defined(CONFIG_SENSORS_BH1745NUC) || defined(CONFIG_SENSORS_BH1745NUC_SCU) _I2C_DEVICE(bh1745nuc, "/dev/color"), /* Color */ #endif +#if defined(CONFIG_SENSORS_SCD41) + _I2C_DEVICE(scd41, "/dev/co2"), /* CO2 */ +#endif }; /**************************************************************************** diff --git a/boards/arm/cxd56xx/spresense/include/board.h b/boards/arm/cxd56xx/spresense/include/board.h index 20cce16a99..af64cfd1c4 100644 --- a/boards/arm/cxd56xx/spresense/include/board.h +++ b/boards/arm/cxd56xx/spresense/include/board.h @@ -61,6 +61,7 @@ #include "cxd56_kx022.h" #include "cxd56_lt1pa01.h" #include "cxd56_rpr0521rs.h" +#include "cxd56_scd41.h" #include "cxd56_sensors.h" #include "cxd56_isx012.h" diff --git a/boards/arm/cxd56xx/spresense/include/cxd56_scd41.h b/boards/arm/cxd56xx/spresense/include/cxd56_scd41.h new file mode 100644 index 0000000000..4a7243a12d --- /dev/null +++ b/boards/arm/cxd56xx/spresense/include/cxd56_scd41.h @@ -0,0 +1,71 @@ +/**************************************************************************** + * boards/arm/cxd56xx/spresense/include/cxd56_scd41.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_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_SCD41_H +#define __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_SCD41_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Public Types + ****************************************************************************/ + +#ifndef __ASSEMBLY__ + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +#undef EXTERN +#if defined(__cplusplus) +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Name: board_scd41_initialize + * + * Description: + * Initialize SCD41 i2c driver and register the SCD41 device. + * + ****************************************************************************/ + +#if defined (CONFIG_SENSORS_SCD41) +int board_scd41_initialize(FAR const char *devpath, int bus); +#endif + +#undef EXTERN +#if defined(__cplusplus) +} +#endif + +#endif /* __ASSEMBLY__ */ +#endif /* __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_SCD41_H */