periphmraa: fix pwm init sequence
Signed-off-by: Sanrio Alvares <sanrio.alvares@intel.com> Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit is contained in:
@@ -86,6 +86,7 @@ typedef struct {
|
||||
|
||||
mraa_pwm_context (*pwm_init_replace) (int pin);
|
||||
mraa_pwm_context (*pwm_init_internal_replace) (void* func_table, int pin);
|
||||
mraa_result_t (*pwm_init_raw_replace) (mraa_pwm_context dev, int pin);
|
||||
mraa_result_t (*pwm_init_pre) (int pin);
|
||||
mraa_result_t (*pwm_init_post) (mraa_pwm_context pwm);
|
||||
mraa_result_t (*pwm_period_replace) (mraa_pwm_context dev, int period);
|
||||
|
||||
@@ -41,16 +41,15 @@ int uart_busses_count = 0;
|
||||
char **pwm_devices = NULL;
|
||||
int pwm_dev_count = 0;
|
||||
|
||||
static mraa_pwm_context
|
||||
mraa_pman_pwm_init_replace(int pin)
|
||||
static mraa_result_t
|
||||
mraa_pman_pwm_init_raw_replace(mraa_pwm_context dev, int pin)
|
||||
{
|
||||
mraa_pwm_context dev = (mraa_pwm_context) calloc(1, sizeof(struct _pwm));
|
||||
if (APeripheralManagerClient_openPwm(client, pwm_devices[pin], &dev->bpwm) != 0) {
|
||||
APwm_delete(dev->bpwm);
|
||||
return NULL;
|
||||
return MRAA_ERROR_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
return dev;
|
||||
return MRAA_SUCCESS;
|
||||
}
|
||||
|
||||
static mraa_result_t
|
||||
@@ -866,7 +865,7 @@ mraa_peripheralman_plat_init()
|
||||
b->adv_func->uart_write_replace = &mraa_pman_uart_write_replace;
|
||||
b->adv_func->uart_read_replace = &mraa_pman_uart_read_replace;
|
||||
|
||||
b->adv_func->pwm_init_replace = &mraa_pman_pwm_init_replace;
|
||||
b->adv_func->pwm_init_raw_replace = &mraa_pman_pwm_init_raw_replace;
|
||||
b->adv_func->pwm_period_replace = &mraa_pman_pwm_period_replace;
|
||||
b->adv_func->pwm_duty_cycle_replace = &mraa_pman_pwm_duty_cycle_replace;
|
||||
b->adv_func->pwm_enable_replace = &mraa_pman_pwm_enable_replace;
|
||||
|
||||
@@ -233,6 +233,7 @@ mraa_pwm_init(int pin)
|
||||
syslog(LOG_ERR, "pwm_init: pin %i beyond platform definition", pin);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (board->pins[pin].capabilities.pwm != 1) {
|
||||
syslog(LOG_ERR, "pwm_init: pin %i not capable of pwm", pin);
|
||||
return NULL;
|
||||
@@ -274,9 +275,23 @@ mraa_pwm_init(int pin)
|
||||
mraa_pwm_context
|
||||
mraa_pwm_init_raw(int chipin, int pin)
|
||||
{
|
||||
mraa_result_t status = MRAA_SUCCESS;
|
||||
|
||||
mraa_pwm_context dev = mraa_pwm_init_internal(plat == NULL ? NULL : plat->adv_func , chipin, pin);
|
||||
if (dev == NULL)
|
||||
if (dev == NULL) {
|
||||
syslog(LOG_CRIT, "pwm: Failed to allocate memory for context");
|
||||
status = MRAA_ERROR_NO_RESOURCES;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (IS_FUNC_DEFINED(dev, pwm_init_raw_replace)) {
|
||||
status = dev->advance_func->pwm_init_raw_replace(dev, pin);
|
||||
if (status == MRAA_SUCCESS) {
|
||||
return dev;
|
||||
} else {
|
||||
goto init_raw_cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
char directory[MAX_SIZE];
|
||||
snprintf(directory, MAX_SIZE, SYSFS_PWM "/pwmchip%d/pwm%d", dev->chipid, dev->pin);
|
||||
@@ -306,7 +321,17 @@ mraa_pwm_init_raw(int chipin, int pin)
|
||||
mraa_pwm_period_us(dev, plat->pwm_default_period);
|
||||
close(export_f);
|
||||
}
|
||||
|
||||
mraa_pwm_setup_duty_fp(dev);
|
||||
|
||||
init_raw_cleanup:
|
||||
if (status != MRAA_SUCCESS) {
|
||||
if (dev != NULL) {
|
||||
free(dev);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user