# Kconfig.k64 - K64_FTM PWM configuration options
#
#
# Copyright (c) 2016 Intel Corporation
# Copyright (c) 2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

################################################
# K64 Flex Timer Module (FTM)
################################################

menuconfig PWM_K64_FTM
	bool "PWM with Freescale K64 Flex Timer Module (FTM)"
	depends on PWM && SOC_MK64F12
	default n
	help
	Enable Pulse Width Modulation driver for Freescale
	K64 Flex Timer Module (FTM).

if PWM_K64_FTM

config SYS_LOG_PWM_K64_FTM_LEVEL
	int
	prompt "Sets log level for pwm_ftm driver"
	depends on PWM_K64_FTM
	default 0
	help
	Sets log level for pwm_ftm driver.

	Levels are:

	- 0 OFF, do not write

	- 1 ERROR, only write SYS_LOG_ERR

	- 2 WARNING, write SYS_LOG_WRN in addition to previous level

	- 3 INFO, write SYS_LOG_INF in addition to previous levels

	- 4 DEBUG, write SYS_LOG_DBG in addition to previous levels

#### FTM0 #####

config PWM_K64_FTM_0
	bool "K64 FTM PWM Module 0"
	depends on PWM_K64_FTM
	default n
	help
	Enable config PWM options for FTM0 source module.

config PWM_K64_FTM_0_DEV_NAME
	string "K64 FTM PWM Module 0 Device Name"
	depends on PWM_K64_FTM_0
	default "PWM_0"
	help
	Specify the device name for the FTM0 source module.

config PWM_K64_FTM_0_PRESCALE
	int "K64 FTM0 prescale value"
	default 1
	depends on PWM_K64_FTM_0
	help
	Specify the FTM timer prescale value.  The valid values are
	1, 2, 4, 8, 16, 32, 64, or 128.

config PWM_K64_FTM_0_PERIOD
	int "K64 FTM0 period value"
	default 65535
	depends on PWM_K64_FTM_0
	help
	Specify the FTM0 PWM period in ticks

menu "K64 FTM0 Clock Source"
depends on PWM_K64_FTM_0

choice PWM_K64_FTM_0_CLOCK_SOURCE_CHOICE
	prompt "Choose the K64 FTM0 clock source"
	default PWM_K64_FTM_0_CLOCK_SOURCE_SYSTEM

config PWM_K64_FTM_0_CLOCK_SOURCE_NONE
	bool "No clock selected (FTM counter disable)"

config PWM_K64_FTM_0_CLOCK_SOURCE_SYSTEM
	bool "System clock"

config PWM_K64_FTM_0_CLOCK_SOURCE_FIXED
	bool "Fixed Frequency Clock"

config PWM_K64_FTM_0_CLOCK_SOURCE_EXTERNAL
	bool "External Clock"

config PWM_K64_FTM_0_CLOCK_SOURCE_QUAD
	bool "Quadrature Decoder"

endchoice

endmenu

config PWM_K64_FTM_0_CLOCK_SOURCE
	int
	# Omit prompt to signify "hidden" option
	depends on PWM_K64_FTM_0
	default 0 if PWM_K64_FTM_0_CLOCK_SOURCE_NONE
	default 1 if PWM_K64_FTM_0_CLOCK_SOURCE_SYSTEM
	default 2 if PWM_K64_FTM_0_CLOCK_SOURCE_FIXED
	default 3 if PWM_K64_FTM_0_CLOCK_SOURCE_EXTERNAL
	default 4 if PWM_K64_FTM_0_CLOCK_SOURCE_QUAD
	help
	Specify K64 FTM0 clock source

