diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index 86116a3..1c7b9a4 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -402,11 +402,9 @@ mraa_gpio_dir(mraa_gpio_context dev, gpio_dir_t dir) char bu[MAX_SIZE]; int length; - int out_switch = 0; switch(dir) { case MRAA_GPIO_OUT: length = snprintf(bu, sizeof(bu), "out"); - out_switch = 1; break; case MRAA_GPIO_IN: length = snprintf(bu, sizeof(bu), "in"); @@ -416,12 +414,6 @@ mraa_gpio_dir(mraa_gpio_context dev, gpio_dir_t dir) return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; } - if (dev->phy_pin >= 0) { - mraa_result_t swap_res = mraa_swap_complex_gpio(dev->phy_pin, out_switch); - if (swap_res != MRAA_SUCCESS) - return swap_res; - } - if (write(direction, bu, length*sizeof(char)) == -1) { close(direction); return MRAA_ERROR_INVALID_RESOURCE; diff --git a/src/intel_galileo_rev_g.c b/src/intel_galileo_rev_g.c index 2bbfe69..1b6dad1 100644 --- a/src/intel_galileo_rev_g.c +++ b/src/intel_galileo_rev_g.c @@ -29,6 +29,29 @@ #include "common.h" #include "intel_galileo_rev_g.h" +mraa_result_t +mraa_intel_galileo_gen2_dir_pre(mraa_gpio_context dev, gpio_dir_t dir) +{ + if (dev->phy_pin >= 0) { + int pin = dev->phy_pin; + if (plat->pins[pin].gpio.complex_cap.complex_pin != 1) + return MRAA_SUCCESS; + + if (plat->pins[pin].gpio.complex_cap.output_en == 1) { + mraa_gpio_context output_e; + output_e = mraa_gpio_init_raw(plat->pins[pin].gpio.output_enable); + if (mraa_gpio_dir(output_e, MRAA_GPIO_OUT) != MRAA_SUCCESS) + return MRAA_ERROR_INVALID_RESOURCE; + int output_val = 1; + if (dir == MRAA_GPIO_OUT) + output_val = 0; + if (mraa_gpio_write(output_e, output_val) != MRAA_SUCCESS) + return MRAA_ERROR_INVALID_RESOURCE; + } + } + return MRAA_SUCCESS; +} + mraa_board_t* mraa_intel_galileo_gen2() { @@ -42,6 +65,8 @@ mraa_intel_galileo_gen2() b->adc_raw = 12; b->adc_supported = 10; + advance_func->gpio_dir_pre = &mraa_intel_galileo_gen2_dir_pre; + b->pins = (mraa_pininfo_t*) malloc(sizeof(mraa_pininfo_t)*MRAA_INTEL_GALILEO_GEN_2_PINCOUNT); strncpy(b->pins[0].name, "IO0", 8); diff --git a/src/mraa.c b/src/mraa.c index e4ef939..c14f9ac 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -383,43 +383,6 @@ mraa_setup_mmap_gpio(int pin) return ret; } -mraa_result_t -mraa_swap_complex_gpio(int pin, int out) -{ - if (plat == NULL) - return MRAA_ERROR_INVALID_PLATFORM; - - switch (platform_type) { - case MRAA_INTEL_GALILEO_GEN2: - if (plat->pins[pin].gpio.complex_cap.complex_pin != 1) - return MRAA_SUCCESS; - if (plat->pins[pin].gpio.complex_cap.output_en == 1) { - mraa_gpio_context output_e; - output_e = mraa_gpio_init_raw(plat->pins[pin].gpio.output_enable); - if (mraa_gpio_dir(output_e, MRAA_GPIO_OUT) != MRAA_SUCCESS) - return MRAA_ERROR_INVALID_RESOURCE; - int output_val; - if (plat->pins[pin].gpio.complex_cap.output_en_high == 1) - output_val = out; - else - if (out == 1) - output_val = 0; - else - output_val = 1; - if (mraa_gpio_write(output_e, output_val) != MRAA_SUCCESS) - return MRAA_ERROR_INVALID_RESOURCE; - } - //if (plat->pins[pin].gpio.complex_cap.pullup_en == 1) { - // mraa_gpio_context pullup_e; - // pullup_e = mraa_gpio_init_raw(plat->pins[pin].gpio.pullup_enable); - // if (mraa_gpio_mode(pullup_e, MRAA_GPIO_HIZ) != MRAA_SUCCESS) - // return MRAA_ERROR_INVALID_RESOURCE; - //} - break; - default: return MRAA_SUCCESS; - } -} - mraa_platform_t mraa_get_platform_type() { return platform_type;