#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

menuconfig PM
	bool "Power management (PM) system"
	default n
	---help---
		Power management (PM) system. It consists of an OS interface
		to board logic which can be used to obtain a recommended
		power level according to a power management policy set by the
		currently chosen PM governor. It is also used by drivers which
		can allow or not a power level to be changed or not.

if PM

config PM_NDOMAINS
	int "Number of PM activity domains"
	default 1
	---help---
		Defines the number of "domains" that the PM system can control.
		For example, you may want to separately manage the power from the
		Network domain, shutting down the network when it is not be used,
		from the UI domain, shutting down the UI when it is not in use.

config PM_GOVERNOR_GREEDY
	bool "Greedy governor"
	---help---
		This governor simply suggests the lowest-possible power state,
		considering any states locked by calls to pm_stay() (accessible
		via BOARDIOC_PM_STAY boardctl calls).

config PM_GOVERNOR_ACTIVITY
	bool "Activity based"
	---help---
		The activity based governor receives activity reports from drivers
		in units which are accumulated during a certain time slice interval.
		The governor will then switch between power states given a set of
		activity thresholds for each state.

menu "Governor options"

if PM_GOVERNOR_GREEDY

config PM_GOVERNOR_EXPLICIT_RELAX
	bool "Stay initially at PM_NORMAL"
	---help---
		If you boot into NSH, when using the greedy PM governor, since NuttX will
		almost immediately go idle (when waiting for a prompt), he lowest possible
		run-level will be selected, which may not be desirable.
		This is not a problem if you directly run you application at boot, which
		can hold off power levels using pm_stay() (via boardctl).

		This option will initialize all run levels as if pm_stay() were to be
		called once for each, so that your application needs to call pm_relax()
		(via boardctl()) for every run-level you wish to allow to enter.

endif

if PM_GOVERNOR_ACTIVITY

config PM_GOVERNOR_SLICEMS
	int "PM time slice (msec)"
	default 100
	---help---
		The power management module collects activity counts in time slices.
		At the end of the time slice, the count accumulated during that
		interval is applied to an averaging algorithm to determine the
		activity level.

		CONFIG_PM_GOVERNOR_SLICEMS provides the duration of that time slice in
		milliseconds.  Default: 100 Milliseconds

config PM_GOVERNOR_MEMORY
	int "PM memory (msec)"
	default 2
	range 1 6
	---help---
		The averaging algorithm is simply: Y = (An*X + SUM(Ai*Yi))/SUM(Aj),
		where i = 1..n-1 and j= 1..n, n is the length of the "memory",
		Ai is the weight applied to each value, and X is the current
		activity.  These weights may be negative and a limited to the
		range of int16_t.

		  CONFIG_PM_GOVERNOR_MEMORY provides the memory for the algorithm.
		    Default: 2
		  CONFIG_PM_GOVERNOR_COEFn provides weight for each sample.  Default: 1

		Setting CONFIG_PM_GOVERNOR_MEMORY=1 disables all smoothing.

config PM_GOVERNOR_COEFN
	int "PM coefficient"
	default 1
	---help---
		See help associated with CONFIG_PM_GOVERNOR_MEMORY.

config PM_GOVERNOR_COEF1
	int "PM coefficient 1"
	default 1
	---help---
		See help associated with CONFIG_PM_GOVERNOR_MEMORY.

config PM_GOVERNOR_COEF2
	int "PM coefficient 2"
	default 1
	---help---
		See help associated with CONFIG_PM_GOVERNOR_MEMORY

		Ignored if CONFIG_PM_GOVERNOR_MEMORY <= 2

config PM_GOVERNOR_COEF3
	int "PM coefficient 3"
	default 1
	---help---
		See help associated with CONFIG_PM_GOVERNOR_MEMORY

		Ignored if CONFIG_PM_GOVERNOR_MEMORY <= 3

