1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036 |
- diff --git a/package/mraa/0001-gpio-Fix-JS-binding-regarding-interrupt-injections.patch b/package/mraa/0001-gpio-Fix-JS-binding-regarding-interrupt-injections.patch
- new file mode 100644
- index 0000000000..d8dc029b62
- --- /dev/null
- +++ b/package/mraa/0001-gpio-Fix-JS-binding-regarding-interrupt-injections.patch
- @@ -0,0 +1,135 @@
- +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- +From: Jan Kiszka <jan.kiszka@siemens.com>
- +Date: Mon, 5 Dec 2022 11:45:15 +0100
- +Subject: [PATCH] gpio: Fix JS binding regarding interrupt injections
- +
- +According to [1] and based on stress tests, it is not correct to call
- +uv_queue_work outside of the loop thread. We rather need to use the
- +async API of libuv. That even simplifies things.
- +
- +Resolves "uv__queue_done: Assertion `uv__has_active_reqs(req->loop)' failed"
- +errors that were easy to trigger by multiple DIs being used in parallel.
- +See also [2].
- +
- +[1] https://github.com/libuv/libuv/discussions/3847
- +[2] https://github.com/siemens/meta-iot2050/issues/386
- +
- +Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
- +---
- + api/mraa/gpio.hpp | 37 +++++++++++++++++++++----------------
- + 1 file changed, 21 insertions(+), 16 deletions(-)
- +
- +diff --git a/api/mraa/gpio.hpp b/api/mraa/gpio.hpp
- +index 8fc0881..c41d527 100644
- +--- a/api/mraa/gpio.hpp
- ++++ b/api/mraa/gpio.hpp
- +@@ -31,10 +31,10 @@
- + #include <stdexcept>
- +
- + #if defined(SWIGJAVASCRIPT)
- +-#if NODE_MODULE_VERSION >= 0x000D
- + #include <uv.h>
- + #endif
- +-#endif
- ++
- ++#define container_of(ptr, type, member) ((type*) ((char*) (ptr) - offsetof(type, member)))
- +
- + namespace mraa
- + {
- +@@ -124,6 +124,10 @@ class Gpio
- + if (!owner) {
- + mraa_gpio_owner(m_gpio, 0);
- + }
- ++
- ++#if defined(SWIGJAVASCRIPT)
- ++ uv_async_init(uv_default_loop(), &m_async, v8isr);
- ++#endif
- + }
- + /**
- + * Gpio Constructor, takes a pointer to the GPIO context and initialises
- +@@ -137,6 +141,9 @@ class Gpio
- + if (m_gpio == NULL) {
- + throw std::invalid_argument("Invalid GPIO context");
- + }
- ++#if defined(SWIGJAVASCRIPT)
- ++ uv_async_init(uv_default_loop(), &m_async, v8isr);
- ++#endif
- + }
- + /**
- + * Gpio object destructor, this will only unexport the gpio if we where
- +@@ -146,6 +153,9 @@ class Gpio
- + {
- + if (m_gpio != NULL) {
- + mraa_gpio_close(m_gpio);
- ++#if defined(SWIGJAVASCRIPT)
- ++ uv_close((uv_handle_t*) &m_async, NULL);
- ++#endif
- + }
- + }
- + /**
- +@@ -156,6 +166,9 @@ class Gpio
- + {
- + mraa_gpio_close(m_gpio);
- + m_gpio = NULL;
- ++#if defined(SWIGJAVASCRIPT)
- ++ uv_close((uv_handle_t*) &m_async, NULL);
- ++#endif
- + }
- + /**
- + * Set the edge mode for ISR
- +@@ -176,12 +189,12 @@ class Gpio
- + }
- + #elif defined(SWIGJAVASCRIPT)
- + static void
- +- v8isr(uv_work_t* req, int status)
- ++ v8isr(uv_async_t* async)
- + {
- + #if NODE_MODULE_VERSION >= 0x000D
- + v8::HandleScope scope(v8::Isolate::GetCurrent());
- + #endif
- +- mraa::Gpio* This = (mraa::Gpio*) req->data;
- ++ mraa::Gpio* This = container_of(async, mraa::Gpio, m_async);
- + int argc = 1;
- + v8::Local<v8::Value> argv[] = { SWIGV8_INTEGER_NEW(-1) };
- + #if NODE_MODULE_VERSION >= 0x000D
- +@@ -194,21 +207,12 @@ class Gpio
- + #else
- + This->m_v8isr->Call(SWIGV8_CURRENT_CONTEXT()->Global(), argc, argv);
- + #endif
- +- delete req;
- +- }
- +-
- +- static void
- +- nop(uv_work_t* req)
- +- {
- +- // Do nothing.
- + }
- +
- + static void
- +- uvwork(void* ctx)
- ++ trigger_async(void* async)
- + {
- +- uv_work_t* req = new uv_work_t;
- +- req->data = ctx;
- +- uv_queue_work(uv_default_loop(), req, nop, v8isr);
- ++ uv_async_send((uv_async_t*) async);
- + }
- +
- + Result
- +@@ -219,7 +223,7 @@ class Gpio
- + #else
- + m_v8isr = v8::Persistent<v8::Function>::New(func);
- + #endif
- +- return (Result) mraa_gpio_isr(m_gpio, (mraa_gpio_edge_t) mode, &uvwork, this);
- ++ return (Result) mraa_gpio_isr(m_gpio, (mraa_gpio_edge_t) mode, trigger_async, &m_async);
- + }
- + #elif defined(SWIGJAVA) || defined(JAVACALLBACK)
- + Result
- +@@ -376,6 +380,7 @@ class Gpio
- + private:
- + mraa_gpio_context m_gpio;
- + #if defined(SWIGJAVASCRIPT)
- ++ uv_async_t m_async;
- + v8::Persistent<v8::Function> m_v8isr;
- + #endif
- + };
- diff --git a/package/mraa/0001-include-Declare-gVERSION-global-as-extern.patch b/package/mraa/0001-include-Declare-gVERSION-global-as-extern.patch
- deleted file mode 100644
- index 110c020a62..0000000000
- --- a/package/mraa/0001-include-Declare-gVERSION-global-as-extern.patch
- +++ /dev/null
- @@ -1,30 +0,0 @@
- -From aaa0a5cd4e401bde4fb3691dd4e6c70a5c61e031 Mon Sep 17 00:00:00 2001
- -From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82@fedoraproject.org>
- -Date: Mon, 13 Apr 2020 20:12:11 +0200
- -Subject: [PATCH] include: Declare gVERSION global as 'extern'.
- -
- -Fixes build with '-fno-common'.
- -
- -Signed-off-by: Thomas Ingleby <thomas.ingleby@intel.com>
- -[Retrieved from:
- -https://github.com/eclipse/mraa/commit/aaa0a5cd4e401bde4fb3691dd4e6c70a5c61e031]
- -Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
- ----
- - include/version.h | 4 ++--
- - 1 file changed, 2 insertions(+), 2 deletions(-)
- -
- -diff --git a/include/version.h b/include/version.h
- -index 47366ef6f..3a567a1d5 100644
- ---- a/include/version.h
- -+++ b/include/version.h
- -@@ -11,8 +11,8 @@
- - extern "C" {
- - #endif
- -
- --const char* gVERSION;
- --const char* gVERSION_SHORT;
- -+extern const char* gVERSION;
- -+extern const char* gVERSION_SHORT;
- -
- - #ifdef __cplusplus
- - }
- diff --git a/package/mraa/0002-common-increase-pin-name-size.patch b/package/mraa/0002-common-increase-pin-name-size.patch
- new file mode 100644
- index 0000000000..c2aaa57e79
- --- /dev/null
- +++ b/package/mraa/0002-common-increase-pin-name-size.patch
- @@ -0,0 +1,27 @@
- +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- +From: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
- +Date: Mon, 27 Feb 2023 16:31:13 +0100
- +Subject: [PATCH] common: increase pin name size
- +
- +Some pin names are longer than 12 characters.
- +32 characters should be enough while consuming not too
- +much space.
- +
- +Signed-off-by: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
- +---
- + api/mraa/common.h | 2 +-
- + 1 file changed, 1 insertion(+), 1 deletion(-)
- +
- +diff --git a/api/mraa/common.h b/api/mraa/common.h
- +index 6675f2d15771..13df2f1681fe 100644
- +--- a/api/mraa/common.h
- ++++ b/api/mraa/common.h
- +@@ -32,7 +32,7 @@
- + /** Max size off Mraa Platform name */
- + #define MRAA_PLATFORM_NAME_MAX_SIZE 64
- + /** Size off Mraa pin name */
- +-#define MRAA_PIN_NAME_SIZE 12
- ++#define MRAA_PIN_NAME_SIZE 32
- +
- + /** Bit Shift for Mraa sub platform */
- + #define MRAA_SUB_PLATFORM_BIT_SHIFT 9
- diff --git a/package/mraa/0003-iot2050-add-debugfs-pinmux-support.patch b/package/mraa/0003-iot2050-add-debugfs-pinmux-support.patch
- new file mode 100644
- index 0000000000..b363fe1bfe
- --- /dev/null
- +++ b/package/mraa/0003-iot2050-add-debugfs-pinmux-support.patch
- @@ -0,0 +1,796 @@
- +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- +From: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
- +Date: Thu, 23 Mar 2023 10:21:58 +0100
- +Subject: [PATCH] iot2050: add debugfs pinmux support
- +
- +This patch adds support for multiplexing pins via debugfs rather
- +than access memory mapped pad-configuration registers.
- +The debugfs pinmux offers the possbility to run mraa on iot2050
- +platforms as regular user instead of root by adjusting privileges
- +on debugfs files.
- +
- +Bias settings are currently also configured by accessing pinmux.
- +Unfortunatelly a proper upstream-like pinconf usage is currently
- +not possible.
- +
- +Note: In case debugfs mux fails MRAA falls back to mmap mux.
- +
- +Signed-off-by: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
- +---
- + src/arm/siemens/iot2050.c | 547 ++++++++++++++++++++++++++++++++++++-
- + src/arm/siemens/platform.c | 4 +-
- + 2 files changed, 540 insertions(+), 11 deletions(-)
- +
- +diff --git a/src/arm/siemens/iot2050.c b/src/arm/siemens/iot2050.c
- +index cec25faf0547..c63400d6b692 100644
- +--- a/src/arm/siemens/iot2050.c
- ++++ b/src/arm/siemens/iot2050.c
- +@@ -24,6 +24,7 @@
- + #include <stdlib.h>
- + #include <string.h>
- + #include <sys/mman.h>
- ++#include <limits.h>
- + #include <mraa/types.h>
- +
- + #include "common.h"
- +@@ -39,6 +40,9 @@ typedef struct {
- + uint16_t index;
- + uint16_t pinmap;
- + int8_t mode[MAX_MUX_REGISTER_MODE];
- ++ const char *debugfs_path[MAX_MUX_REGISTER_MODE];
- ++ const char *pmx_function[MAX_MUX_REGISTER_MODE];
- ++ const char *pmx_group[MAX_MUX_REGISTER_MODE];
- + }regmux_info_t;
- +
- + static void *pinmux_instance = NULL;
- +@@ -75,30 +79,126 @@ iot2050_get_regmux_by_pinmap(int pinmap)
- + return NULL;
- + }
- +
- ++static mraa_result_t
- ++iot2050_mux_debugfs(const char *base_dir, const char *group, const char *function, mraa_gpio_mode_t gpio_mode)
- ++{
- ++ FILE *fd = NULL;
- ++ char p_pinmux[PATH_MAX];
- ++ char mux[MRAA_PIN_NAME_SIZE];
- ++ int ret;
- ++
- ++ syslog(LOG_DEBUG, "iot2050: debugfs: enter\n");
- ++
- ++ if (!base_dir || !group || !function) {
- ++ syslog(LOG_ERR, "iot2050: debugfs: Invalid parameter base_dir=%s, group=%s, function=%s!\n", base_dir, group, function);
- ++ return MRAA_ERROR_INVALID_PARAMETER;
- ++ }
- ++
- ++ ret = snprintf(p_pinmux, PATH_MAX, "/sys/kernel/debug/pinctrl/%s/pinmux-select", base_dir);
- ++ if (ret < 0) {
- ++ ret = MRAA_ERROR_UNSPECIFIED;
- ++ goto err;
- ++ }
- ++
- ++ fd = fopen(p_pinmux, "w");
- ++ if (!fd) {
- ++ ret = MRAA_ERROR_INVALID_RESOURCE;
- ++ goto err;
- ++ }
- ++
- ++ switch (gpio_mode) {
- ++ case MRAA_GPIO_PULLUP:
- ++ snprintf(mux, MRAA_PIN_NAME_SIZE, "%s-%s", group, "pullup");
- ++ break;
- ++ case MRAA_GPIO_PULLDOWN:
- ++ snprintf(mux, MRAA_PIN_NAME_SIZE, "%s-%s", group, "pulldown");
- ++ break;
- ++ default:
- ++ strncpy(mux, group, MRAA_PIN_NAME_SIZE);
- ++ }
- ++
- ++ syslog(LOG_DEBUG, "iot2050: debugfs: group: %s, function: %s\n", mux, mux);
- ++
- ++ ret = fprintf(fd, "%s %s\n", mux, mux);
- ++ if (ret < 0) {
- ++ ret = MRAA_ERROR_UNSPECIFIED;
- ++ goto err_close;
- ++ }
- ++
- ++ fclose(fd);
- ++ return MRAA_SUCCESS;
- ++
- ++err_close:
- ++ fclose(fd);
- ++err:
- ++ syslog(LOG_ERR, "iot2050: debugfs: Pinmux failed(%d)! group: %s, function: %s", ret, group, function);
- ++ return ret;
- ++}
- ++
- ++static mraa_result_t
- ++iot2050_mux_mmap(int phy_pin, int mode, mraa_gpio_mode_t gpio_mode)
- ++{
- ++ int8_t mux_mode;
- ++ regmux_info_t *info = &pinmux_info[phy_pin];
- ++
- ++ syslog(LOG_ERR, "iot2050: mmap: Debugfs pinmux failed! Falling back to mmap!");
- ++
- ++ pinmux_instance = platfrom_pinmux_get_instance("iot2050");
- ++ if (!pinmux_instance) {
- ++ syslog(LOG_ERR, "iot2050: mmap: Pinmux failed! Can't get pinmux instance!");
- ++ return MRAA_ERROR_INVALID_RESOURCE;
- ++ }
- ++
- ++ mux_mode = info->mode[mode];
- ++ if (mux_mode < 0) {
- ++ return MRAA_ERROR_FEATURE_NOT_SUPPORTED;
- ++ }
- ++
- ++ syslog(LOG_DEBUG, "REGMUX[phy_pin %d] group %d index %d mode %d\n", phy_pin, info->group, info->index, mux_mode);
- ++
- ++ platform_pinmux_select_func(pinmux_instance, info->group, info->index, mux_mode);
- ++ /* Configure as input and output for default */
- ++ platform_pinmux_select_inout(pinmux_instance, info->group, info->index);
- ++
- ++ switch (gpio_mode) {
- ++ case MRAA_GPIO_PULLUP:
- ++ platform_pinmux_select_pull_up(pinmux_instance, info->group, info->index);
- ++ break;
- ++ case MRAA_GPIO_PULLDOWN:
- ++ platform_pinmux_select_pull_down(pinmux_instance, info->group, info->index);
- ++ break;
- ++ default:
- ++ break;
- ++ }
- ++ return MRAA_SUCCESS;
- ++}
- ++
- ++
- + static mraa_result_t
- + iot2050_mux_init_reg(int phy_pin, int mode)
- + {
- + regmux_info_t *info = &pinmux_info[phy_pin];
- + int8_t mux_mode;
- ++ mraa_result_t ret;
- +
- + if((phy_pin < 0) || (phy_pin > MRAA_IOT2050_PINCOUNT))
- + return MRAA_SUCCESS;
- + if((mode < 0) || (mode >= MAX_MUX_REGISTER_MODE)) {
- + return MRAA_ERROR_FEATURE_NOT_SUPPORTED;
- + }
- +- if(mode == MUX_REGISTER_MODE_AIO) {
- ++ /* Dedicated SoC pins that have been statically defined in DTB */
- ++ if(mode == MUX_REGISTER_MODE_AIO || mode == MUX_REGISTER_MODE_I2C) {
- + return MRAA_SUCCESS;
- + }
- + mux_mode = info->mode[mode];
- + if(mux_mode < 0) {
- + return MRAA_ERROR_FEATURE_NOT_SUPPORTED;
- + }
- +- syslog(LOG_DEBUG, "REGMUX[phy_pin %d] group %d index %d mode %d\n", phy_pin, info->group, info->index, mux_mode);
- +
- +- platform_pinmux_select_func(pinmux_instance, info->group, info->index, mux_mode);
- +- /* Configure as input and output for default */
- +- platform_pinmux_select_inout(pinmux_instance, info->group, info->index);
- +- return MRAA_SUCCESS;
- ++ ret = iot2050_mux_debugfs(info->debugfs_path[mode], info->pmx_group[mode], info->pmx_function[mode], 0);
- ++ if (ret != MRAA_SUCCESS)
- ++ return iot2050_mux_mmap(phy_pin, mode, 0);
- ++ return ret;
- + }
- +
- + static mraa_result_t
- +@@ -172,7 +272,10 @@ iot2050_gpio_mode_replace(mraa_gpio_context dev, mraa_gpio_mode_t mode)
- + goto failed;
- + }
- + if(info) {
- +- platform_pinmux_select_pull_up(pinmux_instance, info->group, info->index);
- ++ ret = iot2050_mux_debugfs(info->debugfs_path[0], info->pmx_group[0], info->pmx_function[0], mode);
- ++ if (ret != MRAA_SUCCESS)
- ++ ret = iot2050_mux_mmap(dev->phy_pin, 0, mode);
- ++
- + }
- + break;
- + case MRAA_GPIO_PULLDOWN:
- +@@ -181,7 +284,9 @@ iot2050_gpio_mode_replace(mraa_gpio_context dev, mraa_gpio_mode_t mode)
- + goto failed;
- + }
- + if(info) {
- +- platform_pinmux_select_pull_down(pinmux_instance, info->group, info->index);
- ++ ret = iot2050_mux_debugfs(info->debugfs_path[0], info->pmx_group[0], info->pmx_function[0], mode);
- ++ if (ret != MRAA_SUCCESS)
- ++ ret = iot2050_mux_mmap(dev->phy_pin, 0, mode);
- + }
- + break;
- + case MRAA_GPIO_HIZ:
- +@@ -191,7 +296,9 @@ iot2050_gpio_mode_replace(mraa_gpio_context dev, mraa_gpio_mode_t mode)
- + goto failed;
- + }
- + if(info) {
- +- platform_pinmux_select_pull_disable(pinmux_instance, info->group, info->index);
- ++ ret = iot2050_mux_debugfs(info->debugfs_path[0], info->pmx_group[0], info->pmx_function[0], mode);
- ++ if (ret != MRAA_SUCCESS)
- ++ ret = iot2050_mux_mmap(dev->phy_pin, 0, mode);
- + }
- + break;
- + case MRAA_GPIOD_ACTIVE_LOW:
- +@@ -455,7 +562,7 @@ mraa_siemens_iot2050()
- + free(b->adv_func);
- + goto error;
- + }
- +- pinmux_instance = platfrom_pinmux_get_instance("iot2050");
- ++
- + /* IO */
- + iot2050_setup_pins(b, pin_index, "IO0",
- + (mraa_pincapabilities_t) {
- +@@ -477,6 +584,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "d0-gpio",
- ++ "d0-uart0-rxd",
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "d0-gpio",
- ++ "d0-uart0-rxd",
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- +
- +@@ -510,6 +638,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "d1-gpio",
- ++ "d1-uart0-txd",
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "d1-gpio",
- ++ "d1-uart0-txd",
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, wkup_gpio0_chip, 30, d4201_gpio_base+1, d4202_gpio_base+1, NULL, 0);
- +@@ -542,6 +691,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "d2-gpio",
- ++ "d2-uart0-ctsn",
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "d2-gpio",
- ++ "d2-uart0-ctsn",
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, wkup_gpio0_chip, 31, d4201_gpio_base+2, d4202_gpio_base+2, NULL, 0);
- +@@ -574,6 +744,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "d3-gpio",
- ++ "d3-uart0-rtsn",
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "d3-gpio",
- ++ "d3-uart0-rtsn",
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, wkup_gpio0_chip, 33, d4201_gpio_base+3, d4202_gpio_base+3, NULL, 0);
- +@@ -606,6 +797,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + 5 /*PWM*/
- ++ },
- ++ {
- ++ "11c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "11c000.pinctrl-pinctrl-single"
- ++ },
- ++ {
- ++ "d4-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d4-ehrpwm0-a"
- ++ },
- ++ {
- ++ "d4-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d4-ehrpwm0-a"
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, main_gpio0_chip, 33, d4201_gpio_base+4, d4202_gpio_base+4, NULL, 0);
- +@@ -638,6 +850,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + 5 /*PWM*/
- ++ },
- ++ {
- ++ "11c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "11c000.pinctrl-pinctrl-single"
- ++ },
- ++ {
- ++ "d5-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d5-ehrpwm1-a"
- ++ },
- ++ {
- ++ "d5-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d5-ehrpwm1-a"
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, main_gpio0_chip, 35, d4201_gpio_base+5, d4202_gpio_base+5, NULL, 0);
- +@@ -670,6 +903,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + 5 /*PWM*/
- ++ },
- ++ {
- ++ "11c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "11c000.pinctrl-pinctrl-single"
- ++ },
- ++ {
- ++ "d6-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d6-ehrpwm2-a"
- ++ },
- ++ {
- ++ "d6-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d6-ehrpwm2-a"
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, main_gpio0_chip, 38, d4201_gpio_base+6, d4202_gpio_base+6, NULL, 0);
- +@@ -702,6 +956,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + 5 /*PWM*/
- ++ },
- ++ {
- ++ "11c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "11c000.pinctrl-pinctrl-single"
- ++ },
- ++ {
- ++ "d7-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d7-ehrpwm3-a"
- ++ },
- ++ {
- ++ "d7-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d7-ehrpwm3-a"
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, main_gpio0_chip, 43, d4201_gpio_base+7, d4202_gpio_base+7, NULL, 0);
- +@@ -734,6 +1009,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + 5 /*PWM*/
- ++ },
- ++ {
- ++ "11c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "11c000.pinctrl-pinctrl-single"
- ++ },
- ++ {
- ++ "d8-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d8-ehrpwm4-a"
- ++ },
- ++ {
- ++ "d8-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d8-ehrpwm4-a"
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, main_gpio0_chip, 48, d4201_gpio_base+8, d4202_gpio_base+8, NULL, 0);
- +@@ -766,6 +1062,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + 5 /*PWM*/
- ++ },
- ++ {
- ++ "11c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "11c000.pinctrl-pinctrl-single"
- ++ },
- ++ {
- ++ "d9-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d9-ehrpwm5-a"
- ++ },
- ++ {
- ++ "d9-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ "d9-ehrpwm5-a"
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, main_gpio0_chip, 51, d4201_gpio_base+9, d4202_gpio_base+9, NULL, 0);
- +@@ -798,6 +1115,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + 0, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL
- ++ },
- ++ {
- ++ "d10-gpio",
- ++ NULL,
- ++ NULL,
- ++ "d10-spi0-cs0",
- ++ NULL
- ++ },
- ++ {
- ++ "d10-gpio",
- ++ NULL,
- ++ NULL,
- ++ "d10-spi0-cs0",
- ++ NULL
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, wkup_gpio0_chip, 51, d4201_gpio_base+10, d4202_gpio_base+10, NULL, 0);
- +@@ -830,6 +1168,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + 0, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL
- ++ },
- ++ {
- ++ "d11-gpio",
- ++ NULL,
- ++ NULL,
- ++ "d11-spi0-d0",
- ++ NULL
- ++ },
- ++ {
- ++ "d11-gpio",
- ++ NULL,
- ++ NULL,
- ++ "d11-spi0-d0",
- ++ NULL
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, wkup_gpio0_chip, 49, d4201_gpio_base+11, d4202_gpio_base+11, NULL, 0);
- +@@ -862,6 +1221,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + 0, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL
- ++ },
- ++ {
- ++ "d12-gpio",
- ++ NULL,
- ++ NULL,
- ++ "d12-spi0-d1",
- ++ NULL
- ++ },
- ++ {
- ++ "d12-gpio",
- ++ NULL,
- ++ NULL,
- ++ "d12-spi0-d1",
- ++ NULL
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, wkup_gpio0_chip, 50, d4201_gpio_base+12, d4202_gpio_base+12, NULL, 0);
- +@@ -894,6 +1274,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + 0, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL
- ++ },
- ++ {
- ++ "d13-gpio",
- ++ NULL,
- ++ NULL,
- ++ "d13-spi0-clk",
- ++ NULL
- ++ },
- ++ {
- ++ "d13-gpio",
- ++ NULL,
- ++ NULL,
- ++ "d13-spi0-clk",
- ++ NULL
- + }
- + });
- + iot2050_pin_add_gpio(b, pin_index, wkup_gpio0_chip, 48, d4201_gpio_base+13, d4202_gpio_base+13, NULL, 0);
- +@@ -926,6 +1327,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a0-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a0-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- + mux_info[0].pin = d4200_gpio_base+8;
- +@@ -971,6 +1393,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a1-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a1-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- + mux_info[0].pin = d4200_gpio_base+9;
- +@@ -1016,6 +1459,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a2-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a2-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- + mux_info[0].pin = d4200_gpio_base+10;
- +@@ -1061,6 +1525,27 @@ mraa_siemens_iot2050()
- + -1, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a3-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a3-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- + mux_info[0].pin = d4200_gpio_base+11;
- +@@ -1106,6 +1591,27 @@ mraa_siemens_iot2050()
- + 0, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a4-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a4-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- + mux_info[0].pin = d4200_gpio_base+12;
- +@@ -1169,6 +1675,27 @@ mraa_siemens_iot2050()
- + 0, /*I2C*/
- + -1, /*SPI*/
- + -1 /*PWM*/
- ++ },
- ++ {
- ++ "4301c000.pinctrl-pinctrl-single",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a5-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- ++ },
- ++ {
- ++ "a5-gpio",
- ++ NULL,
- ++ NULL,
- ++ NULL,
- ++ NULL
- + }
- + });
- + mux_info[0].pin = d4200_gpio_base+13;
- +diff --git a/src/arm/siemens/platform.c b/src/arm/siemens/platform.c
- +index faa808a4c6d0..fb87a7f2c47a 100644
- +--- a/src/arm/siemens/platform.c
- ++++ b/src/arm/siemens/platform.c
- +@@ -35,7 +35,9 @@ platfrom_pinmux_get_instance(char *platform)
- + if((instance) && (instance->initialized == false) && (instance->ops.init)) {
- + return instance->ops.init()?instance:NULL;
- + }
- +- else {
- ++ else if((instance) && (instance->initialized == true)) {
- ++ return instance;
- ++ } else {
- + return NULL;
- + }
- + }
- diff --git a/package/mraa/mraa.hash b/package/mraa/mraa.hash
- deleted file mode 100644
- index 321b6409ed..0000000000
- --- a/package/mraa/mraa.hash
- +++ /dev/null
- @@ -1,3 +0,0 @@
- -# Locally calculated
- -sha256 076669bee8423ffef3065735b293a329020be86630fea457174dbfcc67a0554a mraa-2.2.0.tar.gz
- -sha256 fac52622ed3badd86b34857b21777ab90296d6ccbc2ac0fd457c09fdeefa9ef1 COPYING
- diff --git a/package/mraa/mraa.mk b/package/mraa/mraa.mk
- index 47178a423b..78db12120a 100644
- --- a/package/mraa/mraa.mk
- +++ b/package/mraa/mraa.mk
- @@ -4,8 +4,8 @@
- #
- ################################################################################
-
- -MRAA_VERSION = 2.2.0
- -MRAA_SITE = $(call github,eclipse,mraa,v$(MRAA_VERSION))
- +MRAA_VERSION = 8b1c54934e80edc2d36abac9d9c96fe1e01cb669
- +MRAA_SITE = $(call github,eclipse,mraa,$(MRAA_VERSION))
- MRAA_LICENSE = MIT
- MRAA_LICENSE_FILES = COPYING
- MRAA_INSTALL_STAGING = YES
|