if ETRAX_ARCH_V32

config ETRAX_ETHERNET
	bool "Ethernet support"
	depends on ETRAX_ARCH_V32
	select NET_ETHERNET
	select MII
	help
	  This option enables the ETRAX FS built-in 10/100Mbit Ethernet
	  controller.

config ETRAX_NO_PHY
	bool "PHY not present"
	depends on ETRAX_ETHERNET
	default N
	help
	  This option disables all MDIO communication with an ethernet
	  transceiver connected to the MII interface. This option shall
	  typically be enabled if the MII interface is connected to a
	  switch. This option should normally be disabled. If enabled,
	  speed and duplex will be locked to 100 Mbit and full duplex.

config ETRAX_ETHERNET_IFACE0
	depends on ETRAX_ETHERNET
	bool "Enable network interface 0"

config ETRAX_ETHERNET_IFACE1
	depends on (ETRAX_ETHERNET && ETRAXFS)
	bool "Enable network interface 1 (uses DMA6 and DMA7)"

config ETRAX_ETHERNET_GBIT
	depends on (ETRAX_ETHERNET && CRIS_MACH_ARTPEC3)
	bool "Enable gigabit Ethernet support"

choice
	prompt "Eth0 led group"
	depends on ETRAX_ETHERNET_IFACE0
	default ETRAX_ETH0_USE_LEDGRP0

config ETRAX_ETH0_USE_LEDGRP0
	bool "Use LED grp 0"
	depends on ETRAX_NBR_LED_GRP_ONE || ETRAX_NBR_LED_GRP_TWO
	help
	  Use LED grp 0 for eth0

config ETRAX_ETH0_USE_LEDGRP1
	bool "Use LED grp 1"
	depends on ETRAX_NBR_LED_GRP_TWO
	help
	  Use LED grp 1 for eth0

config ETRAX_ETH0_USE_LEDGRPNULL
	bool "Use no LEDs for eth0"
	help
	  Use no LEDs for eth0
endchoice

choice
	prompt "Eth1 led group"
	depends on ETRAX_ETHERNET_IFACE1
	default ETRAX_ETH1_USE_LEDGRP1

config ETRAX_ETH1_USE_LEDGRP0
	bool "Use LED grp 0"
	depends on ETRAX_NBR_LED_GRP_ONE || ETRAX_NBR_LED_GRP_TWO
	help
	  Use LED grp 0 for eth1

config ETRAX_ETH1_USE_LEDGRP1
	bool "Use LED grp 1"
	depends on ETRAX_NBR_LED_GRP_TWO
	help
	  Use LED grp 1 for eth1

config ETRAX_ETH1_USE_LEDGRPNULL
	bool "Use no LEDs for eth1"
	help
	  Use no LEDs for eth1
endchoice

config ETRAXFS_SERIAL
	bool "Serial-port support"
	depends on ETRAX_ARCH_V32
	select SERIAL_CORE
	select SERIAL_CORE_CONSOLE
	help
	  Enables the ETRAX FS serial driver for ser0 (ttyS0)
	  You probably want this enabled.

config ETRAX_RS485
	bool "RS-485 support"
	depends on ETRAXFS_SERIAL
	help
	  Enables support for RS-485 serial communication.

config ETRAX_RS485_DISABLE_RECEIVER
	bool "Disable serial receiver"
	depends on ETRAX_RS485
	help
	  It is necessary to disable the serial receiver to avoid serial
	  loopback.  Not all products are able to do this in software only.

config ETRAX_SERIAL_PORT0
	bool "Serial port 0 enabled"
	depends on ETRAXFS_SERIAL
	help
	  Enables the ETRAX FS serial driver for ser0 (ttyS0)
	  Normally you want this on. You can control what DMA channels to use
	  if you do not need DMA to something else.
	  ser0 can use dma4 or dma6 for output and dma5 or dma7 for input.

choice
	prompt "Ser0 default port type "
	depends on ETRAX_SERIAL_PORT0
	default ETRAX_SERIAL_PORT0_TYPE_232
	help
	  Type of serial port.

config ETRAX_SERIAL_PORT0_TYPE_232
	bool "Ser0 is a RS-232 port"
	help
	  Configure serial port 0 to be a RS-232 port.

