From 190c9ba3775a147a707a6941f70375b32168b742 Mon Sep 17 00:00:00 2001 From: Henrik Brix Andersen Date: Mon, 31 May 2021 22:23:15 +0200 Subject: [PATCH] boards: arm: lpcxpresso55s16: add MCAN support Add NXP LPC MCAN support for the NXP lpcxpresso55s16 board definition. Fixes #35437 Signed-off-by: Henrik Brix Andersen --- boards/arm/lpcxpresso55s16/doc/index.rst | 6 +++++ .../arm/lpcxpresso55s16/lpcxpresso55s16.yaml | 2 ++ .../lpcxpresso55s16_common.dtsi | 7 ++++++ boards/arm/lpcxpresso55s16/pinmux.c | 22 +++++++++++++++++++ 4 files changed, 37 insertions(+) diff --git a/boards/arm/lpcxpresso55s16/doc/index.rst b/boards/arm/lpcxpresso55s16/doc/index.rst index 803ca1bf08e..2bb31c09bae 100644 --- a/boards/arm/lpcxpresso55s16/doc/index.rst +++ b/boards/arm/lpcxpresso55s16/doc/index.rst @@ -73,6 +73,8 @@ hardware features: +-----------+------------+-------------------------------------+ | CLOCK | on-chip | clock_control | +-----------+------------+-------------------------------------+ +| CAN | on-chip | canbus | ++-----------+------------+-------------------------------------+ Other hardware features are not currently enabled. @@ -119,6 +121,10 @@ the functionality of a pin. +---------+-----------------+----------------------------+ | PIO1_26 | GPIO | FXOS8700 INT1 | +---------+-----------------+----------------------------+ +| PIO1_22 | CAN | CAN RXD | ++---------+-----------------+----------------------------+ +| PIO1_27 | CAN | CAN TXD | ++---------+-----------------+----------------------------+ System Clock ============ diff --git a/boards/arm/lpcxpresso55s16/lpcxpresso55s16.yaml b/boards/arm/lpcxpresso55s16/lpcxpresso55s16.yaml index e2afc5e5886..6ffaa94250d 100644 --- a/boards/arm/lpcxpresso55s16/lpcxpresso55s16.yaml +++ b/boards/arm/lpcxpresso55s16/lpcxpresso55s16.yaml @@ -18,6 +18,8 @@ supported: - arduino_gpio - arduino_i2c - arduino_spi + - can + - canfd - gpio - i2c - spi diff --git a/boards/arm/lpcxpresso55s16/lpcxpresso55s16_common.dtsi b/boards/arm/lpcxpresso55s16/lpcxpresso55s16_common.dtsi index e85b20fdd4d..e6969a82298 100644 --- a/boards/arm/lpcxpresso55s16/lpcxpresso55s16_common.dtsi +++ b/boards/arm/lpcxpresso55s16/lpcxpresso55s16_common.dtsi @@ -12,6 +12,7 @@ zephyr,console = &flexcomm0; zephyr,shell-uart = &flexcomm0; zephyr,entropy = &rng; + zephyr,canbus = &can0; }; aliases{ @@ -131,6 +132,12 @@ }; }; +&can0 { + status = "okay"; + bus-speed = <125000>; + bus-speed-data = <1000000>; +}; + &hs_lspi { status = "okay"; }; diff --git a/boards/arm/lpcxpresso55s16/pinmux.c b/boards/arm/lpcxpresso55s16/pinmux.c index ecc978ae21e..75af4710701 100644 --- a/boards/arm/lpcxpresso55s16/pinmux.c +++ b/boards/arm/lpcxpresso55s16/pinmux.c @@ -181,6 +181,28 @@ static int lpcxpresso_55s16_pinmux_init(const struct device *dev) IOCON_PIO_OPENDRAIN_DI); #endif +#if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(can0), nxp_lpc_mcan, okay) && CONFIG_CAN + /* CAN RXD, TXD */ + uint32_t port1_pin22_config = ( + IOCON_PIO_FUNC9 | + IOCON_PIO_MODE_INACT | + IOCON_PIO_INV_DI | + IOCON_PIO_DIGITAL_EN | + IOCON_PIO_SLEW_STANDARD | + IOCON_PIO_OPENDRAIN_DI + ); + uint32_t port1_pin27_config = ( + IOCON_PIO_FUNC9 | + IOCON_PIO_MODE_INACT | + IOCON_PIO_INV_DI | + IOCON_PIO_DIGITAL_EN | + IOCON_PIO_SLEW_STANDARD | + IOCON_PIO_OPENDRAIN_DI + ); + pinmux_pin_set(port1, 22, port1_pin22_config); + pinmux_pin_set(port1, 27, port1_pin27_config); +#endif + return 0; }