drivers: rearrange for standard use of extern "C" in private headers

Consistently place C++ use of extern "C" after all include directives,
within the negative branch of _ASMLANGUAGE if used.

Only updated in headers that already had support for drivers built with
a C++ compiler.

The spi_dw.h file defines macros to declare functions, then uses them
within a file that may have out-of-tree overrides.  In this case we
leave the including file extern "C" active for backward compatibility.

Background from issue #17997:

Declarations that use C linkage should be placed within extern "C"
so the language linkage is correct when the header is included by
a C++ compiler.

Similarly #include directives should be outside the extern "C" to
ensure the language-specific default linkage is applied to any
declarations provided by the included header.

See: https://en.cppreference.com/w/cpp/language/language_linkage
Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
This commit is contained in:
Peter Bigot 2019-08-12 12:54:23 -05:00 committed by Carles Cufí
commit 5f481bb042
3 changed files with 18 additions and 13 deletions

View file

@ -7,15 +7,15 @@
#ifndef MPXXDTYY_H
#define MPXXDTYY_H
#ifdef __cplusplus
extern "C" {
#endif
#include <audio/dmic.h>
#include <zephyr.h>
#include <device.h>
#include "OpenPDMFilter.h"
#ifdef __cplusplus
extern "C" {
#endif
#define MPXXDTYY_MIN_PDM_FREQ 1200000 /* 1.2MHz */
#define MPXXDTYY_MAX_PDM_FREQ 3250000 /* 3.25MHz */

View file

@ -7,14 +7,14 @@
#ifndef ZEPHYR_DRIVERS_I2C_I2C_PRIV_H_
#define ZEPHYR_DRIVERS_I2C_I2C_PRIV_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <drivers/i2c.h>
#include <dt-bindings/i2c/i2c.h>
#include <logging/log.h>
#ifdef __cplusplus
extern "C" {
#endif
static inline u32_t i2c_map_dt_bitrate(u32_t bitrate)
{
switch (bitrate) {

View file

@ -9,8 +9,11 @@
#ifndef ZEPHYR_DRIVERS_SPI_SPI_DW_H_
#define ZEPHYR_DRIVERS_SPI_SPI_DW_H_
#include <string.h>
#include <drivers/spi.h>
#include "spi_context.h"
#ifdef __cplusplus
extern "C" {
#endif
@ -29,8 +32,6 @@ struct spi_dw_config {
u8_t op_modes;
};
#include "spi_context.h"
struct spi_dw_data {
#ifdef CONFIG_CLOCK_CONTROL
struct device *clock;
@ -194,6 +195,10 @@ struct spi_dw_data {
/*
* Including the right register definition file
* SoC SPECIFIC!
*
* The file included next uses the DEFINE_MM_REG macros above to
* declare functions. In this situation we'll leave the containing
* extern "C" active in C++ compilations.
*/
#include "spi_dw_regs.h"
@ -215,8 +220,6 @@ DEFINE_TEST_BIT_OP(sr_busy, DW_SPI_REG_SR, DW_SPI_SR_BUSY_BIT)
#ifdef CONFIG_CLOCK_CONTROL
#include <string.h>
static inline int clock_config(struct device *dev)
{
const struct spi_dw_config *info = dev->config->config_info;
@ -260,7 +263,8 @@ static inline void clock_off(struct device *dev)
extra_clock_off(dev);
}
#else
#else /* CONFIG_CLOCK_CONTROL */
#define clock_config(...)
#define clock_on(...)
#define clock_off(...)
@ -269,4 +273,5 @@ static inline void clock_off(struct device *dev)
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_DRIVERS_SPI_SPI_DW_H_ */