From 5d7c85c7a148f21ef905bf04a4b57cfb83b29229 Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Thu, 6 Nov 2014 17:32:31 +0000 Subject: [PATCH] pwm: move pwm setup to module Signed-off-by: Thomas Ingleby --- include/mraa_internal.h | 8 -------- src/mraa.c | 34 ---------------------------------- src/pwm/pwm.c | 47 +++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 41 insertions(+), 48 deletions(-) diff --git a/include/mraa_internal.h b/include/mraa_internal.h index fa026ff..f301bed 100644 --- a/include/mraa_internal.h +++ b/include/mraa_internal.h @@ -46,14 +46,6 @@ extern mraa_board_t* plat; mraa_result_t mraa_setup_mux_mapped(mraa_pin_t meta); /** - * Will check input is valid for pwm and will also setup required multiplexers. - * IF the pin also does gpio (strong chance), DO NOTHING, REV D quirk - * @param pin the pin as read from the board surface. - * @return the pwm pin_info_t of that IO pin - */ -mraa_pin_t* mraa_setup_pwm(int pin); - -/** * Setup gpio mux to go straight to SoC, galileo. * * @param pin physical pin to use diff --git a/src/mraa.c b/src/mraa.c index f1cf70c..bd22ee8 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -165,40 +165,6 @@ mraa_setup_mux_mapped(mraa_pin_t meta) return MRAA_SUCCESS; } -mraa_pin_t* -mraa_setup_pwm(int pin) -{ - if (plat == NULL) - return NULL; - - if (plat->pins[pin].capabilites.pwm != 1) - return NULL; - - if (plat->pins[pin].capabilites.gpio == 1) { - mraa_gpio_context mux_i; - mux_i = mraa_gpio_init_raw(plat->pins[pin].gpio.pinmap); - if (mux_i == NULL) - return NULL; - if (mraa_gpio_dir(mux_i, MRAA_GPIO_OUT) != MRAA_SUCCESS) - return NULL; - // Current REV D quirk. //TODO GEN 2 - if (mraa_gpio_write(mux_i, 1) != MRAA_SUCCESS) - return NULL; - if (mraa_gpio_close(mux_i) != MRAA_SUCCESS) - return NULL; - } - - if (plat->pins[pin].pwm.mux_total > 0) - if (mraa_setup_mux_mapped(plat->pins[pin].pwm) != MRAA_SUCCESS) - return NULL; - - mraa_pin_t *ret; - ret = (mraa_pin_t*) malloc(sizeof(mraa_pin_t)); - ret->pinmap = plat->pins[pin].pwm.pinmap; - ret->parent_id = plat->pins[pin].pwm.parent_id; - return ret; -} - void mraa_result_print(mraa_result_t result) { diff --git a/src/pwm/pwm.c b/src/pwm/pwm.c index dc8b058..7cefbfc 100644 --- a/src/pwm/pwm.c +++ b/src/pwm/pwm.c @@ -142,17 +142,52 @@ mraa_pwm_read_duty(mraa_pwm_context dev) } mraa_pwm_context -mraa_pwm_init(int pin) { +mraa_pwm_init(int pin) +{ if (advance_func->pwm_init_pre != NULL) { if (advance_func->pwm_init_pre(pin) != MRAA_SUCCESS) return NULL; } - mraa_pin_t* pinm = mraa_setup_pwm(pin); - if (pinm == NULL) + if (plat == NULL) { + syslog(LOG_ERR, "pwm: Platform Not Initialised"); + return NULL; + } + if (plat->pins[pin].capabilites.pwm != 1) { + syslog(LOG_ERR, "pwm: pin not capable of pwm"); return NULL; - int chip = pinm->parent_id; - int pinn = pinm->pinmap; - free(pinm); + } + + if (plat->pins[pin].capabilites.gpio == 1) { + // This deserves more investigation + mraa_gpio_context mux_i; + mux_i = mraa_gpio_init_raw(plat->pins[pin].gpio.pinmap); + if (mux_i == NULL) { + syslog(LOG_ERR, "pwm: error in gpio->pwm transition"); + return NULL; + } + if (mraa_gpio_dir(mux_i, MRAA_GPIO_OUT) != MRAA_SUCCESS) { + syslog(LOG_ERR, "pwm: error in gpio->pwm transition"); + return NULL; + } + if (mraa_gpio_write(mux_i, 1) != MRAA_SUCCESS) { + syslog(LOG_ERR, "pwm: error in gpio->pwm transition"); + return NULL; + } + if (mraa_gpio_close(mux_i) != MRAA_SUCCESS) { + syslog(LOG_ERR, "pwm: error in gpio->pwm transition"); + return NULL; + } + } + + if (plat->pins[pin].pwm.mux_total > 0) { + if (mraa_setup_mux_mapped(plat->pins[pin].pwm) != MRAA_SUCCESS) { + syslog(LOG_ERR, "pwm: Failed to set-up multiplexer"); + return NULL; + } + } + + int chip = plat->pins[pin].pwm.parent_id; + int pinn = plat->pins[pin].pwm.pinmap; if (advance_func->pwm_init_post != NULL) { mraa_pwm_context pret = mraa_pwm_init_raw(chip,pinn); -- 2.7.4