1 /*
2  * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 // The HAL layer for RTC IO (common part)
8 
9 #include "hal/rtc_io_hal.h"
10 #include "soc/soc_caps.h"
11 
12 #if SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
13 
rtcio_hal_set_direction(int rtcio_num,rtc_gpio_mode_t mode)14 void rtcio_hal_set_direction(int rtcio_num, rtc_gpio_mode_t mode)
15 {
16     switch (mode) {
17     case RTC_GPIO_MODE_INPUT_ONLY:
18         rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
19         rtcio_ll_output_disable(rtcio_num);
20         rtcio_ll_input_enable(rtcio_num);
21         break;
22     case RTC_GPIO_MODE_OUTPUT_ONLY:
23         rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
24         rtcio_ll_output_enable(rtcio_num);
25         rtcio_ll_input_disable(rtcio_num);
26         break;
27     case RTC_GPIO_MODE_INPUT_OUTPUT:
28         rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
29         rtcio_ll_output_enable(rtcio_num);
30         rtcio_ll_input_enable(rtcio_num);
31         break;
32     case RTC_GPIO_MODE_DISABLED:
33         rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
34         rtcio_ll_output_disable(rtcio_num);
35         rtcio_ll_input_disable(rtcio_num);
36         break;
37     case RTC_GPIO_MODE_OUTPUT_OD:
38         rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_OD);
39         rtcio_ll_output_enable(rtcio_num);
40         rtcio_ll_input_disable(rtcio_num);
41         break;
42     case RTC_GPIO_MODE_INPUT_OUTPUT_OD:
43         rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_OD);
44         rtcio_ll_output_enable(rtcio_num);
45         rtcio_ll_input_enable(rtcio_num);
46         break;
47     default:
48         break;
49     }
50 }
51 
rtcio_hal_set_direction_in_sleep(int rtcio_num,rtc_gpio_mode_t mode)52 void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode)
53 {
54     switch (mode) {
55     case RTC_GPIO_MODE_INPUT_ONLY:
56         rtcio_ll_enable_input_in_sleep(rtcio_num);
57         rtcio_ll_disable_output_in_sleep(rtcio_num);
58         rtcio_ll_enable_sleep_setting(rtcio_num);
59         break;
60     case RTC_GPIO_MODE_OUTPUT_ONLY:
61         rtcio_ll_enable_output_in_sleep(rtcio_num);
62         rtcio_ll_disable_input_in_sleep(rtcio_num);
63         rtcio_ll_enable_sleep_setting(rtcio_num);
64         break;
65     case RTC_GPIO_MODE_INPUT_OUTPUT:
66         rtcio_ll_enable_input_in_sleep(rtcio_num);
67         rtcio_ll_enable_output_in_sleep(rtcio_num);
68         rtcio_ll_enable_sleep_setting(rtcio_num);
69         break;
70     case RTC_GPIO_MODE_DISABLED:
71         rtcio_ll_disable_input_in_sleep(rtcio_num);
72         rtcio_ll_disable_output_in_sleep(rtcio_num);
73         rtcio_ll_disable_sleep_setting(rtcio_num);
74         break;
75     default:
76         break;
77     }
78 }
79 
80 #if SOC_RTCIO_HOLD_SUPPORTED
rtcio_hal_isolate(int rtcio_num)81 void rtcio_hal_isolate(int rtcio_num)
82 {
83     rtcio_ll_pullup_disable(rtcio_num);
84     rtcio_ll_pulldown_disable(rtcio_num);
85     rtcio_ll_output_disable(rtcio_num);
86     rtcio_ll_input_disable(rtcio_num);
87     rtcio_ll_force_hold_enable(rtcio_num);
88 }
89 #endif
90 
91 #endif //SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
92