config SSB_POSSIBLE
	bool
	depends on HAS_IOMEM && HAS_DMA
	default y

menu "Sonics Silicon Backplane"
	depends on SSB_POSSIBLE

config SSB
	tristate "Sonics Silicon Backplane support"
	depends on SSB_POSSIBLE
	help
	  Support for the Sonics Silicon Backplane bus.
	  You only need to enable this option, if you are
	  configuring a kernel for an embedded system with
	  this bus.
	  It will be auto-selected if needed in other
	  environments.

	  The module will be called ssb.

	  If unsure, say N.

# Common SPROM support routines
config SSB_SPROM
	bool

# Support for Block-I/O. SELECT this from the driver that needs it.
config SSB_BLOCKIO
	bool
	depends on SSB

config SSB_PCIHOST_POSSIBLE
	bool
	depends on SSB && (PCI = y || PCI = SSB)
	default y

config SSB_PCIHOST
	bool "Support for SSB on PCI-bus host"
	depends on SSB_PCIHOST_POSSIBLE
	select SSB_SPROM
	default y
	help
	  Support for a Sonics Silicon Backplane on top
	  of a PCI device.

	  If unsure, say Y

config SSB_B43_PCI_BRIDGE
	bool
	depends on SSB_PCIHOST
	default n

config SSB_PCMCIAHOST_POSSIBLE
	bool
	depends on SSB && (PCMCIA = y || PCMCIA = SSB)
	default y

config SSB_PCMCIAHOST
	bool "Support for SSB on PCMCIA-bus host"
	depends on SSB_PCMCIAHOST_POSSIBLE
	select SSB_SPROM
	help
	  Support for a Sonics Silicon Backplane on top
	  of a PCMCIA device.

	  If unsure, say N

config SSB_SDIOHOST_POSSIBLE
	bool
	depends on SSB && (MMC = y || MMC = SSB)
	default y

config SSB_SDIOHOST
	bool "Support for SSB on SDIO-bus host"
	depends on SSB_SDIOHOST_POSSIBLE
	help
	  Support for a Sonics Silicon Backplane on top
	  of a SDIO device.

	  If unsure, say N

config SSB_HOST_SOC
	bool "Support for SSB bus on SoC"
	depends on SSB
	help
	  Host interface for a SSB directly mapped into memory. This is
	  for some Broadcom SoCs from the BCM47xx and BCM53xx lines.

	  If unsure, say N

config SSB_SILENT
	bool "No SSB kernel messages"
	depends on SSB && EXPERT
	help
	  This option turns off all Sonics Silicon Backplane printks.
	  Note that you won't be able to identify problems, once
	  messages are turned off.
	  This might only be desired for production kernels on
	  embedded devices to reduce the kernel size.

	  Say N

config SSB_DEBUG
	bool "SSB debugging"
	depends on SSB && !SSB_SILENT
	help
	  This turns on additional runtime checks and debugging
	  messages. Turn this on for SSB troubleshooting.

	  If unsure, say N

config SSB_SERIAL
	bool
	depends on SSB
	# ChipCommon and ExtIf serial support routines.

config SSB_DRIVER_PCICORE_POSSIBLE
	bool
	depends on SSB_PCIHOST
	default y

config SSB_DRIVER_PCICORE
	bool "SSB PCI core driver"
	depends on SSB_DRIVER_PCICORE_POSSIBLE
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom PCI core.

	  If unsure, say Y

config SSB_PCICORE_HOSTMODE
	bool "Hostmode support for SSB PCI core"
	depends on SSB_DRIVER_PCICORE && SSB_DRIVER_MIPS
	help
	  PCIcore hostmode operation (external PCI bus).

config SSB_DRIVER_MIPS
	bool "SSB Broadcom MIPS core driver"
	depends on SSB && MIPS
	select SSB_SERIAL
	select SSB_SFLASH
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom MIPS core.

	  If unsure, say N

config SSB_SFLASH
	bool "SSB serial flash support"
	depends on SSB_DRIVER_MIPS
	default y

# Assumption: We are on embedded, if we compile the MIPS core.
config SSB_EMBEDDED
	bool
	depends on SSB_DRIVER_MIPS && SSB_PCICORE_HOSTMODE
	default y

config SSB_DRIVER_EXTIF
	bool "SSB Broadcom EXTIF core driver"
	depends on SSB_DRIVER_MIPS
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom EXTIF core.

	  If unsure, say N

config SSB_DRIVER_GIGE
	bool "SSB Broadcom Gigabit Ethernet driver"
	depends on SSB_PCIHOST_POSSIBLE && SSB_EMBEDDED && MIPS
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom Gigabit Ethernet.

	  If unsure, say N

config SSB_DRIVER_GPIO
	bool "SSB GPIO driver"
	depends on SSB && GPIOLIB
	select IRQ_DOMAIN if SSB_EMBEDDED
	help
	  Driver to provide access to the GPIO pins on the bus.

	  If unsure, say N

endmenu
