# STK1000 customization

if BOARD_ATSTK1000

choice
	prompt "ATSTK1000 CPU daughterboard type"
	default BOARD_ATSTK1002

config BOARD_ATSTK1002
	bool "ATSTK1002"
	select CPU_AT32AP7000

config BOARD_ATSTK1003
	bool "ATSTK1003"
	select CPU_AT32AP7001

config BOARD_ATSTK1004
	bool "ATSTK1004"
	select CPU_AT32AP7002

config BOARD_ATSTK1006
	bool "ATSTK1006"
	select CPU_AT32AP7000

endchoice


config BOARD_ATSTK100X_CUSTOM
	bool "Non-default STK1002/STK1003/STK1004 jumper settings"
	help
	  You will normally leave the jumpers on the CPU card at their
	  default settings.  If you need to use certain peripherals,
	  you will need to change some of those jumpers.

if BOARD_ATSTK100X_CUSTOM

config BOARD_ATSTK100X_SW1_CUSTOM
	bool "SW1: use SSC1 (not SPI0)"
	help
	  This also prevents using the external DAC as an audio interface,
	  and means you can't initialize the on-board QVGA display.

config BOARD_ATSTK100X_SW2_CUSTOM
	bool "SW2: use IRDA or TIMER0 (not UART-A, MMC/SD, and PS2-A)"
	help
	  If you change this you'll want an updated boot loader putting
	  the console on UART-C not UART-A.

config BOARD_ATSTK100X_SW3_CUSTOM
	bool "SW3: use TIMER1 (not SSC0 and GCLK)"
	help
	  This also prevents using the external DAC as an audio interface.

config BOARD_ATSTK100X_SW4_CUSTOM
	bool "SW4: use ISI/Camera (not GPIOs, SPI1, and PS2-B)"
	help
	  To use the camera interface you'll need a custom card (on the
	  PCI-format connector) connect a video sensor.

config BOARD_ATSTK1002_SW5_CUSTOM
	bool "SW5: use MACB1 (not LCDC)"
	depends on BOARD_ATSTK1002

config BOARD_ATSTK1002_SW6_CUSTOM
	bool "SW6: more GPIOs (not MACB0)"
	depends on BOARD_ATSTK1002

endif	# custom

config BOARD_ATSTK100X_SPI1
	bool "Configure SPI1 controller"
	depends on !BOARD_ATSTK100X_SW4_CUSTOM
	help
	  All the signals for the second SPI controller are available on
	  GPIO lines and accessed through the J1 jumper block.  Say "y"
	  here to configure that SPI controller.

config BOARD_ATSTK1000_J2_LED
	bool
	default BOARD_ATSTK1000_J2_LED8 || BOARD_ATSTK1000_J2_RGB

choice
	prompt "LEDs connected to J2:"
	depends on LEDS_GPIO && !BOARD_ATSTK100X_SW4_CUSTOM
	optional
	help
	  Select this if you have jumpered the J2 jumper block to the
	  LED0..LED7 amber leds, or to the RGB leds, using a ten-pin
	  IDC cable.  A default "heartbeat" trigger is provided, but
	  you can of course override this.

config BOARD_ATSTK1000_J2_LED8
	bool "LED0..LED7"
	help
	  Select this if J2 is jumpered to LED0..LED7 amber leds.

config BOARD_ATSTK1000_J2_RGB
	bool "RGB leds"
	help
	  Select this if J2 is jumpered to the RGB leds.

endchoice

config BOARD_ATSTK1000_EXTDAC
	bool
	depends on !BOARD_ATSTK100X_SW1_CUSTOM && !BOARD_ATSTK100X_SW3_CUSTOM
	default y

endif	# stk 1000