config PM_GOVERNOR_COEF4
	int "PM coefficient 4"
	default 1
	---help---
		See help associated with CONFIG_PM_GOVERNOR_MEMORY

		Ignored if CONFIG_PM_GOVERNOR_MEMORY <= 4

config PM_GOVERNOR_COEF5
	int "PM coefficient 5"
	default 1
	---help---
		See help associated with CONFIG_PM_GOVERNOR_MEMORY

		Ignored if CONFIG_PM_GOVERNOR_MEMORY <= 5

config PM_GOVERNOR_IDLEENTER_THRESH
	int "PM IDLE enter threshold"
	default 1
	---help---
		State changes then occur when the weight activity account crosses
		threshold values for certain periods of time (time slice count).

		  CONFIG_PM_xxxENTER_THRESH is the threshold value for entering state xxx.
		  CONFIG_PM_xxxENTER_COUNT is the count for entering state xxx.

		Resuming to normal state, on the other hand, is usually immediate and
		controlled by wakeup conditions established by the platform.

		Default: <=1: Essentially no activity

config PM_GOVERNOR_IDLEEXIT_THRESH
	int "PM IDLE exit threshold"
	default 2
	---help---
		State changes then occur when the weight activity account crosses
		threshold values for certain periods of time (time slice count).

		  CONFIG_PM_xxxENTER_THRESH is the threshold value for entering state xxx.
		  CONFIG_PM_xxxENTER_COUNT is the count for entering state xxx.

		Resuming to normal state, on the other hand, is usually immediate and
		controlled by wakeup conditions established by the platform.

		Default: >=2: Active

config PM_GOVERNOR_IDLEENTER_COUNT
	int "PM IDLE enter count"
	default 30
	---help---
		State changes then occur when the weight activity account crosses
		threshold values for certain periods of time (time slice count).

		  CONFIG_PM_xxxENTER_THRESH is the threshold value for entering state xxx.
		  CONFIG_PM_xxxENTER_COUNT is the count for entering state xxx.

		Resuming to normal state, on the other hand, is usually immediate and
		controlled by wakeup conditions established by the platform.

		Default: Thirty IDLE slices to enter IDLE mode from normal

config PM_GOVERNOR_STANDBYENTER_THRESH
	int "PM STANDBY enter threshold"
	default 1
	---help---
		State changes then occur when the weight activity account crosses
		threshold values for certain periods of time (time slice count).

		  CONFIG_PM_xxxENTER_THRESH is the threshold value for entering state xxx.
		  CONFIG_PM_xxxENTER_COUNT is the count for entering state xxx.

		Resuming to normal state, on the other hand, is usually immediate and
		controlled by wakeup conditions established by the platform.

		Default: <=1: Essentially no activity

config PM_GOVERNOR_STANDBYEXIT_THRESH
	int "PM STANDBY exit threshold"
	default 2
	---help---
		State changes then occur when the weight activity account crosses
		threshold values for certain periods of time (time slice count).

		  CONFIG_PM_xxxENTER_THRESH is the threshold value for entering state xxx.
		  CONFIG_PM_xxxENTER_COUNT is the count for entering state xxx.

		Resuming to normal state, on the other hand, is usually immediate and
		controlled by wakeup conditions established by the platform.

		Default: >=2: Active

config PM_GOVERNOR_STANDBYENTER_COUNT
	int "PM STANDBY enter count"
	default 50
	---help---
		State changes then occur when the weight activity account crosses
		threshold values for certain periods of time (time slice count).

		  CONFIG_PM_xxxENTER_THRESH is the threshold value for entering state xxx.
		  CONFIG_PM_xxxENTER_COUNT is the count for entering state xxx.

		Resuming to normal state, on the other hand, is usually immediate and
		controlled by wakeup conditions established by the platform.

		Default: Fifty IDLE slices to enter STANDBY mode from IDLE

