Skip to content

Commit d8b9f64

Browse files
authored
Merge pull request #9580 from dhalbert/9.1.x-to-main-2024-08-29
Merge latest 9.1.x fixes to main
2 parents 99a30bd + 03011ef commit d8b9f64

File tree

31 files changed

+85
-59
lines changed

31 files changed

+85
-59
lines changed

.github/actions/upload_aws/action.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ runs:
2020
steps:
2121
- name: Upload to S3
2222
if: >-
23-
(github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') ||
24-
(github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
23+
(github.event_name == 'push' && github.repository_owner == 'adafruit') &&
24+
(github.ref == 'refs/heads/main' ||
25+
(startswith(github.ref, 'refs/heads/') && endswith(github.ref, '.x'))) ||
26+
(github.event_name == 'release' &&
27+
(github.event.action == 'published' || github.event.action == 'rerequested'))
2528
run: >-
2629
[ -z "$AWS_ACCESS_KEY_ID" ] ||
2730
aws s3 cp ${{ inputs.source }} s3://adafruit-circuit-python/bin/${{ inputs.destination }}

.readthedocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
version: 2
1010

1111
build:
12-
os: ubuntu-20.04
12+
os: ubuntu-24.04
1313
tools:
1414
python: "3"
1515
jobs:

ports/espressif/boards/adafruit_feather_esp32_v2/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@
1313
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1414
if (pin_number == 2) {
1515
// Turn on NeoPixel and I2C power by default.
16-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
17-
gpio_set_level(pin_number, true);
16+
config_pin_as_output_with_level(pin_number, true);
1817
return true;
1918
}
2019

ports/espressif/boards/adafruit_feather_esp32c6_4mbflash_nopsram/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1313
if (pin_number == 20) {
1414
// Turn on I2C power by default.
15-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
16-
gpio_set_level(pin_number, true);
15+
config_pin_as_output_with_level(pin_number, true);
1716
return true;
1817
}
1918

ports/espressif/boards/adafruit_feather_esp32s2_reverse_tft/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 7) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(pin_number, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/adafruit_feather_esp32s2_tft/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 21) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(pin_number, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/adafruit_feather_esp32s3_reverse_tft/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 7) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(pin_number, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/adafruit_feather_esp32s3_tft/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 21) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(pin_number, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/adafruit_itsybitsy_esp32/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1313
if (pin_number == 2) {
1414
// Turn on NeoPixel and I2C power by default.
15-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
16-
gpio_set_level(pin_number, true);
15+
config_pin_as_output_with_level(pin_number, true);
1716
return true;
1817
}
1918

ports/espressif/boards/arduino_nano_esp32s3/board.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@
1212
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1313
if (pin_number == 13) {
1414
// Set D13 LED to input when not in use
15-
gpio_set_direction(pin_number, GPIO_MODE_DEF_INPUT);
16-
gpio_set_pull_mode(pin_number, GPIO_PULLDOWN_ONLY);
15+
gpio_config_t cfg = {
16+
.pin_bit_mask = BIT64(pin_number),
17+
.mode = GPIO_MODE_INPUT,
18+
.pull_up_en = false,
19+
.pull_down_en = true,
20+
.intr_type = GPIO_INTR_DISABLE,
21+
};
22+
gpio_config(&cfg);
1723
return true;
1824
}
1925

ports/espressif/boards/arduino_nano_esp32s3_inverted_statusled/board.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@
1212
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1313
if (pin_number == 13) {
1414
// Set D13 LED to input when not in use
15-
gpio_set_direction(pin_number, GPIO_MODE_DEF_INPUT);
16-
gpio_set_pull_mode(pin_number, GPIO_PULLDOWN_ONLY);
15+
gpio_config_t cfg = {
16+
.pin_bit_mask = BIT64(pin_number),
17+
.mode = GPIO_MODE_INPUT,
18+
.pull_up_en = false,
19+
.pull_down_en = true,
20+
.intr_type = GPIO_INTR_DISABLE,
21+
};
22+
gpio_config(&cfg);
1723
return true;
1824
}
1925

ports/espressif/boards/cytron_maker_feather_aiot_s3/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
5757

5858
void reset_board(void) {
5959
// Turn on VP by default.
60-
gpio_set_direction(11, GPIO_MODE_DEF_OUTPUT);
61-
gpio_set_level(11, true);
60+
config_pin_as_output_with_level(11, true);
6261
}
6362

6463
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

ports/espressif/boards/hexky_s2/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 21) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(21, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(21, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/lilygo_tdisplay_s3/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
101101
// Override the I2C/TFT power pin reset to prevent resetting the display.
102102
if (pin_number == 15) {
103103
// Turn on TFT
104-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
105-
gpio_set_level(pin_number, true);
104+
config_pin_as_output_with_level(pin_number, true);
106105
return true;
107106
}
108107
return false;

ports/espressif/boards/lilygo_twatch_2020_v3/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,7 @@ void board_init(void) {
131131
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
132132
if (pin_number == MOTOR_PIN) {
133133
// no motor
134-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
135-
gpio_set_level(pin_number, false);
134+
config_pin_as_output_with_level(pin_number, false);
136135
return true;
137136
}
138137
return false;

ports/espressif/boards/m5stack_core_basic/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ void board_init(void) {
8989
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
9090
// Set speaker gpio to ground to prevent noise from the speaker
9191
if (pin_number == 25) {
92-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
93-
gpio_set_level(pin_number, false);
92+
config_pin_as_output_with_level(pin_number, false);
9493
return true;
9594
}
9695
return false;

ports/espressif/boards/m5stack_core_fire/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ void board_init(void) {
8989
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
9090
// Set speaker gpio to ground to prevent noise from the speaker
9191
if (pin_number == 25) {
92-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
93-
gpio_set_level(pin_number, false);
92+
config_pin_as_output_with_level(pin_number, false);
9493
return true;
9594
}
9695
return false;

ports/espressif/boards/m5stack_dial/board.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,10 @@ void board_init(void) {
9292
}
9393

9494
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
95-
// Hold pind must be set high to avoid a power off when battery powered
95+
// Hold pin must be set high to avoid a power off when battery powered
9696
if (pin_number == 46) {
9797
// Turn on hold output
98-
gpio_set_direction(46, GPIO_MODE_DEF_OUTPUT);
99-
gpio_set_level(46, true);
98+
config_pin_as_output_with_level(pin_number, true);
10099
return true;
101100
}
102101
return false;

ports/espressif/boards/m5stack_stick_c/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,7 @@ void board_init(void) {
216216
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
217217
// Set IR led gpio high to prevent power drain from the led
218218
if (pin_number == 9) {
219-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
220-
gpio_set_level(pin_number, true);
219+
config_pin_as_output_with_level(pin_number, true);
221220
return true;
222221
}
223222
return false;

ports/espressif/boards/m5stack_stick_c_plus/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,7 @@ void board_init(void) {
216216
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
217217
// Set IR led gpio high to prevent power drain from the led
218218
if (pin_number == 9) {
219-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
220-
gpio_set_level(pin_number, true);
219+
config_pin_as_output_with_level(pin_number, true);
221220
return true;
222221
}
223222
return false;

ports/espressif/boards/m5stack_timer_camera_x/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1818
* when usb is disconnected or
1919
* the power button is released.
2020
*/
21-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
22-
gpio_set_level(pin_number, true);
21+
config_pin_as_output_with_level(pin_number, true);
2322
return true;
2423
}
2524
return false;

ports/espressif/boards/seeed_xiao_esp32c6/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@
3333
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
3434
if (pin_number == 16) {
3535
// Turn on I2C power by default.
36-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
37-
gpio_set_level(pin_number, true);
36+
config_pin_as_output_with_level(pin_number, true);
3837
return true;
3938
}
4039

ports/espressif/boards/seeed_xiao_esp32c6/mpconfigboard.mk

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,3 @@ IDF_TARGET = esp32c6
66
CIRCUITPY_ESP_FLASH_MODE = qio
77
CIRCUITPY_ESP_FLASH_FREQ = 80m
88
CIRCUITPY_ESP_FLASH_SIZE = 4MB
9-
10-
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1

ports/espressif/boards/sqfmi_watchy/board.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -201,20 +201,16 @@ bool board_requests_safe_mode(void) {
201201

202202
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
203203
if (pin_number == 13) {
204-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
205-
gpio_set_level(pin_number, false);
204+
config_pin_as_output_with_level(pin_number, false);
206205
return true;
207206
}
208207
return false;
209208
}
210209

211210
void reset_board(void) {
212-
gpio_set_direction(13, GPIO_MODE_OUTPUT);
213-
gpio_set_level(13, false);
214-
211+
config_pin_as_output_with_level(13, false);
215212
}
216213

217214
void board_deinit(void) {
218-
gpio_set_direction(13, GPIO_MODE_DEF_OUTPUT);
219-
gpio_set_level(13, false);
215+
config_pin_as_output_with_level(13, false);
220216
}

ports/espressif/boards/sunton_esp32_2432S028/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
9696
// Pull the speaker pin low to reduce noise on reset
9797
if (pin_number == 26) {
9898
// Turn on TFT
99-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
100-
gpio_set_level(pin_number, false);
99+
config_pin_as_output_with_level(pin_number, false);
101100
return true;
102101
}
103102
return false;

ports/espressif/boards/sunton_esp32_2432S032C/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
9292
// Pull the speaker pin low to reduce noise on reset
9393
if (pin_number == 26) {
9494
// Turn on audio
95-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
96-
gpio_set_level(pin_number, false);
95+
config_pin_as_output_with_level(pin_number, false);
9796
return true;
9897
}
9998
return false;

ports/espressif/common-hal/busio/UART.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,22 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
106106
self->timeout_ms = timeout * 1000;
107107

108108
self->uart_num = UART_NUM_MAX;
109-
for (uart_port_t num = 0; num < UART_NUM_MAX; num++) {
109+
110+
// ESP32-C6 and ESP32-P4 both have a single LP (low power) UART, which is
111+
// limited in what it can do and which pins it can use. Ignore it for now.
112+
// Its UART number is higher than the numbers for the regular ("HP", high-power) UARTs.
113+
114+
// SOC_UART_LP_NUM is not defined for chips without an LP UART.
115+
#if defined(SOC_UART_LP_NUM) && (SOC_UART_LP_NUM >= 1)
116+
#define UART_LIMIT LP_UART_NUM_0
117+
#else
118+
#define UART_LIMIT UART_NUM_MAX
119+
#endif
120+
121+
for (uart_port_t num = 0; num < UART_LIMIT; num++) {
110122
if (!uart_is_driver_installed(num)) {
111123
self->uart_num = num;
124+
break;
112125
}
113126
}
114127
if (self->uart_num == UART_NUM_MAX) {
@@ -224,6 +237,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
224237
int rx_num = -1;
225238
int rts_num = -1;
226239
int cts_num = -1;
240+
227241
if (have_tx) {
228242
claim_pin(tx);
229243
self->tx_pin = tx;
@@ -254,9 +268,13 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
254268
self->rts_pin = rs485_dir;
255269
rts_num = rs485_dir->number;
256270
}
271+
257272
if (uart_set_pin(self->uart_num, tx_num, rx_num, rts_num, cts_num) != ESP_OK) {
273+
// Uninstall driver and clean up.
274+
common_hal_busio_uart_deinit(self);
258275
raise_ValueError_invalid_pins();
259276
}
277+
260278
if (have_rx) {
261279
// On ESP32-C3 and ESP32-S3 (at least), a junk byte with zero or more consecutive 1's can be
262280
// generated, even if the pin is pulled high (normal UART resting state) to begin with.

ports/espressif/common-hal/microcontroller/Pin.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,3 +393,16 @@ bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) {
393393
uint8_t common_hal_mcu_pin_number(const mcu_pin_obj_t *pin) {
394394
return pin ? pin->number : NO_PIN;
395395
}
396+
397+
void config_pin_as_output_with_level(gpio_num_t pin_number, bool level) {
398+
gpio_config_t cfg = {
399+
.pin_bit_mask = BIT64(pin_number),
400+
.mode = GPIO_MODE_OUTPUT,
401+
.pull_up_en = false,
402+
.pull_down_en = false,
403+
.intr_type = GPIO_INTR_DISABLE,
404+
};
405+
gpio_config(&cfg);
406+
407+
gpio_set_level(pin_number, level);
408+
}

ports/espressif/common-hal/microcontroller/Pin.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,7 @@ extern void clear_pin_preservations(void);
3636
// Return true to indicate that the pin was reset. Returning false will lead to
3737
// the port-default reset behavior.
3838
extern bool espressif_board_reset_pin_number(gpio_num_t pin_number);
39+
40+
// Configure the IOMUX for the pin as GPIO, set the pin as output, and then set output the level.
41+
// This ensures the IOMUX setting is correct.
42+
extern void config_pin_as_output_with_level(gpio_num_t pin_number, bool level);

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[tool.setuptools_scm]
2+
# can be empty if no extra settings are needed, presence enables setuptools-scm

requirements-doc.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ setuptools_scm
1111

1212
# For sphinx
1313
sphinx!=5.2.0.post0
14-
sphinx-autoapi
14+
sphinx-autoapi<3.3.0
1515
sphinx-rtd-theme
1616
sphinxcontrib-svg2pdfconverter
1717
sphinxcontrib-jquery

0 commit comments

Comments
 (0)