# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd.
# SPDX-License-Identifier: Apache-2.0

if SOC_SERIES_ESP32

choice RTC_CLK_SRC
	prompt "RTC clock source"
	default RTC_CLK_SRC_INT_RC
	help
	  Choose which clock is used as RTC clock source.

	  - "Internal 150kHz oscillator" option provides lowest deep sleep current
	  consumption, and does not require extra external components. However
	  frequency stability with respect to temperature is poor, so time may
	  drift in deep/light sleep modes.
	  - "External 32kHz crystal" provides better frequency stability, at the
	  expense of slightly higher (1uA) deep sleep current consumption.
	  - "External 32kHz oscillator" allows using 32kHz clock generated by an
	  external circuit. In this case, external clock signal must be connected
	  to 32K_XN pin. Amplitude should be <1.2V in case of sine wave signal,
	  and <1V in case of square wave signal. Common mode voltage should be
	  0.1 < Vcm < 0.5Vamp, where Vamp is the signal amplitude.
	  Additionally, 1nF capacitor must be connected between 32K_XP pin and
	  ground. 32K_XP pin can not be used as a GPIO in this case.
	  - "Internal 8.5MHz oscillator divided by 256" option results in higher
	  deep sleep current (by 5uA) but has better frequency stability than
	  the internal 150kHz oscillator. It does not require external components.

config RTC_CLK_SRC_INT_RC
	bool "Internal 150kHz RC oscillator"

config RTC_CLK_SRC_EXT_CRYS
	bool "External 32kHz crystal"
	select ESP_SYSTEM_RTC_EXT_XTAL

config RTC_CLK_SRC_EXT_OSC
	bool "External 32kHz oscillator at 32K_XN pin"
	select ESP_SYSTEM_RTC_EXT_OSC

config RTC_CLK_SRC_INT_8MD256
	bool "Internal 8.5MHz oscillator, divided by 256 (~33kHz)"

endchoice # RTC_CLK_SRC

config RTC_CLK_CAL_CYCLES
	int "Number of cycles for RTC_SLOW_CLK calibration"
	default 3000 if RTC_CLK_SRC_EXT_CRYS || RTC_CLK_SRC_EXT_OSC || RTC_CLK_SRC_INT_8MD256
	default 1024 if RTC_CLK_SRC_INT_RC
	range 0 27000 if RTC_CLK_SRC_EXT_CRYS || RTC_CLK_SRC_EXT_OSC || RTC_CLK_SRC_INT_8MD256
	range 0 32766 if RTC_CLK_SRC_INT_RC
	help
	  When the startup code initializes RTC_SLOW_CLK, it can perform
	  calibration by comparing the RTC_SLOW_CLK frequency with main XTAL
	  frequency. This option sets the number of RTC_SLOW_CLK cycles measured
	  by the calibration routine. Higher numbers increase calibration
	  precision, which may be important for applications which spend a lot of
	  time in deep sleep. Lower numbers reduce startup time.

	  When this option is set to 0, clock calibration will not be performed at
	  startup, and approximate clock frequencies will be assumed:

	  - 150000 Hz if internal RC oscillator is used as clock source. For this use value 1024.
	  - 32768 Hz if the 32k crystal oscillator is used. For this use value 3000 or more.
	  In case more value will help improve the definition of the launch of the crystal.
	  If the crystal could not start, it will be switched to internal RC.

config RTC_XTAL_CAL_RETRY
	int "Number of attempts to repeat 32k XTAL calibration"
	default 1
	depends on RTC_CLK_SRC_EXT_CRYS
	help
	  Number of attempts to repeat 32k XTAL calibration
	  before giving up and switching to the internal RC.
	  Increase this option if the 32k crystal oscillator
	  does not start and switches to internal RC.

endif # SOC_SERIES_ESP32
