# 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_PORT_0
	default y

if UART_NS16550_PORT_0

config UART_NS16550_PORT_0_OPTIONS
	default 0

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

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
