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_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