config PWM_K64_FTM_0_PHASE_ENABLE_0
	bool "FTM0 Enable Phase for channel 0"
	depends on PWM_K64_FTM_0
	default n
	help
	Allow a phase offset on FTM0 channel 0.  This configures
	channels 0 and 1 to be in combine mode therefore
	channel 1 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_K64_FTM_0_PHASE_ENABLE_2
	bool "FTM0 Enable Phase for channel 2"
	depends on PWM_K64_FTM_0
	default n
	help
	Allow a phase offset on FTM0 channel 2.  This configures
	channels 2 and 3 to be in combine mode therefore
	channel 3 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_K64_FTM_0_PHASE_ENABLE_4
	bool "FTM0 Enable Phase for channel 4"
	depends on PWM_K64_FTM_0
	default n
	help
	Allow a phase offset on FTM0 channel 4.  This configures
	channels 4 and 5 to be in combine mode therefore
	channel 5 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_K64_FTM_0_PHASE_ENABLE_6
	bool "FTM0 Enable Phase for channel 6"
	depends on PWM_K64_FTM_0
	default n
	help
	Allow a phase offset on FTM0 channel 6.  This configures
	channels 6 and 7 to be in combine mode therefore
	channel 7 is not valid as an output signal.
	Note: phase is an unsupported feature.

#### FTM1 #####

config PWM_K64_FTM_1
	bool "K64 FTM PWM Module 1"
	depends on PWM_K64_FTM
	default n
	help
	Enable config PWM options for FTM1 source module.

config PWM_K64_FTM_1_DEV_NAME
	string "K64 FTM PWM Module 1 Device Name"
	depends on PWM_K64_FTM_1
	default "PWM_1"
	help
	Specify the device name for the FTM1 source module.

config PWM_K64_FTM_1_PRESCALE
	int "FTM1 prescale value"
	default 1
	depends on PWM_K64_FTM_1
	help
	Specify the FTM1 timer prescale value.  The valid values are
	1, 2, 4, 8, 16, 32, 64, or 128

config PWM_K64_FTM_1_PERIOD
	int "FTM1 period value"
	default 65535
	depends on PWM_K64_FTM_1
	help
	Specify the FTM1 PWM period in ticks

menu "K64 FTM1 Clock Source"
depends on PWM_K64_FTM_1

choice PWM_K64_FTM_1_CLOCK_SOURCE_CHOICE
	prompt "Choose the FTM1 clock source"
	default PWM_K64_FTM_1_CLOCK_SOURCE_SYSTEM

config PWM_K64_FTM_1_CLOCK_SOURCE_NONE
	bool "No clock selected (FTM counter disable)"

config PWM_K64_FTM_1_CLOCK_SOURCE_SYSTEM
	bool "System clock"

config PWM_K64_FTM_1_CLOCK_SOURCE_FIXED
	bool "Fixed Frequency Clock"

config PWM_K64_FTM_1_CLOCK_SOURCE_EXTERNAL
	bool "External Clock"

config PWM_K64_FTM_1_CLOCK_SOURCE_QUAD
	bool "Quadrature Decoder"

endchoice

endmenu

config PWM_K64_FTM_1_CLOCK_SOURCE
	int
	# Omit prompt to signify "hidden" option
	depends on PWM_K64_FTM_1
	default 0 if PWM_K64_FTM_1_CLOCK_SOURCE_NONE
	default 1 if PWM_K64_FTM_1_CLOCK_SOURCE_SYSTEM
	default 2 if PWM_K64_FTM_1_CLOCK_SOURCE_FIXED
	default 3 if PWM_K64_FTM_1_CLOCK_SOURCE_EXTERNAL
	default 4 if PWM_K64_FTM_1_CLOCK_SOURCE_QUAD
	help
	Specify K64 FTM1 clock source

config PWM_K64_FTM_1_PHASE_ENABLE_0
	bool "FTM1 Enable Phase for channel 0"
	depends on PWM_K64_FTM_1
	default n
	help
	Allow a phase offset on FTM1 channel 0.  This configures
	channels 0 and 1 to be in combine mode therefore
	channel 1 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_FTM_1_PHASE_ENABLE_2
	bool "FTM1 Enable Phase for channel 2"
	depends on PWM_K64_FTM_1
	default n
	help
	Allow a phase offset on FTM1 channel 2.  This configures
	channels 2 and 3 to be in combine mode therefore
	channel 3 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_FTM_1_PHASE_ENABLE_4
	bool "FTM1 Enable Phase for channel 4"
	depends on PWM_K64_FTM_1
	default n
	help
	Allow a phase offset on FTM1 channel 4.  This configures
	channels 4 and 5 to be in combine mode therefore
	channel 5 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_FTM_1_PHASE_ENABLE_6
	bool "FTM1 Enable Phase for channel 6"
	depends on PWM_K64_FTM_1
	default n
	help
	Allow a phase offset on FTM1 channel 6.  This configures
	channels 6 and 7 to be in combine mode therefore
	channel 7 is not valid as an output signal.
	Note: phase is an unsupported feature.

