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
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