From c0f5ca1e10a81f06566699d2cb7674eb8d65c3ca Mon Sep 17 00:00:00 2001 From: Philippe G Date: Wed, 1 Dec 2021 14:28:32 -0800 Subject: [PATCH] fix expander as output (works now on 9535) --- components/services/led.c | 6 +++--- components/services/services.c | 8 ++++---- components/squeezelite/output_i2s.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/components/services/led.c b/components/services/led.c index a56f2797..ae6e3de4 100644 --- a/components/services/led.c +++ b/components/services/led.c @@ -181,9 +181,9 @@ bool led_config(int idx, gpio_num_t gpio, int onstate, int pwm) { leds[idx].onstate = onstate; leds[idx].pwm = -1; - if (pwm < 0) { - gpio_pad_select_gpio(gpio); - gpio_set_direction(gpio, GPIO_MODE_OUTPUT); + if (pwm < 0 || gpio >= GPIO_NUM_MAX) { + if (gpio < GPIO_NUM_MAX) gpio_pad_select_gpio(gpio); + gpio_set_direction_u(gpio, GPIO_MODE_OUTPUT); } else { leds[idx].channel = pwm_system.base_channel++; leds[idx].pwm = pwm_system.max * powf(pwm / 100.0, 3); diff --git a/components/services/services.c b/components/services/services.c index ea2b9b3c..53e71749 100644 --- a/components/services/services.c +++ b/components/services/services.c @@ -43,12 +43,12 @@ void set_power_gpio(int gpio, char *value) { bool parsed = true; if (!strcasecmp(value, "vcc") ) { - gpio_pad_select_gpio(gpio); - gpio_set_direction(gpio, GPIO_MODE_OUTPUT); + if (gpio < GPIO_NUM_MAX) gpio_pad_select_gpio(gpio); + gpio_set_direction_u(gpio, GPIO_MODE_OUTPUT); gpio_set_level_u(gpio, 1); } else if (!strcasecmp(value, "gnd")) { - gpio_pad_select_gpio(gpio); - gpio_set_direction(gpio, GPIO_MODE_OUTPUT); + if (gpio < GPIO_NUM_MAX) gpio_pad_select_gpio(gpio); + gpio_set_direction_u(gpio, GPIO_MODE_OUTPUT); gpio_set_level_u(gpio, 0); } else parsed = false; diff --git a/components/squeezelite/output_i2s.c b/components/squeezelite/output_i2s.c index db83a60b..931dec20 100644 --- a/components/squeezelite/output_i2s.c +++ b/components/squeezelite/output_i2s.c @@ -178,8 +178,8 @@ static void set_amp_gpio(int gpio, char *value) { amp_control.gpio = gpio; if ((p = strchr(value, ':')) != NULL) amp_control.active = atoi(p + 1); - gpio_pad_select_gpio(amp_control.gpio); - gpio_set_direction(amp_control.gpio, GPIO_MODE_OUTPUT); + if (amp_control.gpio < GPIO_NUM_MAX) gpio_pad_select_gpio(amp_control.gpio); + gpio_set_direction_u(amp_control.gpio, GPIO_MODE_OUTPUT); gpio_set_level_u(amp_control.gpio, !amp_control.active); LOG_INFO("setting amplifier GPIO %d (active:%d)", amp_control.gpio, amp_control.active);