# Kconfig.qmsi - QMSI SPI driver configuration options
#
#
# Copyright (c) 2016 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

menuconfig SPI_QMSI
	bool "QMSI driver for SPI controller"
	depends on SPI && QMSI_DRIVERS
	default n
	help
	  SPI driver implementation using QMSI library. QMSI is the
	  Quark Microcontroller Software Interface, providing a common
	  interface to the Quark family of microcontrollers.

if SPI_QMSI

config SPI_QMSI_INIT_PRIORITY
	int
	prompt "QMSI driver init priority"
	depends on SPI_QMSI
	default 60
	help
	  Device driver initialization priority.

config	SPI_QMSI_PORT_0
	bool
	prompt "QMSI SPI port 0"
	depends on SPI_QMSI
	default n
	help
	  Enable QMSI's SPI controller port 0.

config SPI_QMSI_CS_GPIO
	bool "SPI port CS pin is controlled via a GPIO port"
	depends on SPI_QMSI && GPIO
	default n

config  SPI_QMSI_PORT_0_DRV_NAME
	string
	prompt "QMSI SPI port 0 device name"
	depends on SPI_QMSI_PORT_0
	default "SPI_0"

config  SPI_QMSI_PORT_0_IRQ
	int
	prompt "Port 0 interrupt"
	depends on SPI_QMSI_PORT_0

config  SPI_QMSI_PORT_0_PRI
	int
	prompt "Port 0 interrupt priority"
	depends on SPI_QMSI_PORT_0

config  SPI_QMSI_PORT_0_CS_GPIO_PORT
	string
	prompt "The GPIO port which is used to control CS"
	depends on SPI_QMSI_PORT_0 && SPI_QMSI_CS_GPIO
	default GPIO_QMSI_0_NAME

config  SPI_QMSI_PORT_0_CS_GPIO_PIN
	int "The GPIO PIN which is used to act as a CS pin"
	depends on SPI_QMSI_PORT_0 && SPI_QMSI_CS_GPIO
	default 0

config  SPI_QMSI_PORT_1
	bool
	prompt "QMSI SPI port 1"
	depends on SPI_QMSI
	default n
	help
	  Enable QMSI's SPI controller port 1.

config  SPI_QMSI_PORT_1_DRV_NAME
	string
	prompt "QMSI SPI port 1 device name"
	depends on SPI_QMSI_PORT_1
	default "SPI_1"

config  SPI_QMSI_PORT_1_IRQ
	int
	prompt "Port 1 interrupt"
	depends on SPI_QMSI_PORT_1

config  SPI_QMSI_PORT_1_PRI
	int
	prompt "Port 0 interrupt priority"
	depends on SPI_QMSI_PORT_1

config  SPI_QMSI_PORT_1_CS_GPIO_PORT
	string
	prompt "The GPIO port which is used to control CS"
	depends on SPI_QMSI_PORT_1 && SPI_QMSI_CS_GPIO
	default GPIO_QMSI_0_NAME

config  SPI_QMSI_PORT_1_CS_GPIO_PIN
	int "The GPIO PIN which is used to act as a CS pin"
	depends on SPI_QMSI_PORT_1 && SPI_QMSI_CS_GPIO
	default 0

endif # SPI_QMSI
