#
# TI device configuration
#

config NET_VENDOR_TI
	bool "Texas Instruments (TI) devices"
	default y
	depends on PCI || EISA || AR7 || ARCH_DAVINCI || ARCH_OMAP2PLUS || ARCH_KEYSTONE
	---help---
	  If you have a network (Ethernet) card belonging to this class, say Y.

	  Note that the answer to this question doesn't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about TI devices. If you say Y, you will be asked for
	  your specific card in the following questions.

if NET_VENDOR_TI

config TI_DAVINCI_EMAC
	tristate "TI DaVinci EMAC Support"
	depends on ARM && ( ARCH_DAVINCI || ARCH_OMAP3 ) || COMPILE_TEST
	select TI_DAVINCI_MDIO
	select TI_DAVINCI_CPDMA
	select PHYLIB
	---help---
	  This driver supports TI's DaVinci Ethernet .

	  To compile this driver as a module, choose M here: the module
	  will be called davinci_emac_driver.  This is recommended.

config TI_DAVINCI_MDIO
	tristate "TI DaVinci MDIO Support"
	depends on ARCH_DAVINCI || ARCH_OMAP2PLUS || ARCH_KEYSTONE || COMPILE_TEST
	select PHYLIB
	---help---
	  This driver supports TI's DaVinci MDIO module.

	  To compile this driver as a module, choose M here: the module
	  will be called davinci_mdio.  This is recommended.

config TI_DAVINCI_CPDMA
	tristate "TI DaVinci CPDMA Support"
	depends on ARCH_DAVINCI || ARCH_OMAP2PLUS || COMPILE_TEST
	---help---
	  This driver supports TI's DaVinci CPDMA dma engine.

	  To compile this driver as a module, choose M here: the module
	  will be called davinci_cpdma.  This is recommended.

config TI_CPSW_PHY_SEL
	bool
	---help---
	  This driver supports configuring of the phy mode connected to
	  the CPSW.

config TI_CPSW_ALE
	tristate "TI CPSW ALE Support"
	---help---
	  This driver supports TI's CPSW ALE module.

config TI_CPSW
	tristate "TI CPSW Switch Support"
	depends on ARCH_DAVINCI || ARCH_OMAP2PLUS || COMPILE_TEST
	select TI_DAVINCI_CPDMA
	select TI_DAVINCI_MDIO
	select TI_CPSW_PHY_SEL
	select TI_CPSW_ALE
	select MFD_SYSCON
	select REGMAP
	---help---
	  This driver supports TI's CPSW Ethernet Switch.

	  To compile this driver as a module, choose M here: the module
	  will be called cpsw.

config TI_CPTS
	bool "TI Common Platform Time Sync (CPTS) Support"
	depends on TI_CPSW || TI_KEYSTONE_NETCP || COMPILE_TEST
	depends on POSIX_TIMERS
	---help---
	  This driver supports the Common Platform Time Sync unit of
	  the CPSW Ethernet Switch and Keystone 2 1g/10g Switch Subsystem.
	  The unit can time stamp PTP UDP/IPv4 and Layer 2 packets, and the
	  driver offers a PTP Hardware Clock.

config TI_CPTS_MOD
	tristate
	depends on TI_CPTS
	default y if TI_CPSW=y || TI_KEYSTONE_NETCP=y
	select NET_PTP_CLASSIFY
	imply PTP_1588_CLOCK
	default m

config TI_KEYSTONE_NETCP
	tristate "TI Keystone NETCP Core Support"
	select TI_CPSW_ALE
	select TI_DAVINCI_MDIO
	depends on OF
	depends on KEYSTONE_NAVIGATOR_DMA && KEYSTONE_NAVIGATOR_QMSS
	---help---
	  This driver supports TI's Keystone NETCP Core.

	  To compile this driver as a module, choose M here: the module
	  will be called keystone_netcp.

config TI_KEYSTONE_NETCP_ETHSS
	depends on TI_KEYSTONE_NETCP
	tristate "TI Keystone NETCP Ethernet subsystem Support"
	---help---

	  To compile this driver as a module, choose M here: the module
	  will be called keystone_netcp_ethss.

config TLAN
	tristate "TI ThunderLAN support"
	depends on (PCI || EISA)
	---help---
	  If you have a PCI Ethernet network card based on the ThunderLAN chip
	  which is supported by this driver, say Y here.

	  Devices currently supported by this driver are Compaq Netelligent,
	  Compaq NetFlex and Olicom cards.  Please read the file
	  <file:Documentation/networking/tlan.txt> for more details.

	  To compile this driver as a module, choose M here. The module
	  will be called tlan.

	  Please email feedback to <torben.mathiasen@compaq.com>.

config CPMAC
	tristate "TI AR7 CPMAC Ethernet support"
	depends on AR7
	select PHYLIB
	---help---
	  TI AR7 CPMAC Ethernet support

endif # NET_VENDOR_TI