config PM_GOVERNOR_SLEEPENTER_THRESH
	int "PM SLEEP enter threshold"
	default 1
	---help---
		State changes then occur when the weight activity account crosses
		threshold values for certain periods of time (time slice count).

		  CONFIG_PM_xxxENTER_THRESH is the threshold value for entering state xxx.
		  CONFIG_PM_xxxENTER_COUNT is the count for entering state xxx.

		Resuming to normal state, on the other hand, is usually immediate and
		controlled by wakeup conditions established by the platform.

		Default: <=1: Essentially no activity

config PM_GOVERNOR_SLEEPEXIT_THRESH
	int "PM SLEEP exit threshold"
	default 2
	---help---
		State changes then occur when the weight activity account crosses
		threshold values for certain periods of time (time slice count).

		  CONFIG_PM_xxxENTER_THRESH is the threshold value for entering state xxx.
		  CONFIG_PM_xxxENTER_COUNT is the count for entering state xxx.

		Resuming to normal state, on the other hand, is usually immediate and
		controlled by wakeup conditions established by the platform.

		Default: >=2: Active

config PM_GOVERNOR_SLEEPENTER_COUNT
	int "PM SLEEP enter count"
	default 70
	---help---
		State changes then occur when the weight activity account crosses
		threshold values for certain periods of time (time slice count).

		  CONFIG_PM_xxxENTER_THRESH is the threshold value for entering state xxx.
		  CONFIG_PM_xxxENTER_COUNT is the count for entering state xxx.

		Resuming to normal state, on the other hand, is usually immediate and
		controlled by wakeup conditions established by the platform.

		Default: Fifty IDLE slices to enter SLEEP mode from STANDBY

endif # PM_GOVERNOR_ACTIVITY

endmenu

endif # PM

config DRIVERS_POWERLED
	bool "High Power LED driver"
	default n
	---help---
		Enables building of an powerled upper half driver.

menuconfig DRIVERS_SMPS
	bool "Switched-Mode Power Supply (SMPS)"
	default n
	---help---
		Enables building of an SMPS upper half driver.

if DRIVERS_SMPS

config SMPS_HAVE_OUTPUT_VOLTAGE
	bool "Have Output Voltage"
	default n

config SMPS_HAVE_OUTPUT_CURRENT
	bool "Have Output Current"
	default n

config SMPS_HAVE_OUTPUT_POWER
	bool "Have Output Power"
	default n

config SMPS_HAVE_INPUT_VOLTAGE
	bool "Have Input Voltage"
	default n

config SMPS_HAVE_INPUT_CURRENT
	bool "Have Input Current"
	default n

config SMPS_HAVE_INPUT_POWER
	bool "Have Input Power"
	default n

config SMPS_HAVE_EFFICIENCY
	bool "Have Power Efficiency"
	default n

endif

menuconfig POWER
	bool "Power Management Support"
	default n
	---help---
		Enable building of power-related devices (battery monitors, chargers,
		etc).

if POWER

config REGULATOR
	bool "Regulator core driver support"
	default n
	---help---
		The regulator core driver implements the uper layer framework that the lower
		layer driver can register with, and the common regulator APIs that are easy
		for other drivers to call for the control of their power supply.

config REGULATOR_RPMSG
	bool "Regulator rpmsg driver support"
	depends on OPENAMP
	default n
	---help---
		The rpmsg regulator driver implements the common regulator APIs, inside which
		the regulator operations are sent from the client to the remote device via
		the rpmsg channel. The remote device(namely server) is responsible for
		the parse and the completion.

if REGULATOR

config REGULATOR_GPIO
	bool "Regulator gpio driver support"
	default n
	---help---
		The regulator gpio driver implements the lower regulator ops that use gpio to
		control to regulator.

endif

config BATTERY_CHARGER
	bool "Battery Charger support"
	default n

config BQ2425X
	bool "BQ2425X Battery charger support"
	default n
	select I2C
	select I2C_BQ2425X
	depends on BATTERY_CHARGER
	depends on ALLOW_BSD_COMPONENTS
	---help---
		The BQ24250/BQ24251 are battery charger for lithium-ion batteries.