config ETRAX_SERIAL_PORT0_TYPE_485HD
	bool "Ser0 is a half duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 0 to be a half duplex (two wires) RS-485 port.

config ETRAX_SERIAL_PORT0_TYPE_485FD
	bool "Ser0 is a full duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 0 to be a full duplex (four wires) RS-485 port.
endchoice

config ETRAX_SER0_DTR_BIT
	string "Ser 0 DTR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT0

config ETRAX_SER0_RI_BIT
	string "Ser 0 RI bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT0

config ETRAX_SER0_DSR_BIT
	string "Ser 0 DSR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT0

config ETRAX_SER0_CD_BIT
	string "Ser 0 CD bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT0

config ETRAX_SERIAL_PORT1
	bool "Serial port 1 enabled"
	depends on ETRAXFS_SERIAL
	help
	  Enables the ETRAX FS serial driver for ser1 (ttyS1).

choice
	prompt "Ser1 default port type"
	depends on ETRAX_SERIAL_PORT1
	default ETRAX_SERIAL_PORT1_TYPE_232
	help
	  Type of serial port.

config ETRAX_SERIAL_PORT1_TYPE_232
	bool "Ser1 is a RS-232 port"
	help
	  Configure serial port 1 to be a RS-232 port.

config ETRAX_SERIAL_PORT1_TYPE_485HD
	bool "Ser1 is a half duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 1 to be a half duplex (two wires) RS-485 port.

config ETRAX_SERIAL_PORT1_TYPE_485FD
	bool "Ser1 is a full duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 1 to be a full duplex (four wires) RS-485 port.
endchoice

config ETRAX_SER1_DTR_BIT
	string "Ser 1 DTR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT1

config ETRAX_SER1_RI_BIT
	string "Ser 1 RI bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT1

config ETRAX_SER1_DSR_BIT
	string "Ser 1 DSR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT1

config ETRAX_SER1_CD_BIT
	string "Ser 1 CD bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT1

config ETRAX_SERIAL_PORT2
	bool "Serial port 2 enabled"
	depends on ETRAXFS_SERIAL
	help
	  Enables the ETRAX FS serial driver for ser2 (ttyS2).

choice
	prompt "Ser2 default port type"
	depends on ETRAX_SERIAL_PORT2
	default ETRAX_SERIAL_PORT2_TYPE_232
	help
	  What DMA channel to use for ser2

config ETRAX_SERIAL_PORT2_TYPE_232
	bool "Ser2 is a RS-232 port"
	help
	  Configure serial port 2 to be a RS-232 port.

config ETRAX_SERIAL_PORT2_TYPE_485HD
	bool "Ser2 is a half duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 2 to be a half duplex (two wires) RS-485 port.

config ETRAX_SERIAL_PORT2_TYPE_485FD
	bool "Ser2 is a full duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 2 to be a full duplex (four wires) RS-485 port.
endchoice


config ETRAX_SER2_DTR_BIT
	string "Ser 2 DTR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT2

config ETRAX_SER2_RI_BIT
	string "Ser 2 RI bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT2

config ETRAX_SER2_DSR_BIT
	string "Ser 2 DSR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT2

config ETRAX_SER2_CD_BIT
	string "Ser 2 CD bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT2

config ETRAX_SERIAL_PORT3
	bool "Serial port 3 enabled"
	depends on ETRAXFS_SERIAL
	help
	  Enables the ETRAX FS serial driver for ser3 (ttyS3).

choice
	prompt "Ser3 default port type"
	depends on ETRAX_SERIAL_PORT3
	default ETRAX_SERIAL_PORT3_TYPE_232
	help
	  What DMA channel to use for ser3.

config ETRAX_SERIAL_PORT3_TYPE_232
	bool "Ser3 is a RS-232 port"
	help
	  Configure serial port 3 to be a RS-232 port.

config ETRAX_SERIAL_PORT3_TYPE_485HD
	bool "Ser3 is a half duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 3 to be a half duplex (two wires) RS-485 port.

config ETRAX_SERIAL_PORT3_TYPE_485FD
	bool "Ser3 is a full duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 3 to be a full duplex (four wires) RS-485 port.
endchoice

config ETRAX_SER3_DTR_BIT
	string "Ser 3 DTR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT3

