#
# TI device configuration
#

config NET_VENDOR_TI
	bool "Texas Instruments (TI) devices"
	default y
	depends on PCI || EISA || AR7 || (ARM && (ARCH_DAVINCI || ARCH_OMAP3 || SOC_AM33XX || ARCH_KEYSTONE))
	---help---
	  If you have a network (Ethernet) card belonging to this class, say Y
	  and read the Ethernet-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  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 )
	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 ARM && ( ARCH_DAVINCI || ARCH_OMAP3 || SOC_AM33XX || ARCH_KEYSTONE )
	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 ARM && ( ARCH_DAVINCI || ARCH_OMAP3 || SOC_AM33XX )
	---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
	boolean "TI CPSW Switch Phy sel Support"
	depends on TI_CPSW
	---help---
	  This driver supports configuring of the phy mode connected to
	  the CPSW.

config TI_CPSW
	tristate "TI CPSW Switch Support"
	depends on ARM && (ARCH_DAVINCI || SOC_AM33XX)
	select TI_DAVINCI_CPDMA
	select TI_DAVINCI_MDIO
	select TI_CPSW_PHY_SEL
	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
	boolean "TI Common Platform Time Sync (CPTS) Support"
	depends on TI_CPSW
	select PTP_1588_CLOCK
	---help---
	  This driver supports the Common Platform Time Sync unit of
	  the CPSW Ethernet Switch. The unit can time stamp PTP UDP/IPv4
	  and Layer 2 packets, and the driver offers a PTP Hardware Clock.

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 and read the
	  Ethernet-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  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
