@@ -317,6 +317,49 @@ static const uint8_t GPIO_PIN_MUX_REG_OFFSET[] = {
317317 0x1c ,0x20 ,0x14 ,0x18 ,0x04 ,0x08 ,0x0c ,0x10 ,
318318};
319319
320+ static uint32_t get_pull_up (Esp32GpioState * s , int gpio_no ) {
321+ int rtc_gpio = io_mux_pins [gpio_no ].rtc_gpio ;
322+
323+ if (rtc_gpio > 5 ) {
324+ switch (rtc_gpio ) {
325+ case 6 :
326+ return FIELD_EX32 (s -> rtc_pad_cfg [2 ],RTCIO_PAD_DAC1 ,RUE );
327+ case 7 :
328+ return FIELD_EX32 (s -> rtc_pad_cfg [3 ],RTCIO_PAD_DAC2 ,RUE );
329+ case 8 :
330+ return FIELD_EX32 (s -> rtc_pad_cfg [4 ],RTCIO_XTAL_32K_PAD ,X32N_RUE );
331+ case 9 :
332+ return FIELD_EX32 (s -> rtc_pad_cfg [4 ],RTCIO_XTAL_32K_PAD ,X32P_RUE );
333+ default :
334+ return FIELD_EX32 (s -> rtc_pad_cfg [6 + rtc_gpio - 10 ],RTCIO_TOUCH_PAD0 ,RUE );
335+ }
336+ }
337+ int io_mux = GPIO_PIN_MUX_REG_OFFSET [gpio_no ]/4 ;
338+ return FIELD_EX32 (s -> iomux_regs [io_mux ],IO_MUX ,FUN_WPU );
339+ }
340+
341+ static uint32_t get_pull_down (Esp32GpioState * s , int gpio_no ) {
342+ int rtc_gpio = io_mux_pins [gpio_no ].rtc_gpio ;
343+
344+ if (rtc_gpio > 5 ) {
345+ switch (rtc_gpio ) {
346+ case 6 :
347+ return FIELD_EX32 (s -> rtc_pad_cfg [2 ],RTCIO_PAD_DAC1 ,RDE );
348+ case 7 :
349+ return FIELD_EX32 (s -> rtc_pad_cfg [3 ],RTCIO_PAD_DAC2 ,RDE );
350+ case 8 :
351+ return FIELD_EX32 (s -> rtc_pad_cfg [4 ],RTCIO_XTAL_32K_PAD ,X32N_RDE );
352+ case 9 :
353+ return FIELD_EX32 (s -> rtc_pad_cfg [4 ],RTCIO_XTAL_32K_PAD ,X32P_RDE );
354+ default :
355+ return FIELD_EX32 (s -> rtc_pad_cfg [6 + rtc_gpio - 10 ],RTCIO_TOUCH_PAD0 ,RDE );
356+ }
357+ }
358+ int io_mux = GPIO_PIN_MUX_REG_OFFSET [gpio_no ]/4 ;
359+ return FIELD_EX32 (s -> iomux_regs [io_mux ],IO_MUX ,FUN_WPD );
360+ }
361+
362+
320363#define N_RTC_GPIOS 18
321364// mapping from rtc gpios to iomux gpios
322365int gpio_map [N_RTC_GPIOS ]= {36 ,37 ,38 ,39 ,34 ,35 ,25 ,26 ,33 ,32 ,4 ,0 ,2 ,15 ,13 ,12 ,14 ,27 };
@@ -555,8 +598,8 @@ static void text_console_update(void *obj) {
555598 uint32_t oen_sel = FIELD_EX32 (s -> gpio_out_sel [i ],GPIO_FUNC_OUT ,OEN_SEL );
556599 uint32_t mux_ie = FIELD_EX32 (s -> iomux_regs [io_mux ],IO_MUX ,FUN_IE );
557600 uint32_t mux_func = FIELD_EX32 (s -> iomux_regs [io_mux ],IO_MUX ,MCU_SEL );
558- uint32_t pullup = FIELD_EX32 ( s -> iomux_regs [ io_mux ], IO_MUX , FUN_WPU );
559- uint32_t pulldown = FIELD_EX32 ( s -> iomux_regs [ io_mux ], IO_MUX , FUN_WPD );
601+ uint32_t pullup = get_pull_up ( s , i );
602+ uint32_t pulldown = get_pull_down ( s , i );
560603 uint32_t int_type = FIELD_EX32 (s -> gpio_pin [i ],GPIO_PIN ,INT_TYPE );
561604 uint32_t int_enable = FIELD_EX32 (s -> gpio_pin [i ],GPIO_PIN ,INT_ENABLE );
562605
0 commit comments