config ETRAX_SER3_RI_BIT
	string "Ser 3 RI bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT3

config ETRAX_SER3_DSR_BIT
	string "Ser 3 DSR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT3

config ETRAX_SER3_CD_BIT
	string "Ser 3 CD bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT3

config ETRAX_SERIAL_PORT4
	bool "Serial port 4 enabled"
	depends on ETRAXFS_SERIAL && CRIS_MACH_ARTPEC3
	help
	  Enables the ETRAX FS serial driver for ser4 (ttyS4).

choice
	prompt "Ser4 default port type"
	depends on ETRAX_SERIAL_PORT4
	default ETRAX_SERIAL_PORT4_TYPE_232
	help
	  What DMA channel to use for ser4.

config ETRAX_SERIAL_PORT4_TYPE_232
	bool "Ser4 is a RS-232 port"
	help
	  Configure serial port 4 to be a RS-232 port.

config ETRAX_SERIAL_PORT4_TYPE_485HD
	bool "Ser4 is a half duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 4 to be a half duplex (two wires) RS-485 port.

config ETRAX_SERIAL_PORT4_TYPE_485FD
	bool "Ser4 is a full duplex RS-485 port"
	depends on ETRAX_RS485
	help
	  Configure serial port 4 to be a full duplex (four wires) RS-485 port.
endchoice

choice
	prompt "Ser4 DMA in channel "
	depends on ETRAX_SERIAL_PORT4
	default ETRAX_SERIAL_PORT4_NO_DMA_IN
	help
	  What DMA channel to use for ser4.


config ETRAX_SERIAL_PORT4_NO_DMA_IN
	bool "Ser4 uses no DMA for input"
	help
	  Do not use DMA for ser4 input.

config ETRAX_SERIAL_PORT4_DMA9_IN
	bool "Ser4 uses DMA9 for input"
	depends on ETRAX_SERIAL_PORT4
	help
	  Enables the DMA9 input channel for ser4 (ttyS4).
	  If you do not enable DMA, an interrupt for each character will be
	  used when receiving data.
	  Normally you want to use DMA, unless you use the DMA channel for
	  something else.

endchoice

config ETRAX_SER4_DTR_BIT
	string "Ser 4 DTR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT4

config ETRAX_SER4_RI_BIT
	string "Ser 4 RI bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT4

config ETRAX_SER4_DSR_BIT
	string "Ser 4 DSR bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT4

config ETRAX_SER4_CD_BIT
	string "Ser 4 CD bit (empty = not used)"
	depends on ETRAX_SERIAL_PORT4

config ETRAX_SYNCHRONOUS_SERIAL
	bool "Synchronous serial-port support"
	depends on ETRAX_ARCH_V32
	help
	  Enables the ETRAX FS synchronous serial driver.

config ETRAX_SYNCHRONOUS_SERIAL_PORT0
         bool "Synchronous serial port 0 enabled"
         depends on ETRAX_SYNCHRONOUS_SERIAL
         help
           Enabled synchronous serial port 0.

config ETRAX_SYNCHRONOUS_SERIAL0_DMA
         bool "Enable DMA on synchronous serial port 0."
         depends on ETRAX_SYNCHRONOUS_SERIAL_PORT0
         help
           A synchronous serial port can run in manual or DMA mode.
           Selecting this option will make it run in DMA mode.

config ETRAX_SYNCHRONOUS_SERIAL_PORT1
         bool "Synchronous serial port 1 enabled"
         depends on ETRAX_SYNCHRONOUS_SERIAL && ETRAXFS
         help
           Enabled synchronous serial port 1.

config ETRAX_SYNCHRONOUS_SERIAL1_DMA
         bool "Enable DMA on synchronous serial port 1."
         depends on ETRAX_SYNCHRONOUS_SERIAL_PORT1
         help
           A synchronous serial port can run in manual or DMA mode.
           Selecting this option will make it run in DMA mode.

config ETRAX_AXISFLASHMAP
	bool "Axis flash-map support"
	depends on ETRAX_ARCH_V32
	select MTD
	select MTD_CFI
	select MTD_CFI_AMDSTD
	select MTD_JEDECPROBE
	select MTD_CHAR
	select MTD_BLOCK
	select MTD_PARTITIONS
	select MTD_CONCAT
	select MTD_COMPLEX_MAPPINGS
	help
	  This option enables MTD mapping of flash devices.  Needed to use
	  flash memories.  If unsure, say Y.