config BQ2429X
	bool "BQ2429X Battery charger support"
	default n
	select I2C
	select I2C_BQ2429X
	depends on BATTERY_CHARGER
	---help---
		The BQ24296/BQ24297/BQ24296M are battery charger for lithium-ion batteries.

config AXP202
	bool "AXP202 Battery charger support"
	default n
	select I2C
	depends on BATTERY_CHARGER
	---help---
		axp202 are battery charger for lithium-ion batteries.

config AXP202_DC2_VOLTAGE
	int "AXP202 DC2 output voltage"
	default 0
	depends on AXP202
	---help---
		AXP202 DC2 output voltage. 0 is disable, enable range: [700, 2275] mV.

config AXP202_DC3_VOLTAGE
	int "AXP202 DC3 output voltage"
	default 3300
	depends on AXP202
	---help---
		AXP202 DC3 output voltage. 0 is disable, enable range: [700, 3500] mV.

config AXP202_LDO2_VOLTAGE
	int "AXP202 LDO2 output voltage"
	default 0
	depends on AXP202
	---help---
		AXP202 LDO2 output voltage. 0 is disable, enable range: [1800, 3300] mV.

config AXP202_LDO3_VOLTAGE
	int "AXP202 LDO3 output voltage"
	default 0
	depends on AXP202
	---help---
		Enable LDO3 output voltage. 0 is disable, enable range: [700, 2275] mV.

config AXP202_LDO4_VOLTAGE
	int "AXP202 LDO4 output voltage"
	default 0
	depends on AXP202
	---help---
		Enable LDO4 output voltage. 0 is disable, other value: 
			1250 1300 1400 1500 1600 1700 1800 1900 
			2000 2500 2700 2800 3000 3100 3200 3300 mV.

config MCP73871
	bool "Microchip MCP73871 Battery charger support"
	default n
	depends on BATTERY_CHARGER
	---help---
		A simple driver to report MCP73871 status.

if BQ2429X

config DEBUG_BQ2429X
	bool "BQ2429X Debug Features"
	default n
	---help---
		Enable BQ2429X battery management debug features.

endif # BQ2429X

config BATTERY_GAUGE
	bool "Battery Fuel Gauge support"
	default n

config MAX1704X
	bool "MAX1704X Battery fuel gauge support"
	default n
	select I2C
	select I2C_MAX1704X
	depends on BATTERY_GAUGE
	---help---
		The MAX17040/MAX17041 are ultra-compact, low-cost, host-side fuel-gauge
		systems for lithium-ion (Li+) batteries in handheld and portable equipment.
		The MAX17040 is configured to operate with a single lithium cell and the
		MAX17041 is configured for a dual-cell 2S pack.

config BQ27426
	bool "BQ27426 Battery fuel gauge support"
	default n
	select I2C
	depends on BATTERY_GAUGE
	---help---
		The bq27426 battery fuel gauge accurately predicts the battery capacity and other
		operational characteristics of a single, Li-based, rechargeable cell.
		It can be interrogated by a system processor to provide cell information,
		such as state-of-charge (SOC).

config I2C_BQ2425X
	bool
	default y if BQ2425X

config I2C_BQ2429X
	bool
	default y if BQ2429X

config I2C_AXP202
	bool
	default y if AXP202

config I2C_MAX1704X
	bool
	default y if MAX1704X

config BATTERY_MONITOR
	bool "Battery Monitor/Management support"
	default n

config BQ769X0
	bool "BQ769X0 Battery monitor support"
	default n
	select I2C
	select I2C_BQ769X0
	depends on BATTERY_MONITOR
	---help---
		The BQ76920/BQ76930/BQ76940 provide monitoring, balancing, and
		protection features for up to 15 cells in series.

config I2C_BQ769X0
	bool
	default y if BQ769X0

if BQ769X0
	config BQ769X0_USE_INTERNAL_TS
		bool "Use internal temperature sensor on BQ769X0"
		default n
endif

endif # POWER
