#
# backport Kconfig
#
# Some options are user-selectable ("BACKPORT_USERSEL_*")
#
# Most options, however, follow a few different schemes:
#
# A) An option that is selected by drivers ("select FOO") will be
#    changed to "select BACKPORT_FOO" (if the option BACKPORT_FOO
#    exists). The option BACKPORT_FOO then controls setting of the
#    BACKPORT_BUILD_FOO option, which is a module, like this:
#
# config BACKPORT_BUILD_FOO
#	tristate
#	# or bool
#
#	# not possible on kernel < X.Y, build will fail if any
#	# drivers are allowed to build on kernels < X.Y
#	depends on BACKPORT_KERNEL_X_Y
#
#	# don't build the backport code if FOO is in the kernel
#	# already, but only if the kernel version is also >= X.Z;
#	# this is an example of backporting where the version of
#	# the FOO subsystem that we need is only available from
#	# kernel version X.Z
#	depends on !FOO || BACKPORT_KERNEL_X_Z
#
#	# build if driver needs it (it selects BACKPORT_FOO)
#	default m if BACKPORT_FOO
#
#	# or for build-testing (BACKPORT_USERSEL_BUILD_ALL is enabled)
#	default m if BACKPORT_USERSEL_BUILD_ALL
#
# config BACKPORT_FOO
#	bool
#
# This only works as-is if the kernel code is usable on any version,
# otherwise the "&& !FOO" part needs to be different.
#
#
# B) An option for code always present on some kernels (e.g. KFIFO).
#    This simply depends on/sets the default based on the version:
#
# config BACKPORT_BUILD_KFIFO
#	def_bool y
#	depends on BACKPORT_KERNEL_2_6_36
#
#
# C) similarly, a kconfig symbol for an option, e.g.
#    BACKPORT_OPTION_SOME_FIX (no examples provided) check git log
#
#
# Variations are obviously possible.
#

config BACKPORT_BUILD_CORDIC
	tristate
	depends on m
	depends on !CORDIC
	default m if BACKPORT_CORDIC
	default m if BACKPORT_USERSEL_BUILD_ALL
	#module-name cordic
	#c-file lib/cordic.c

config BACKPORT_CORDIC
	bool

config BACKPORT_BUILD_AVERAGE
	bool
	depends on !AVERAGE
	default y if BACKPORT_USERSEL_BUILD_ALL
	default y if BACKPORT_AVERAGE
	#h-file linux/average.h
	#c-file lib/average.c

config BACKPORT_AVERAGE
	bool

config BACKPORT_MII
	bool

config BACKPORT_BUILD_DMA_SHARED_BUFFER
	bool
	depends on ANON_INODES
	depends on !BACKPORT_KERNEL_3_0
	depends on !DMA_SHARED_BUFFER || BACKPORT_KERNEL_3_5
	default y if BACKPORT_DMA_SHARED_BUFFER
	default y if BACKPORT_USERSEL_BUILD_ALL
	#h-file linux/dma-buf.h
	#c-file drivers/base/dma-buf.c

config BACKPORT_DMA_SHARED_BUFFER
	bool

config BACKPORT_BUILD_DMA_SHARED_HELPERS
	bool
	depends on HAS_DMA
	# Build on other kernels kernels < 3.9 if HAVE_GENERIC_DMA_COHERENT is
	# not set. Kernels >= 3.8 have this if HAS_DMA is set.
	depends on (!HAVE_GENERIC_DMA_COHERENT || BACKPORT_KERNEL_3_9)
	# Always build if on 3.3 - 3.5
	default y if (BACKPORT_KERNEL_3_4 || BACKPORT_KERNEL_3_5 || BACKPORT_KERNEL_3_6)
	# build for testing
	default y if BACKPORT_USERSEL_BUILD_ALL

config BACKPORT_BUILD_LEDS
	bool
	depends on !NEW_LEDS || LEDS_CLASS=n || !LEDS_TRIGGERS
	default y if BACKPORT_NEW_LEDS
	default y if BACKPORT_LEDS_CLASS
	default y if BACKPORT_LEDS_TRIGGERS

config BACKPORT_NEW_LEDS
	bool

config BACKPORT_LEDS_CLASS
	bool

config BACKPORT_LEDS_TRIGGERS
	bool

config BACKPORT_USERSEL_BUILD_ALL
	bool "Build all compat code"
	help
	  This option selects all the compat code options
	  that would otherwise only be selected by drivers.

	  It's only really useful for compat testing, so
	  you probably shouldn't enable it.

config BACKPORT_CRYPTO_CCM
	bool

config BACKPORT_BUILD_CRYPTO_CCM
	bool
	default n if CRYPTO_CCM
	default y if BACKPORT_CRYPTO_CCM
	#c-file crypto/ccm.c