config ETRAX_AXISFLASHMAP_MTD0WHOLE
	bool "MTD0 is whole boot flash device"
	depends on ETRAX_AXISFLASHMAP
	default N
	help
	  When this option is not set, mtd0 refers to the first partition
	  on the boot flash device. When set, mtd0 refers to the whole
	  device, with mtd1 referring to the first partition etc.

config ETRAX_PTABLE_SECTOR
	int "Byte-offset of partition table sector"
	depends on ETRAX_AXISFLASHMAP
	default "65536"
	help
	  Byte-offset of the partition table in the first flash chip.
	  The default value is 64kB and should not be changed unless
	  you know exactly what you are doing. The only valid reason
	  for changing this is when the flash block size is bigger
	  than 64kB (e.g. when using two parallel 16 bit flashes).

config ETRAX_NANDFLASH
	bool "NAND flash support"
	depends on ETRAX_ARCH_V32
	select MTD_NAND
	select MTD_NAND_IDS
	help
	  This option enables MTD mapping of NAND flash devices.  Needed to use
	  NAND flash memories.  If unsure, say Y.

config ETRAX_NANDBOOT
	bool "Boot from NAND flash"
	depends on ETRAX_NANDFLASH
	help
	  This options enables booting from NAND flash devices.
	  Say Y if your boot code, kernel and root file system is in
	  NAND flash. Say N if they are in NOR flash.

config ETRAX_I2C
	bool "I2C driver"
	depends on ETRAX_ARCH_V32
	help
	  This option enables the I2C driver used by e.g. the RTC driver.

config ETRAX_V32_I2C_DATA_PORT
	string "I2C data pin"
	depends on ETRAX_I2C
	help
	  The pin to use for I2C data.

config ETRAX_V32_I2C_CLK_PORT
	string "I2C clock pin"
	depends on ETRAX_I2C
	help
	  The pin to use for I2C clock.

config ETRAX_GPIO
	bool "GPIO support"
	depends on ETRAX_ARCH_V32
	---help---
	  Enables the ETRAX general port device (major 120, minors 0-4).
	  You can use this driver to access the general port bits. It supports
	  these ioctl's:
	  #include <linux/etraxgpio.h>
	  fd = open("/dev/gpioa", O_RDWR); // or /dev/gpiob
	  ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS), bits_to_set);
	  ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, IO_CLRBITS), bits_to_clear);
	  err = ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, IO_READ_INBITS), &val);
	  Remember that you need to setup the port directions appropriately in
	  the General configuration.

config ETRAX_VIRTUAL_GPIO
	bool "Virtual GPIO support"
	depends on ETRAX_GPIO
	help
	  Enables the virtual Etrax general port device (major 120, minor 6).
	  It uses an I/O expander for the I2C-bus.

config ETRAX_VIRTUAL_GPIO_INTERRUPT_PA_PIN
	int "Virtual GPIO interrupt pin on PA pin"
	range 0 7
	depends on ETRAX_VIRTUAL_GPIO
	help
	  The pin to use on PA for virtual gpio interrupt.

config ETRAX_PA_CHANGEABLE_DIR
	hex "PA user changeable dir mask"
	depends on ETRAX_GPIO
	default "0x00" if ETRAXFS
	default "0x00000000" if !ETRAXFS
	help
	  This is a bitmask (8 bits) with information of what bits in PA that a
	  user can change direction on using ioctl's.
	  Bit set = changeable.
	  You probably want 0 here, but it depends on your hardware.

config ETRAX_PA_CHANGEABLE_BITS
	hex "PA user changeable bits mask"
	depends on ETRAX_GPIO
	default "0x00" if ETRAXFS
	default "0x00000000" if !ETRAXFS
	help
	  This is a bitmask (8 bits) with information of what bits in PA
	  that a user can change the value on using ioctl's.
	  Bit set = changeable.

