pwm: move pwm setup to module
Signed-off-by: Thomas Ingleby <thomas.c.ingleby@intel.com>
This commit is contained in:
@@ -45,14 +45,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.
|
||||
*
|
||||
|
||||
34
src/mraa.c
34
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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
int chip = pinm->parent_id;
|
||||
int pinn = pinm->pinmap;
|
||||
free(pinm);
|
||||
}
|
||||
if (plat->pins[pin].capabilites.pwm != 1) {
|
||||
syslog(LOG_ERR, "pwm: pin not capable of pwm");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user