Skip to content

Commit 9bfaaf6

Browse files
wancklBruce297
authored andcommitted
fix(driver_gpio): correct h21 gpio_ll.h refer from c61
1 parent c4dacf2 commit 9bfaaf6

File tree

1 file changed

+48
-39
lines changed

1 file changed

+48
-39
lines changed

components/hal/esp32h21/include/hal/gpio_ll.h

Lines changed: 48 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
/*
2-
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

77
/*******************************************************************************
88
* NOTICE
99
* The hal is not public api, don't use in application code.
10-
* See readme.md in soc/include/hal/readme.md
1110
******************************************************************************/
1211

1312
// The LL layer for ESP32-H21 GPIO register operations
@@ -23,8 +22,8 @@
2322
#include "soc/pmu_struct.h"
2423
#include "soc/pcr_struct.h"
2524
#include "soc/clk_tree_defs.h"
26-
#include "soc/io_mux_struct.h"
2725
#include "soc/usb_serial_jtag_struct.h"
26+
#include "soc/io_mux_struct.h"
2827
#include "hal/gpio_types.h"
2928
#include "hal/misc.h"
3029
#include "hal/assert.h"
@@ -70,7 +69,7 @@ static inline void gpio_ll_get_io_config(gpio_dev_t *hw, uint32_t gpio_num, gpio
7069
* @param hw Peripheral GPIO hardware instance address.
7170
* @param gpio_num GPIO number
7271
*/
73-
static inline void gpio_ll_pullup_en(gpio_dev_t *hw, gpio_num_t gpio_num)
72+
static inline void gpio_ll_pullup_en(gpio_dev_t *hw, uint32_t gpio_num)
7473
{
7574
IO_MUX.gpio[gpio_num].fun_wpu = 1;
7675
}
@@ -82,7 +81,7 @@ static inline void gpio_ll_pullup_en(gpio_dev_t *hw, gpio_num_t gpio_num)
8281
* @param gpio_num GPIO number
8382
*/
8483
__attribute__((always_inline))
85-
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
84+
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, uint32_t gpio_num)
8685
{
8786
// The pull-up value of the USB pins are controlled by the pins’ pull-up value together with USB pull-up value
8887
// USB DP pin is default to PU enabled
@@ -102,7 +101,7 @@ static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
102101
* @param hw Peripheral GPIO hardware instance address.
103102
* @param gpio_num GPIO number
104103
*/
105-
static inline void gpio_ll_pulldown_en(gpio_dev_t *hw, gpio_num_t gpio_num)
104+
static inline void gpio_ll_pulldown_en(gpio_dev_t *hw, uint32_t gpio_num)
106105
{
107106
IO_MUX.gpio[gpio_num].fun_wpd = 1;
108107
}
@@ -114,7 +113,7 @@ static inline void gpio_ll_pulldown_en(gpio_dev_t *hw, gpio_num_t gpio_num)
114113
* @param gpio_num GPIO number
115114
*/
116115
__attribute__((always_inline))
117-
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
116+
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, uint32_t gpio_num)
118117
{
119118
IO_MUX.gpio[gpio_num].fun_wpd = 0;
120119
}
@@ -126,7 +125,7 @@ static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
126125
* @param gpio_num GPIO number. If you want to set the trigger type of e.g. of GPIO16, gpio_num should be GPIO_NUM_16 (16);
127126
* @param intr_type Interrupt type, select from gpio_int_type_t
128127
*/
129-
static inline void gpio_ll_set_intr_type(gpio_dev_t *hw, gpio_num_t gpio_num, gpio_int_type_t intr_type)
128+
static inline void gpio_ll_set_intr_type(gpio_dev_t *hw, uint32_t gpio_num, gpio_int_type_t intr_type)
130129
{
131130
hw->pinn[gpio_num].pinn_int_type = intr_type;
132131
}
@@ -190,7 +189,7 @@ static inline void gpio_ll_clear_intr_status_high(gpio_dev_t *hw, uint32_t mask)
190189
* @param gpio_num GPIO number. If you want to enable the interrupt of e.g. GPIO16, gpio_num should be GPIO_NUM_16 (16);
191190
*/
192191
__attribute__((always_inline))
193-
static inline void gpio_ll_intr_enable_on_core(gpio_dev_t *hw, uint32_t core_id, gpio_num_t gpio_num)
192+
static inline void gpio_ll_intr_enable_on_core(gpio_dev_t *hw, uint32_t core_id, uint32_t gpio_num)
194193
{
195194
HAL_ASSERT(core_id == 0 && "target SoC only has a single core");
196195
GPIO.pinn[gpio_num].pinn_int_ena = GPIO_LL_PRO_CPU_INTR_ENA; //enable pro cpu intr
@@ -203,7 +202,7 @@ static inline void gpio_ll_intr_enable_on_core(gpio_dev_t *hw, uint32_t core_id,
203202
* @param gpio_num GPIO number. If you want to disable the interrupt of e.g. GPIO16, gpio_num should be GPIO_NUM_16 (16);
204203
*/
205204
__attribute__((always_inline))
206-
static inline void gpio_ll_intr_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
205+
static inline void gpio_ll_intr_disable(gpio_dev_t *hw, uint32_t gpio_num)
207206
{
208207
hw->pinn[gpio_num].pinn_int_ena = 0; //disable GPIO intr
209208
}
@@ -215,7 +214,7 @@ static inline void gpio_ll_intr_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
215214
* @param gpio_num GPIO number
216215
*/
217216
__attribute__((always_inline))
218-
static inline void gpio_ll_input_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
217+
static inline void gpio_ll_input_disable(gpio_dev_t *hw, uint32_t gpio_num)
219218
{
220219
IO_MUX.gpio[gpio_num].fun_ie = 0;
221220
}
@@ -227,7 +226,7 @@ static inline void gpio_ll_input_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
227226
* @param gpio_num GPIO number
228227
*/
229228
__attribute__((always_inline))
230-
static inline void gpio_ll_input_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
229+
static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
231230
{
232231
IO_MUX.gpio[gpio_num].fun_ie = 1;
233232
}
@@ -289,7 +288,7 @@ static inline void gpio_ll_pin_input_hysteresis_disable(gpio_dev_t *hw, uint32_t
289288
* @param gpio_num GPIO number
290289
*/
291290
__attribute__((always_inline))
292-
static inline void gpio_ll_output_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
291+
static inline void gpio_ll_output_disable(gpio_dev_t *hw, uint32_t gpio_num)
293292
{
294293
hw->enable_w1tc.enable_w1tc = (0x1 << gpio_num);
295294
}
@@ -301,7 +300,7 @@ static inline void gpio_ll_output_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
301300
* @param gpio_num GPIO number
302301
*/
303302
__attribute__((always_inline))
304-
static inline void gpio_ll_output_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
303+
static inline void gpio_ll_output_enable(gpio_dev_t *hw, uint32_t gpio_num)
305304
{
306305
hw->enable_w1ts.enable_w1ts = (0x1 << gpio_num);
307306
}
@@ -312,7 +311,7 @@ static inline void gpio_ll_output_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
312311
* @param hw Peripheral GPIO hardware instance address.
313312
* @param gpio_num GPIO number
314313
*/
315-
static inline void gpio_ll_od_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
314+
static inline void gpio_ll_od_disable(gpio_dev_t *hw, uint32_t gpio_num)
316315
{
317316
hw->pinn[gpio_num].pinn_pad_driver = 0;
318317
}
@@ -323,7 +322,7 @@ static inline void gpio_ll_od_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
323322
* @param hw Peripheral GPIO hardware instance address.
324323
* @param gpio_num GPIO number
325324
*/
326-
static inline void gpio_ll_od_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
325+
static inline void gpio_ll_od_enable(gpio_dev_t *hw, uint32_t gpio_num)
327326
{
328327
hw->pinn[gpio_num].pinn_pad_driver = 1;
329328
}
@@ -351,12 +350,12 @@ static inline void gpio_ll_matrix_out_default(gpio_dev_t *hw, uint32_t gpio_num)
351350
* @param level Output level. 0: low ; 1: high
352351
*/
353352
__attribute__((always_inline))
354-
static inline void gpio_ll_set_level(gpio_dev_t *hw, gpio_num_t gpio_num, uint32_t level)
353+
static inline void gpio_ll_set_level(gpio_dev_t *hw, uint32_t gpio_num, uint32_t level)
355354
{
356355
if (level) {
357-
hw->out_w1ts.out_w1ts = (1 << gpio_num);
356+
hw->out_w1ts.val = 1 << gpio_num;
358357
} else {
359-
hw->out_w1tc.out_w1tc = (1 << gpio_num);
358+
hw->out_w1tc.val = 1 << gpio_num;
360359
}
361360
}
362361

@@ -373,7 +372,7 @@ static inline void gpio_ll_set_level(gpio_dev_t *hw, gpio_num_t gpio_num, uint32
373372
* - 1 the GPIO input level is 1
374373
*/
375374
__attribute__((always_inline))
376-
static inline int gpio_ll_get_level(gpio_dev_t *hw, gpio_num_t gpio_num)
375+
static inline int gpio_ll_get_level(gpio_dev_t *hw, uint32_t gpio_num)
377376
{
378377
return (hw->in.in_data_next >> gpio_num) & 0x1;
379378
}
@@ -383,9 +382,8 @@ static inline int gpio_ll_get_level(gpio_dev_t *hw, gpio_num_t gpio_num)
383382
*
384383
* @param hw Peripheral GPIO hardware instance address.
385384
* @param gpio_num GPIO number.
386-
* @param intr_type GPIO wake-up type. Only GPIO_INTR_LOW_LEVEL or GPIO_INTR_HIGH_LEVEL can be used.
387385
*/
388-
static inline void gpio_ll_wakeup_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
386+
static inline void gpio_ll_wakeup_enable(gpio_dev_t *hw, uint32_t gpio_num)
389387
{
390388
hw->pinn[gpio_num].pinn_wakeup_enable = 1;
391389
}
@@ -396,7 +394,7 @@ static inline void gpio_ll_wakeup_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
396394
* @param hw Peripheral GPIO hardware instance address.
397395
* @param gpio_num GPIO number
398396
*/
399-
static inline void gpio_ll_wakeup_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
397+
static inline void gpio_ll_wakeup_disable(gpio_dev_t *hw, uint32_t gpio_num)
400398
{
401399
hw->pinn[gpio_num].pinn_wakeup_enable = 0;
402400
}
@@ -408,7 +406,7 @@ static inline void gpio_ll_wakeup_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
408406
* @param gpio_num GPIO number, only support output GPIOs
409407
* @param strength Drive capability of the pad
410408
*/
411-
static inline void gpio_ll_set_drive_capability(gpio_dev_t *hw, gpio_num_t gpio_num, gpio_drive_cap_t strength)
409+
static inline void gpio_ll_set_drive_capability(gpio_dev_t *hw, uint32_t gpio_num, gpio_drive_cap_t strength)
412410
{
413411
IO_MUX.gpio[gpio_num].fun_drv = strength;
414412
}
@@ -420,7 +418,7 @@ static inline void gpio_ll_set_drive_capability(gpio_dev_t *hw, gpio_num_t gpio_
420418
* @param gpio_num GPIO number, only support output GPIOs
421419
* @param strength Pointer to accept drive capability of the pad
422420
*/
423-
static inline void gpio_ll_get_drive_capability(gpio_dev_t *hw, gpio_num_t gpio_num, gpio_drive_cap_t *strength)
421+
static inline void gpio_ll_get_drive_capability(gpio_dev_t *hw, uint32_t gpio_num, gpio_drive_cap_t *strength)
424422
{
425423
*strength = (gpio_drive_cap_t)(IO_MUX.gpio[gpio_num].fun_drv);
426424
}
@@ -432,7 +430,7 @@ static inline void gpio_ll_get_drive_capability(gpio_dev_t *hw, gpio_num_t gpio_
432430
* @param gpio_num GPIO number, only support output GPIOs
433431
*/
434432
__attribute__((always_inline))
435-
static inline void gpio_ll_hold_en(gpio_dev_t *hw, gpio_num_t gpio_num)
433+
static inline void gpio_ll_hold_en(gpio_dev_t *hw, uint32_t gpio_num)
436434
{
437435
LP_AON.gpio_hold0.gpio_hold0 |= GPIO_HOLD_MASK[gpio_num];
438436
}
@@ -444,7 +442,7 @@ static inline void gpio_ll_hold_en(gpio_dev_t *hw, gpio_num_t gpio_num)
444442
* @param gpio_num GPIO number, only support output GPIOs
445443
*/
446444
__attribute__((always_inline))
447-
static inline void gpio_ll_hold_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
445+
static inline void gpio_ll_hold_dis(gpio_dev_t *hw, uint32_t gpio_num)
448446
{
449447
LP_AON.gpio_hold0.gpio_hold0 &= ~GPIO_HOLD_MASK[gpio_num];
450448
}
@@ -579,7 +577,8 @@ static inline void gpio_ll_force_unhold_all(void)
579577
* @param hw Peripheral GPIO hardware instance address.
580578
* @param gpio_num GPIO number
581579
*/
582-
static inline void gpio_ll_sleep_sel_en(gpio_dev_t *hw, gpio_num_t gpio_num)
580+
__attribute__((always_inline))
581+
static inline void gpio_ll_sleep_sel_en(gpio_dev_t *hw, uint32_t gpio_num)
583582
{
584583
IO_MUX.gpio[gpio_num].slp_sel = 1;
585584
}
@@ -591,7 +590,8 @@ static inline void gpio_ll_sleep_sel_en(gpio_dev_t *hw, gpio_num_t gpio_num)
591590
* @param hw Peripheral GPIO hardware instance address.
592591
* @param gpio_num GPIO number
593592
*/
594-
static inline void gpio_ll_sleep_sel_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
593+
__attribute__((always_inline))
594+
static inline void gpio_ll_sleep_sel_dis(gpio_dev_t *hw, uint32_t gpio_num)
595595
{
596596
IO_MUX.gpio[gpio_num].slp_sel = 0;
597597
}
@@ -602,7 +602,8 @@ static inline void gpio_ll_sleep_sel_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
602602
* @param hw Peripheral GPIO hardware instance address.
603603
* @param gpio_num GPIO number
604604
*/
605-
static inline void gpio_ll_sleep_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
605+
__attribute__((always_inline))
606+
static inline void gpio_ll_sleep_pullup_dis(gpio_dev_t *hw, uint32_t gpio_num)
606607
{
607608
IO_MUX.gpio[gpio_num].mcu_wpu = 0;
608609
}
@@ -613,7 +614,8 @@ static inline void gpio_ll_sleep_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
613614
* @param hw Peripheral GPIO hardware instance address.
614615
* @param gpio_num GPIO number
615616
*/
616-
static inline void gpio_ll_sleep_pullup_en(gpio_dev_t *hw, gpio_num_t gpio_num)
617+
__attribute__((always_inline))
618+
static inline void gpio_ll_sleep_pullup_en(gpio_dev_t *hw, uint32_t gpio_num)
617619
{
618620
IO_MUX.gpio[gpio_num].mcu_wpu = 1;
619621
}
@@ -624,7 +626,8 @@ static inline void gpio_ll_sleep_pullup_en(gpio_dev_t *hw, gpio_num_t gpio_num)
624626
* @param hw Peripheral GPIO hardware instance address.
625627
* @param gpio_num GPIO number
626628
*/
627-
static inline void gpio_ll_sleep_pulldown_en(gpio_dev_t *hw, gpio_num_t gpio_num)
629+
__attribute__((always_inline))
630+
static inline void gpio_ll_sleep_pulldown_en(gpio_dev_t *hw, uint32_t gpio_num)
628631
{
629632
IO_MUX.gpio[gpio_num].mcu_wpd = 1;
630633
}
@@ -635,17 +638,20 @@ static inline void gpio_ll_sleep_pulldown_en(gpio_dev_t *hw, gpio_num_t gpio_num
635638
* @param hw Peripheral GPIO hardware instance address.
636639
* @param gpio_num GPIO number
637640
*/
638-
static inline void gpio_ll_sleep_pulldown_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
641+
__attribute__((always_inline))
642+
static inline void gpio_ll_sleep_pulldown_dis(gpio_dev_t *hw, uint32_t gpio_num)
639643
{
640644
IO_MUX.gpio[gpio_num].mcu_wpd = 0;
641645
}
646+
642647
/**
643648
* @brief Disable GPIO input in sleep mode.
644649
*
645650
* @param hw Peripheral GPIO hardware instance address.
646651
* @param gpio_num GPIO number
647652
*/
648-
static inline void gpio_ll_sleep_input_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
653+
__attribute__((always_inline))
654+
static inline void gpio_ll_sleep_input_disable(gpio_dev_t *hw, uint32_t gpio_num)
649655
{
650656
IO_MUX.gpio[gpio_num].mcu_ie = 0;
651657
}
@@ -656,7 +662,8 @@ static inline void gpio_ll_sleep_input_disable(gpio_dev_t *hw, gpio_num_t gpio_n
656662
* @param hw Peripheral GPIO hardware instance address.
657663
* @param gpio_num GPIO number
658664
*/
659-
static inline void gpio_ll_sleep_input_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
665+
__attribute__((always_inline))
666+
static inline void gpio_ll_sleep_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
660667
{
661668
IO_MUX.gpio[gpio_num].mcu_ie = 1;
662669
}
@@ -667,7 +674,8 @@ static inline void gpio_ll_sleep_input_enable(gpio_dev_t *hw, gpio_num_t gpio_nu
667674
* @param hw Peripheral GPIO hardware instance address.
668675
* @param gpio_num GPIO number
669676
*/
670-
static inline void gpio_ll_sleep_output_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
677+
__attribute__((always_inline))
678+
static inline void gpio_ll_sleep_output_disable(gpio_dev_t *hw, uint32_t gpio_num)
671679
{
672680
IO_MUX.gpio[gpio_num].mcu_oe = 0;
673681
}
@@ -678,7 +686,8 @@ static inline void gpio_ll_sleep_output_disable(gpio_dev_t *hw, gpio_num_t gpio_
678686
* @param hw Peripheral GPIO hardware instance address.
679687
* @param gpio_num GPIO number
680688
*/
681-
static inline void gpio_ll_sleep_output_enable(gpio_dev_t *hw, gpio_num_t gpio_num)
689+
__attribute__((always_inline))
690+
static inline void gpio_ll_sleep_output_enable(gpio_dev_t *hw, uint32_t gpio_num)
682691
{
683692
IO_MUX.gpio[gpio_num].mcu_oe = 1;
684693
}
@@ -690,7 +699,7 @@ static inline void gpio_ll_sleep_output_enable(gpio_dev_t *hw, gpio_num_t gpio_n
690699
* @param gpio_num GPIO number.
691700
* @param intr_type GPIO wake-up type. Only GPIO_INTR_LOW_LEVEL or GPIO_INTR_HIGH_LEVEL can be used.
692701
*/
693-
static inline void gpio_ll_deepsleep_wakeup_enable(gpio_dev_t *hw, gpio_num_t gpio_num, gpio_int_type_t intr_type)
702+
static inline void gpio_ll_deepsleep_wakeup_enable(gpio_dev_t *hw, uint32_t gpio_num, gpio_int_type_t intr_type)
694703
{
695704
HAL_ASSERT((gpio_num >= GPIO_NUM_5 && gpio_num <= GPIO_NUM_11) &&
696705
"only gpio5~11 support deep sleep wake-up function");
@@ -717,7 +726,7 @@ static inline void gpio_ll_deepsleep_wakeup_enable(gpio_dev_t *hw, gpio_num_t gp
717726
* @param hw Peripheral GPIO hardware instance address.
718727
* @param gpio_num GPIO number
719728
*/
720-
static inline void gpio_ll_deepsleep_wakeup_disable(gpio_dev_t *hw, gpio_num_t gpio_num)
729+
static inline void gpio_ll_deepsleep_wakeup_disable(gpio_dev_t *hw, uint32_t gpio_num)
721730
{
722731
HAL_ASSERT((gpio_num >= GPIO_NUM_5 && gpio_num <= GPIO_NUM_11) &&
723732
"only gpio5~11 support deep sleep wake-up function");

0 commit comments

Comments
 (0)