config ETRAX_PB_CHANGEABLE_DIR
	hex "PB user changeable dir mask"
	depends on ETRAX_GPIO
	default "0x00000" if ETRAXFS
	default "0x00000000" if !ETRAXFS
	help
	  This is a bitmask (18 bits) with information of what bits in PB
	  that a user can change direction on using ioctl's.
	  Bit set = changeable.
	  You probably want 0 here, but it depends on your hardware.

config ETRAX_PB_CHANGEABLE_BITS
	hex "PB user changeable bits mask"
	depends on ETRAX_GPIO
	default "0x00000" if ETRAXFS
	default "0x00000000" if !ETRAXFS
	help
	  This is a bitmask (18 bits) with information of what bits in PB
	  that a user can change the value on using ioctl's.
	  Bit set = changeable.

config ETRAX_PC_CHANGEABLE_DIR
	hex "PC user changeable dir mask"
	depends on ETRAX_GPIO
	default "0x00000" if ETRAXFS
	default "0x00000000" if !ETRAXFS
	help
	  This is a bitmask (18 bits) with information of what bits in PC
	  that a user can change direction on using ioctl's.
	  Bit set = changeable.
	  You probably want 0 here, but it depends on your hardware.

config ETRAX_PC_CHANGEABLE_BITS
	hex "PC user changeable bits mask"
	depends on ETRAX_GPIO
	default "0x00000" if ETRAXFS
	default "0x00000000" if ETRAXFS
	help
	  This is a bitmask (18 bits) with information of what bits in PC
	  that a user can change the value on using ioctl's.
	  Bit set = changeable.

config ETRAX_PD_CHANGEABLE_DIR
	hex "PD user changeable dir mask"
	depends on ETRAX_GPIO && ETRAXFS
	default "0x00000"
	help
	  This is a bitmask (18 bits) with information of what bits in PD
	  that a user can change direction on using ioctl's.
	  Bit set = changeable.
	  You probably want 0x00000 here, but it depends on your hardware.

config ETRAX_PD_CHANGEABLE_BITS
	hex "PD user changeable bits mask"
	depends on ETRAX_GPIO && ETRAXFS
	default "0x00000"
	help
	  This is a bitmask (18 bits) with information of what bits in PD
	  that a user can change the value on using ioctl's.
	  Bit set = changeable.

config ETRAX_PE_CHANGEABLE_DIR
	hex "PE user changeable dir mask"
	depends on ETRAX_GPIO && ETRAXFS
	default "0x00000"
	help
	  This is a bitmask (18 bits) with information of what bits in PE
	  that a user can change direction on using ioctl's.
	  Bit set = changeable.
	  You probably want 0x00000 here, but it depends on your hardware.

config ETRAX_PE_CHANGEABLE_BITS
	hex "PE user changeable bits mask"
 	depends on ETRAX_GPIO && ETRAXFS
	default "0x00000"
	help
	  This is a bitmask (18 bits) with information of what bits in PE
	  that a user can change the value on using ioctl's.
	  Bit set = changeable.

config ETRAX_PV_CHANGEABLE_DIR
	hex "PV user changeable dir mask"
	depends on ETRAX_VIRTUAL_GPIO
	default "0x0000"
	help
	  This is a bitmask (16 bits) with information of what bits in PV
	  that a user can change direction on using ioctl's.
	  Bit set = changeable.
	  You probably want 0x0000 here, but it depends on your hardware.

config ETRAX_PV_CHANGEABLE_BITS
	hex "PV user changeable bits mask"
	depends on ETRAX_VIRTUAL_GPIO
	default "0x0000"
	help
	  This is a bitmask (16 bits) with information of what bits in PV
	  that a user can change the value on using ioctl's.
	  Bit set = changeable.

config ETRAX_CARDBUS
        bool "Cardbus support"
        depends on ETRAX_ARCH_V32
        select HOTPLUG
        help
	 Enabled the ETRAX Cardbus driver.

config PCI
       bool
       depends on ETRAX_CARDBUS
       default y
       select HAVE_GENERIC_DMA_COHERENT

config ETRAX_IOP_FW_LOAD
	tristate "IO-processor hotplug firmware loading support"
	depends on ETRAX_ARCH_V32
	select FW_LOADER
	help
	  Enables IO-processor hotplug firmware loading support.

