diff options
author | Vincenzo Frascino <vincenzo.frascino@linaro.org> | 2017-01-25 17:39:36 +0000 |
---|---|---|
committer | Kumar Gala <kumar.gala@linaro.org> | 2017-01-30 11:02:36 -0600 |
commit | 4276d2ec9913cf5f5bf5ed08a093969b4906bd44 (patch) | |
tree | 89688dff5aa8d5d0830675d9ee05730a5b84ed1f | |
parent | 2e7a75c69bfc6f530c8795e64b34376293e53682 (diff) |
boards: arm: mps2: Add pinmuxing
This patch adds pinmuxing configuration the ARM MPS2 AN385 board.
Change-Id: If9825e325e8f3abf568537f3a279b5f0f56bd088
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@linaro.org>
-rw-r--r-- | boards/arm/mps2_an385/Kconfig.defconfig | 7 | ||||
-rw-r--r-- | boards/arm/mps2_an385/Makefile | 6 | ||||
-rw-r--r-- | boards/arm/mps2_an385/mps2_an385_defconfig | 3 | ||||
-rw-r--r-- | boards/arm/mps2_an385/pinmux.c | 168 |
4 files changed, 181 insertions, 3 deletions
diff --git a/boards/arm/mps2_an385/Kconfig.defconfig b/boards/arm/mps2_an385/Kconfig.defconfig index 7fbd566bd..1ada42a13 100644 --- a/boards/arm/mps2_an385/Kconfig.defconfig +++ b/boards/arm/mps2_an385/Kconfig.defconfig @@ -28,6 +28,13 @@ config GPIO_CMSDK_AHB_PORT3 endif # GPIO +if PINMUX + +config PINMUX_MPS2 + def_bool y + +endif # PINMUX + if SERIAL config UART_CMSDK_APB diff --git a/boards/arm/mps2_an385/Makefile b/boards/arm/mps2_an385/Makefile index 87680c01d..d1cf2effb 100644 --- a/boards/arm/mps2_an385/Makefile +++ b/boards/arm/mps2_an385/Makefile @@ -4,6 +4,6 @@ # SPDX-License-Identifier: Apache-2.0 # -# Force build system to create built-in.o even though we do not (yet) -# have any C files to compile -obj- += dummy.o +ccflags-y +=-I$(srctree)/drivers + +obj-$(CONFIG_PINMUX_MPS2) += pinmux.o diff --git a/boards/arm/mps2_an385/mps2_an385_defconfig b/boards/arm/mps2_an385/mps2_an385_defconfig index 458b60171..2a1485df4 100644 --- a/boards/arm/mps2_an385/mps2_an385_defconfig +++ b/boards/arm/mps2_an385/mps2_an385_defconfig @@ -15,6 +15,9 @@ CONFIG_RUNTIME_NMI=y # GPIOs CONFIG_GPIO=y +# PinMuxing +CONFIG_PINMUX=y + # Serial CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y diff --git a/boards/arm/mps2_an385/pinmux.c b/boards/arm/mps2_an385/pinmux.c new file mode 100644 index 000000000..6cad9531a --- /dev/null +++ b/boards/arm/mps2_an385/pinmux.c @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2016 Linaro Limited + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <device.h> +#include <init.h> +#include <kernel.h> +#include <pinmux.h> +#include <soc.h> +#include <sys_io.h> +#include <gpio/gpio_cmsdk_ahb.h> + +#include "pinmux/pinmux.h" + +/** + * @brief Pinmux driver for ARM MPS2 AN385 Board + * + * The ARM MPS2 AN385 Board has 4 GPIO controllers. These controllers + * are responsible for pin muxing, input/output, pull-up, etc. + * + * All GPIO controller pins are exposed via the following sequence of pin + * numbers: + * Pins 0 - 15 are for GPIO0 + * Pins 16 - 31 are for GPIO1 + * Pins 32 - 47 are for GPIO2 + * Pins 48 - 51 are for GPIO3 + * + * For the GPIO controllers configuration ARM MPS2 AN385 Board follows the + * Arduino compliant pin out. + */ + +#define CMSDK_AHB_GPIO0_DEV \ + ((volatile struct gpio_cmsdk_ahb *)CMSDK_AHB_GPIO0) +#define CMSDK_AHB_GPIO1_DEV \ + ((volatile struct gpio_cmsdk_ahb *)CMSDK_AHB_GPIO1) +#define CMSDK_AHB_GPIO2_DEV \ + ((volatile struct gpio_cmsdk_ahb *)CMSDK_AHB_GPIO2) +#define CMSDK_AHB_GPIO3_DEV \ + ((volatile struct gpio_cmsdk_ahb *)CMSDK_AHB_GPIO3) + +/* + * This is the mapping from the ARM MPS2 AN385 Board pins to GPIO + * controllers. + * + * D0 : EXT_0 + * D1 : EXT_4 + * D2 : EXT_2 + * D3 : EXT_3 + * D4 : EXT_1 + * D5 : EXT_6 + * D6 : EXT_7 + * D7 : EXT_8 + * D8 : EXT_9 + * D9 : EXT_10 + * D10 : EXT_12 + * D11 : EXT_13 + * D12 : EXT_14 + * D13 : EXT_11 + * D14 : EXT_15 + * D15 : EXT_5 + * D16 : EXT_16 + * D17 : EXT_17 + * D18 : EXT_18 + * D19 : EXT_19 + * D20 : EXT_20 + * D21 : EXT_21 + * D22 : EXT_22 + * D23 : EXT_23 + * D24 : EXT_24 + * D25 : EXT_25 + * D26 : EXT_26 + * D27 : EXT_30 + * D28 : EXT_28 + * D29 : EXT_29 + * D30 : EXT_27 + * D31 : EXT_32 + * D32 : EXT_33 + * D33 : EXT_34 + * D34 : EXT_35 + * D35 : EXT_36 + * D36 : EXT_38 + * D37 : EXT_39 + * D38 : EXT_40 + * D39 : EXT_44 + * D40 : EXT_41 + * D41 : EXT_31 + * D42 : EXT_37 + * D43 : EXT_42 + * D44 : EXT_43 + * D45 : EXT_45 + * D46 : EXT_46 + * D47 : EXT_47 + * D48 : EXT_48 + * D49 : EXT_49 + * D50 : EXT_50 + * D51 : EXT_51 + * + * UART_3_RX : D0 + * UART_3_TX : D1 + * SPI_3_CS : D10 + * SPI_3_MOSI : D11 + * SPI_3_MISO : D12 + * SPI_3_SCLK : D13 + * I2C_3_SDA : D14 + * I2C_3_SCL : D15 + * UART_4_RX : D26 + * UART_4_TX : D30 + * SPI_4_CS : D36 + * SPI_4_MOSI : D37 + * SPI_4_MISO : D38 + * SPI_4_SCK : D39 + * I2C_4_SDA : D40 + * I2C_4_SCL : D41 + * + */ +static void arm_mps2_pinmux_defaults(void) +{ + uint32_t gpio_0 = 0; + uint32_t gpio_1 = 0; + uint32_t gpio_2 = 0; + + /* Set GPIO Alternate Functions */ + + gpio_0 = (1<<0) /* Shield 0 UART 3 RXD */ + | (1<<4) /* Shield 0 UART 3 TXD */ + | (1<<5) /* Shield 0 I2C 3 SDL SBCON2 */ + | (1<<15) /* Shield 0 I2C 3 SDA SBCON2 */ + | (1<<11) /* Shield 0 SPI 3 nCS */ + | (1<<12) /* Shield 0 SPI 3 MOSI */ + | (1<<13) /* Shield 0 SPI 3 MISO */ + | (1<<14); /* Shield 0 SPI 3 SCK */ + + CMSDK_AHB_GPIO0_DEV->altfuncset = gpio_0; + + gpio_1 = (1<<10) /* Shield 1 UART 4 RXD */ + | (1<<14) /* Shield 1 UART 4 TXD */ + | (1<<15) /* Shield 1 I2C 4 SCL */ + | (1<<0) /* ADC SPI_1 nCS */ + | (1<<1) /* ADC SPI_1 MOSI */ + | (1<<2) /* ADC SPI_1 MISO */ + | (1<<3) /* ADC SPI_1 SCK */ + | (1<<5) /* USER BUTTON 0 */ + | (1<<6); /* USER BUTTON 1 */ + + CMSDK_AHB_GPIO1_DEV->altfuncset = gpio_1; + + gpio_2 = (1<<9) /* Shield 1 I2C 4 SDA */ + | (1<<6) /* Shield 1 I2C 4 SDA */ + | (1<<7) /* Shield 1 I2C 4 SDA */ + | (1<<8) /* Shield 1 I2C 4 SDA */ + | (1<<12); /* Shield 1 I2C 4 SDA */ + + CMSDK_AHB_GPIO2_DEV->altfuncset = gpio_2; +} + +static int arm_mps2_pinmux_init(struct device *port) +{ + ARG_UNUSED(port); + + arm_mps2_pinmux_defaults(); + + return 0; +} + +SYS_INIT(arm_mps2_pinmux_init, PRE_KERNEL_1, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); |