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