# Kconfig - Galileo Pinmux configuration options

#
# Copyright (c) 2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

if PINMUX && BOARD_GALILEO
comment "Galileo Pinmux Options"

config PINMUX_GALILEO_EXP0_NAME
	string "Name of the GPIO expander 0"
	depends on PINMUX && BOARD_GALILEO
	default "EXP0"
	help
	The name of the GPIO expander labeled as EXP0 in the schematic.

config PINMUX_GALILEO_EXP1_NAME
	string "Name of the GPIO expander 1"
	depends on PINMUX && BOARD_GALILEO
	default "EXP1"
	help
	The name of the GPIO expander labeled as EXP1 in the schematic.

config PINMUX_GALILEO_EXP2_NAME
	string "Name of the GPIO expander 2"
	depends on PINMUX && BOARD_GALILEO
	default "EXP2"
	help
	The name of the GPIO expander labeled as EXP2 in the schematic.

config PINMUX_GALILEO_PWM0_NAME
	string "Name of the PWM LED expander 0"
	depends on PINMUX && BOARD_GALILEO
	default "PWM0"
	help
	The name of the PWM LED expander labeled as PWM0 in the schematic.

config PINMUX_GALILEO_GPIO_DW_NAME
	string "Name of the DesignWare GPIO"
	depends on PINMUX && BOARD_GALILEO
	default "GPIO_0"
	help
	The name of the DesignWare GPIO with GPIO<0>..GPIO<7> in the schematic.

config PINMUX_GALILEO_GPIO_INTEL_CW_NAME
	string "Name of the Legacy Bridge Core Well GPIO"
	depends on PINMUX && BOARD_GALILEO
	default "GPIO_M0"
	help
	The name of the Legacy Bridge Core Well GPIO with GPIO<8>..GPIO<9>
	in the schematic.

config PINMUX_GALILEO_GPIO_INTEL_RW_NAME
	string "Name of the Legacy Bridge Resume Well GPIO"
	depends on PINMUX && BOARD_GALILEO
	default "GPIO_M1"
	help
	The name of the Legacy Bridge Resume Well GPIO with
	GPIO_SUS<0>..GPIO_SUS<5> in the schematic.
endif