config ETRAX_STREAMCOPROC
	tristate "Stream co-processor driver enabled"
	depends on ETRAX_ARCH_V32
	help
	  This option enables a driver for the stream co-processor
	  for cryptographic operations.

source drivers/mmc/Kconfig

config ETRAX_MMC_IOP
	tristate "MMC/SD host driver using IO-processor"
	depends on ETRAX_ARCH_V32 && MMC
	help
	  This option enables the SD/MMC host controller interface.
	  The host controller is implemented using the built in
	  IO-Processor. Only the SPU is used in this implementation.

config ETRAX_SPI_MMC
# Make this one of several "choices" (possible simultaneously but
# suggested uniquely) when an IOP driver emerges for "real" MMC/SD
# protocol support.
	tristate
	depends on !ETRAX_MMC_IOP
	default MMC
	select SPI
	select MMC_SPI
	select ETRAX_SPI_MMC_BOARD

# For the parts that can't be a module (due to restrictions in
# framework elsewhere).
config ETRAX_SPI_MMC_BOARD
       boolean
       default n

# While the board info is MMC_SPI only, the drivers are written to be
# independent of MMC_SPI, so we'll keep SPI non-dependent on the
# MMC_SPI config choices (well, except for a single depends-on-line
# for the board-info file until a separate non-MMC SPI board file
# emerges).
# FIXME: When that happens, we'll need to be able to ask for and
# configure non-MMC SPI ports together with MMC_SPI ports (if multiple
# SPI ports are enabled).

config SPI_ETRAX_SSER
	tristate
	depends on SPI_MASTER && ETRAX_ARCH_V32 && EXPERIMENTAL
	select SPI_BITBANG
	help
	  This enables using an synchronous serial (sser) port as a
	  SPI master controller on Axis ETRAX FS and later.  The
	  driver can be configured to use any sser port.

config SPI_ETRAX_GPIO
	tristate
	depends on SPI_MASTER && ETRAX_ARCH_V32 && EXPERIMENTAL
	select SPI_BITBANG
	help
	  This enables using GPIO pins port as a SPI master controller
	  on Axis ETRAX FS and later.  The driver can be configured to
	  use any GPIO pins.

config ETRAX_SPI_SSER0
	tristate "SPI using synchronous serial port 0 (sser0)"
	depends on ETRAX_SPI_MMC
	default m if MMC_SPI=m
	default y if MMC_SPI=y
	default y if MMC_SPI=n
	select SPI_ETRAX_SSER
	help
	  Say Y for an MMC/SD socket connected to synchronous serial port 0,
	  or for devices using the SPI protocol on that port.  Say m if you
	  want to build it as a module, which will be named spi_crisv32_sser.
	  (You need to select MMC separately.)

config ETRAX_SPI_SSER0_DMA
	bool "DMA for SPI on sser0 enabled"
	depends on ETRAX_SPI_SSER0
	depends on !ETRAX_SERIAL_PORT1_DMA4_OUT && !ETRAX_SERIAL_PORT1_DMA5_IN
	default y
	help
	  Say Y if using DMA (dma4/dma5) for SPI on synchronous serial port 0.

config ETRAX_SPI_MMC_CD_SSER0_PIN
	string "MMC/SD card detect pin for SPI on sser0"
	depends on ETRAX_SPI_SSER0 && MMC_SPI
	default "pd11"
	help
	  The pin to use for SD/MMC card detect.  This pin should be pulled up
	  and grounded when a card is present.  If defined as " " (space), no
	  pin is selected.  A card must then always be inserted for proper
	  action.

config ETRAX_SPI_MMC_WP_SSER0_PIN
	string "MMC/SD card write-protect pin for SPI on sser0"
	depends on ETRAX_SPI_SSER0 && MMC_SPI
	default "pd10"
	help
	  The pin to use for the SD/MMC write-protect signal for a memory
	  card.  If defined as " " (space), the card is considered writable.

config ETRAX_SPI_SSER1
	tristate "SPI using synchronous serial port 1 (sser1)"
	depends on ETRAX_SPI_MMC
	default m if MMC_SPI=m && ETRAX_SPI_SSER0=n
	default y if MMC_SPI=y && ETRAX_SPI_SSER0=n
	default y if MMC_SPI=n && ETRAX_SPI_SSER0=n
	select SPI_ETRAX_SSER
	help
	  Say Y for an MMC/SD socket connected to synchronous serial port 1,
	  or for devices using the SPI protocol on that port.  Say m if you
	  want to build it as a module, which will be named spi_crisv32_sser.
	  (You need to select MMC separately.)