#### FTM2 #####

config PWM_K64_FTM_2
	bool "K64 FTM PWM Module 2"
	depends on PWM_K64_FTM
	default n
	help
	Enable config PWM options for FTM2 source module.

config PWM_K64_FTM_2_DEV_NAME
	string "K64 FTM PWM Module 2 Device Name"
	depends on PWM_K64_FTM_2
	default "PWM_2"
	help
	Specify the device name for the FTM2 source module.

config PWM_K64_FTM_2_PRESCALE
	int "FTM2 prescale value"
	default 1
	depends on PWM_K64_FTM_2
	help
	Specify the FTM2 timer prescale value.  The valid values are
	1, 2, 4, 8, 16, 32, 64, or 128

config PWM_K64_FTM_2_PERIOD
	int "FTM2 period value"
	default 65535
	depends on PWM_K64_FTM_2
	help
	Specify the FTM2 PWM period in ticks

menu "K64 FTM2 Clock Source"
depends on PWM_K64_FTM_2

choice PWM_K64_FTM_2_CLOCK_SOURCE_CHOICE
	prompt "Choose the FTM2 clock source"
	default PWM_K64_FTM_2_CLOCK_SOURCE_SYSTEM

config PWM_K64_FTM_2_CLOCK_SOURCE_NONE
	bool "No clock selected (FTM counter disable)"

config PWM_K64_FTM_2_CLOCK_SOURCE_SYSTEM
	bool "System clock"

config PWM_K64_FTM_2_CLOCK_SOURCE_FIXED
	bool "Fixed Frequency Clock"

config PWM_K64_FTM_2_CLOCK_SOURCE_EXTERNAL
	bool "External Clock"

config PWM_K64_FTM_2_CLOCK_SOURCE_QUAD
	bool "Quadrature Decoder"

endchoice

endmenu

config PWM_K64_FTM_2_CLOCK_SOURCE
	int
	# Omit prompt to signify "hidden" option
	depends on PWM_K64_FTM_2
	default 0 if PWM_K64_FTM_2_CLOCK_SOURCE_NONE
	default 1 if PWM_K64_FTM_2_CLOCK_SOURCE_SYSTEM
	default 2 if PWM_K64_FTM_2_CLOCK_SOURCE_FIXED
	default 3 if PWM_K64_FTM_2_CLOCK_SOURCE_EXTERNAL
	default 4 if PWM_K64_FTM_2_CLOCK_SOURCE_QUAD
	help
	Specify K64 FTM2 clock source

config PWM_K64_FTM_2_PHASE_ENABLE_0
	bool "FTM2 Enable Phase for channel 0"
	depends on PWM_K64_FTM_2
	default n
	help
	Allow a phase offset on FTM2 channel 0.  This configures
	channels 0 and 1 to be in combine mode therefore
	channel 1 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_K64_FTM_2_PHASE_ENABLE_2
	bool "FTM2 Enable Phase for channel 2"
	depends on PWM_K64_FTM_2
	default n
	help
	Allow a phase offset on FTM2 channel 2.  This configures
	channels 2 and 3 to be in combine mode therefore
	channel 3 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_K64_FTM_2_PHASE_ENABLE_4
	bool "FTM2 Enable Phase for channel 4"
	depends on PWM_K64_FTM_2
	default n
	help
	Allow a phase offset on FTM2 channel 4.  This configures
	channels 4 and 5 to be in combine mode therefore
	channel 5 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_K64_FTM_2_PHASE_ENABLE_6
	bool "FTM2 Enable Phase for channel 6"
	depends on PWM_K64_FTM_2
	default n
	help
	Allow a phase offset on FTM2 channel 6.  This configures
	channels 6 and 7 to be in combine mode therefore
	channel 7 is not valid as an output signal.
	Note: phase is an unsupported feature.

