# Abilis Systems TB10x platform kernel configuration file
#
# Author: Christian Ruppert <christian.ruppert@abilis.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA


menuconfig ARC_PLAT_TB10X
	bool "Abilis TB10x"
	select PINCTRL
	select PINCTRL_TB10X
	select PINMUX
	select ARCH_REQUIRE_GPIOLIB
	select GPIO_TB10X
	select TB10X_IRQC
	help
	  Support for platforms based on the TB10x home media gateway SOC by
	  Abilis Systems. TB10x is based on the ARC700 CPU architecture.
	  Say Y if you are building a kernel for one of the SOCs in this
	  series (e.g. TB100 or TB101). If in doubt say N.
