From 8b1c54934e80edc2d36abac9d9c96fe1e01cb669 Mon Sep 17 00:00:00 2001 From: Jan Kiszka Date: Mon, 18 Jan 2021 09:14:35 +0100 Subject: [PATCH] iot2050: Add USER button A simple GPIO, no muxing needed, no pulling supported. Therefore, reject any mode changes that request pull up/down, ignore the others. Signed-off-by: Jan Kiszka --- include/arm/siemens/iot2050.h | 2 +- src/arm/siemens/iot2050.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/include/arm/siemens/iot2050.h b/include/arm/siemens/iot2050.h index 0acf0a0..76df024 100644 --- a/include/arm/siemens/iot2050.h +++ b/include/arm/siemens/iot2050.h @@ -30,7 +30,7 @@ extern "C" { #include "mraa_internal.h" #define PLATFORM_NAME "SIMATIC IOT2050" -#define MRAA_IOT2050_PINCOUNT (20) +#define MRAA_IOT2050_PINCOUNT 21 mraa_board_t * mraa_siemens_iot2050(); diff --git a/src/arm/siemens/iot2050.c b/src/arm/siemens/iot2050.c index 2f27475..cec25fa 100644 --- a/src/arm/siemens/iot2050.c +++ b/src/arm/siemens/iot2050.c @@ -154,6 +154,11 @@ iot2050_gpio_mode_replace(mraa_gpio_context dev, mraa_gpio_mode_t mode) ret = MRAA_ERROR_INVALID_RESOURCE; goto failed; } + /* Handle mode changes for interface pins without pull pin */ + if (pull_en_pins[dev->phy_pin] == -1) { + return (mode == MRAA_GPIO_STRONG || mode == MRAA_GPIO_HIZ) ? + MRAA_SUCCESS : MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; + } info = iot2050_get_regmux_by_pinmap(dev->pin); pull_en_pin = mraa_gpio_init_raw(pull_en_pins[dev->phy_pin]); if(pull_en_pin == NULL) { @@ -1207,6 +1212,25 @@ mraa_siemens_iot2050() iot2050_pin_add_aio(b, pin_index, 5, mux_info, 5); pin_index++; + iot2050_setup_pins(b, pin_index, "USER", + (mraa_pincapabilities_t) { + 1, /*valid*/ + 1, /*gpio*/ + 0, /*pwm*/ + 0, /*fast gpio*/ + 0, /*spi*/ + 0, /*i2c*/ + 0, /*aio*/ + 0}, /*uart*/ + (regmux_info_t) { + -1, + -1, + wkup_gpio0_base+25, + {} + }); + iot2050_pin_add_gpio(b, pin_index, wkup_gpio0_chip, 25, -1, -1, NULL, 0); + pin_index++; + /* UART */ iot2050_setup_uart(b, "UART0", "/dev/ttyS1", "IO0", "IO1", "IO2", "IO3"); b->def_uart_dev = 0;