#### FTM3 #####

config PWM_K64_FTM_3
	bool "K64 FTM PWM Module 3"
	depends on PWM_K64_FTM
	default n
	help
	Enable config PWM options for K64 FTM3 source module.

config PWM_K64_FTM_3_DEV_NAME
	string "K64 FTM PWM Module 3 Device Name"
	depends on PWM_K64_FTM_3
	default "PWM_3"
	help
	Specify the device name for the FTM3 source module.

config PWM_K64_FTM_3_PRESCALE
	int "FTM3 prescale value"
	default 3
	depends on PWM_K64_FTM_3
	help
	Specify the FTM timer prescale value.  The valid values are
	1, 2, 4, 8, 16, 32, 64, or 128

config PWM_K64_FTM_3_PERIOD
	int "FTM3 period value"
	default 65535
	depends on PWM_K64_FTM_3
	help
	Specify the FTM3 PWM period in ticks

menu "K64 FTM3 Clock Source"
depends on PWM_K64_FTM_3

choice PWM_K64_FTM_3_CLOCK_SOURCE_CHOICE
	prompt "Choose the FTM3 clock source"
	default PWM_K64_FTM_3_CLOCK_SOURCE_SYSTEM

config PWM_K64_FTM_3_CLOCK_SOURCE_NONE
	bool "No clock selected (FTM counter disable)"

config PWM_K64_FTM_3_CLOCK_SOURCE_SYSTEM
	bool "System clock"

config PWM_K64_FTM_3_CLOCK_SOURCE_FIXED
	bool "Fixed Frequency Clock"

config PWM_K64_FTM_3_CLOCK_SOURCE_EXTERNAL
	bool "External Clock"

config PWM_K64_FTM_3_CLOCK_SOURCE_QUAD
	bool "Quadrature Decoder"

endchoice

endmenu

config PWM_K64_FTM_3_CLOCK_SOURCE
	int
	# Omit prompt to signify "hidden" option
	depends on PWM_K64_FTM_3
	default 0 if PWM_K64_FTM_3_CLOCK_SOURCE_NONE
	default 1 if PWM_K64_FTM_3_CLOCK_SOURCE_SYSTEM
	default 2 if PWM_K64_FTM_3_CLOCK_SOURCE_FIXED
	default 3 if PWM_K64_FTM_3_CLOCK_SOURCE_EXTERNAL
	default 4 if PWM_K64_FTM_3_CLOCK_SOURCE_QUAD
	help
	Specify K64 FTM3 clock source

config PWM_K64_FTM_3_PHASE_ENABLE_0
	bool "FTM3 Enable Phase for channel 0"
	depends on PWM_K64_FTM_3
	default n
	help
	Allow a phase offset on FTM3 channel 0.  This configures
	channels 0 and 1 to be in combine mode therefore
	channel 1 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_K64_FTM_3_PHASE_ENABLE_2
	bool "FTM3 Enable Phase for channel 2"
	depends on PWM_K64_FTM_3
	default n
	help
	Allow a phase offset on FTM3 channel 2.  This configures
	channels 2 and 3 to be in combine mode therefore
	channel 3 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_K64_FTM_3_PHASE_ENABLE_4
	bool "FTM3 Enable Phase for channel 4"
	depends on PWM_K64_FTM_3
	default n
	help
	Allow a phase offset on FTM3 channel 4.  This configures
	channels 4 and 5 to be in combine mode therefore
	channel 5 is not valid as an output signal.
	Note: phase is an unsupported feature.

config PWM_K64_FTM_3_PHASE_ENABLE_6
	bool "FTM3 Enable Phase for channel 6"
	depends on PWM_K64_FTM_3
	default n
	help
	Allow a phase offset on FTM3 channel 6.  This configures
	channels 6 and 7 to be in combine mode therefore
	channel 7 is not valid as an output signal.
	Note: phase is an unsupported feature.

endif # PWM_K64_FTM
