From cfed0e33cc2b30962a5d514ee63ac89d90a246e4 Mon Sep 17 00:00:00 2001
From: Hauke Petersen <hauke.petersen@fu-berlin.de>
Date: Sat, 20 Feb 2016 13:28:42 +0100
Subject: [PATCH] cpu/cc2538: adapted to GPIO inerface changes

---
 cpu/cc2538/periph/gpio.c | 44 ++++++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 18 deletions(-)

diff --git a/cpu/cc2538/periph/gpio.c b/cpu/cc2538/periph/gpio.c
index 38fa2f5a7a..c9823954d4 100644
--- a/cpu/cc2538/periph/gpio.c
+++ b/cpu/cc2538/periph/gpio.c
@@ -343,13 +343,7 @@ static const uint8_t reverse_pin_lut[] = {
 #endif
 };
 
-static const uint32_t ioc_mask_lut[] = {
-    [GPIO_NOPULL  ] = IOC_OVERRIDE_DIS,
-    [GPIO_PULLUP  ] = IOC_OVERRIDE_PUE,
-    [GPIO_PULLDOWN] = IOC_OVERRIDE_PDE,
-};
-
-int gpio_init(gpio_t dev, gpio_dir_t dir, gpio_pp_t pushpull)
+int gpio_init(gpio_t dev, gpio_mode_t mode)
 {
     int pin;
 
@@ -360,28 +354,42 @@ int gpio_init(gpio_t dev, gpio_dir_t dir, gpio_pp_t pushpull)
     pin = pin_lut[dev];
     gpio_software_control(pin);
 
-    if (dir == GPIO_DIR_OUT) {
-        gpio_dir_output(pin);
-        /* configure the pin's pull resistor state */
-        IOC_PXX_OVER[pin] = IOC_OVERRIDE_OE | ioc_mask_lut[pushpull];
-    }
-    else {
-        gpio_dir_input(pin);
-        /* configure the pin's pull resistor state */
-        IOC_PXX_OVER[pin] = ioc_mask_lut[pushpull];
+    switch (mode) {
+        case GPIO_IN:
+            gpio_dir_input(pin);
+            /* configure the pin's pull resistor state */
+            IOC_PXX_OVER[pin] = (IOC_OVERRIDE_DIS);
+            break;
+        case GPIO_IN_PD:
+            gpio_dir_input(pin);
+            /* configure the pin's pull resistor state */
+            IOC_PXX_OVER[pin] = (IOC_OVERRIDE_PDE);
+            break;
+        case GPIO_IN_PU:
+            gpio_dir_input(pin);
+            /* configure the pin's pull resistor state */
+            IOC_PXX_OVER[pin] = (IOC_OVERRIDE_PUE);
+        case GPIO_OUT:
+            gpio_dir_output(pin);
+            /* configure the pin's pull resistor state */
+            IOC_PXX_OVER[pin] = (IOC_OVERRIDE_OE | IOC_OVERRIDE_DIS);
+            break;
+        default:
+            return -1;
     }
 
     return 0;
 }
 
-int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb, void *arg)
+int gpio_init_int(gpio_t dev, gpio_mode_t mode, gpio_flank_t flank,
+                  gpio_cb_t cb, void *arg)
 {
     int res, pin, irq_num;
     uint32_t mask;
     cc2538_gpio_t* instance;
 
     /* Note: gpio_init() also checks if the gpio is enabled. */
-    res = gpio_init(dev, GPIO_DIR_IN, pullup);
+    res = gpio_init(dev, mode);
     if (res < 0) {
         return res;
     }
-- 
GitLab