config ETRAX_SPI_SSER1_DMA
	bool "DMA for SPI on sser1 enabled"
	depends on ETRAX_SPI_SSER1 && !ETRAX_ETHERNET_IFACE1
	depends on !ETRAX_SERIAL_PORT0_DMA6_OUT && !ETRAX_SERIAL_PORT0_DMA7_IN
	default y
	help
	  Say Y if using DMA (dma6/dma7) for SPI on synchronous serial port 1.

config ETRAX_SPI_MMC_CD_SSER1_PIN
	string "MMC/SD card detect pin for SPI on sser1"
	depends on ETRAX_SPI_SSER1 && MMC_SPI
	default "pd12"
	help
	  The pin to use for SD/MMC card detect.  This pin should be pulled up
	  and grounded when a card is present.  If defined as " " (space), no
	  pin is selected.  A card must then always be inserted for proper
	  action.

config ETRAX_SPI_MMC_WP_SSER1_PIN
	string "MMC/SD card write-protect pin for SPI on sser1"
	depends on ETRAX_SPI_SSER1 && MMC_SPI
	default "pd9"
	help
	  The pin to use for the SD/MMC write-protect signal for a memory
	  card.  If defined as " " (space), the card is considered writable.

config ETRAX_SPI_GPIO
	tristate "Bitbanged SPI using gpio pins"
	depends on ETRAX_SPI_MMC
	select SPI_ETRAX_GPIO
	default m if MMC_SPI=m && ETRAX_SPI_SSER0=n && ETRAX_SPI_SSER1=n
	default y if MMC_SPI=y && ETRAX_SPI_SSER0=n && ETRAX_SPI_SSER1=n
	default y if MMC_SPI=n && ETRAX_SPI_SSER0=n && ETRAX_SPI_SSER1=n
	help
	  Say Y for an MMC/SD socket connected to general I/O pins (but not
	  a complete synchronous serial ports), or for devices using the SPI
	  protocol on general I/O pins.  Slow and slows down the system.
	  Say m to build it as a module, which will be called spi_crisv32_gpio.
	  (You need to select MMC separately.)

# The default match that of sser0, only because that's how it was tested.
config ETRAX_SPI_CS_PIN
	string "SPI chip select pin"
	depends on ETRAX_SPI_GPIO
	default "pc3"
	help
	  The pin to use for SPI chip select.

config ETRAX_SPI_CLK_PIN
	string "SPI clock pin"
	depends on ETRAX_SPI_GPIO
	default "pc1"
	help
	  The pin to use for the SPI clock.

config ETRAX_SPI_DATAIN_PIN
	string "SPI MISO (data in) pin"
	depends on ETRAX_SPI_GPIO
	default "pc16"
	help
	  The pin to use for SPI data in from the device.

config ETRAX_SPI_DATAOUT_PIN
	string "SPI MOSI (data out) pin"
	depends on ETRAX_SPI_GPIO
	default "pc0"
	help
	  The pin to use for SPI data out to the device.

config ETRAX_SPI_MMC_CD_GPIO_PIN
	string "MMC/SD card detect pin for SPI using gpio (space for none)"
	depends on ETRAX_SPI_GPIO && MMC_SPI
	default "pd11"
	help
	  The pin to use for SD/MMC card detect.  This pin should be pulled up
	  and grounded when a card is present.  If defined as " " (space), no
	  pin is selected.  A card must then always be inserted for proper
	  action.

config ETRAX_SPI_MMC_WP_GPIO_PIN
	string "MMC/SD card write-protect pin for SPI using gpio (space for none)"
	depends on ETRAX_SPI_GPIO && MMC_SPI
	default "pd10"
	help
	  The pin to use for the SD/MMC write-protect signal for a memory
	  card.  If defined as " " (space), the card is considered writable.

# Avoid choices causing non-working configs by conditionalizing the inclusion.
if ETRAX_SPI_MMC
source drivers/spi/Kconfig
endif

endif
