if ETRAX_ARCH_V32

config ETRAX_ETHERNET
	bool "Ethernet support"
	depends on ETRAX_ARCH_V32
	select ETHERNET
	select NET_CORE
	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_BLOCK
	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
	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
	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
