# Kconfig - Quark X1000 SoC configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
# Copyright (c) 2015-2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

if SOC_SERIES_QUARK_X1000

config SOC_SERIES
	default "quark_x1000"

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 25000000  if HPET_TIMER

config CLFLUSH_DETECT
	default y if CACHE_FLUSHING

if SHARED_IRQ

config SHARED_IRQ_0
	default y

endif # SHARED_IRQ

if PCI_LEGACY_BRIDGE

config PCI_LEGACY_BRIDGE_BUS
	default 0
config PCI_LEGACY_BRIDGE_DEV
	default 31
config PCI_LEGACY_BRIDGE_VENDOR_ID
	default 0x8086
config PCI_LEGACY_BRIDGE_DEVICE_ID
	default 0x095e

endif # PCI_LEGACY_BRIDGE

if I2C

config I2C_DW
	default y

if I2C_DW

config I2C_DW_CLOCK_SPEED
	default 25

config I2C_0
	default y

if I2C_0

config I2C_0_IRQ_PRI
	default 2

endif # I2C_0

endif # I2C_DW

endif # I2C


if GPIO

config GPIO_SCH
	default y

if GPIO_SCH

config GPIO_SCH_0
	default y

config GPIO_SCH_1
	default y

if GPIO_SCH_0

config GPIO_SCH_0_DEV_NAME
	default "GPIO_CW"

endif # GPIO_SCH_0

if GPIO_SCH_1

config GPIO_SCH_1_DEV_NAME
	default "GPIO_RW"

endif # GPIO_SCH_1

endif # GPIO_SCH

config GPIO_DW
	default y

if GPIO_DW

config GPIO_DW_0
	default y

if GPIO_DW_0

config GPIO_DW_0_NAME
	default "GPIO_0"
config GPIO_DW_0_IRQ_PRI
	default 2

endif # GPIO_DW_0

endif # GPIO_DW

endif # GPIO


if SPI

config SPI_INTEL
	default y

if SPI_INTEL

config SPI_0
	default y

config SPI_1
	default n

endif # SPI_INTEL

endif # SPI

if UART_NS16550

config UART_NS16550_PCI
	default y if PCI

config UART_NS16550_PORT_0
	default y

if UART_NS16550_PORT_0

config UART_NS16550_PORT_0_OPTIONS
	default 0

config UART_NS16550_PORT_0_PCI
	default y if UART_NS16550_PCI

endif # UART_NS16550_PORT_0

config UART_NS16550_PORT_1
	default y if PCI

if UART_NS16550_PORT_1

config UART_NS16550_PORT_1_OPTIONS
	default 0

config UART_NS16550_PORT_1_PCI
	default y if UART_NS16550_PCI

endif # UART_NS16550_PORT_1

endif # UART_NS16550


if NET_L2_ETHERNET
config ETH_DW
	default y

if ETH_DW

config ETH_DW_0
	default y

endif # ETH_DW

endif # NET_L2_ETHERNET

# Pin multiplexer uses PCAL9535A, needs to be initialized after it
config PINMUX_INIT_PRIORITY
	default 80 if PINMUX

if UART_CONSOLE

endif

if BT_UART

config BT_UART_ON_DEV_NAME
	default "UART_1"

endif

source "soc/x86/intel_quark/quark_x1000/Kconfig.defconfig.quark_x1000"
endif # SOC_SERIES_QUARK_X1000
