# List the minimum kernel version required for each
# of the listed Kconfig symbols

# platform_get_device_id()
ATH9K_AHB 2.6.30
BT 2.6.27
BT_RFCOMM_TTY 2.6.33
BT_HIDP 2.6.28
BT_WILINK 2.6.39

MAC80211_HWSIM 2.6.31

ATH6KL 2.6.27

WIL6210 2.6.31

ATL1C 3.5
ATL1E 2.6.26
ALX 2.6.31

LIBERTAS 2.6.27
LIBERTAS_THINFIRM 2.6.27
LIBERTAS_SDIO 2.6.32

ZD1211RW 2.6.29

USB_NET_RNDIS_WLAN 2.6.29

CARL9170 2.6.29

WL1251_SPI 2.6.37
WLCORE_SPI 2.6.25
P54_SPI 2.6.25

WL1251_SDIO 2.6.37
WLCORE_SDIO 2.6.38

BRCMFMAC 2.6.29

WL_TI 2.6.30
WLCORE 2.6.30
# requires irq_modify_status() which was only exported in 3.0
WL1251 3.0

MWIFIEX 2.6.27

# DRM stuff
HDMI 3.2
DRM 3.2
DRM_TTM 3.2
# See e2bdb933, this was added on v3.3, in order to
# support DRM_QXL on 3.2 you'd have to backport 78c1d7848
# to 3.2 on BACKPORT_BUILD_RADIX_HELPERS and that requires
# taking into consideration the radix_tree_node rcu change
# on e2bdb933.
DRM_QXL 3.3

# Regulator
# Because of -EPROBE_DEFER see commit d1c3414c and note that
# we can't backport the core regulator as its part of the core
# vmlinux.
REGULATOR 3.4
# requires some work
REGULATOR_ARIZONA DISABLE
REGULATOR_MAX8973 DISABLE
REGULATOR_MAX77686 DISABLE
REGULATOR_MAX8997 DISABLE
REGULATOR_RC5T583 DISABLE
REGULATOR_TPS62360 DISABLE
REGULATOR_TPS65910 DISABLE
REGULATOR_TPS65090 DISABLE
REGULATOR_TPS65217 DISABLE
REGULATOR_TPS6586X DISABLE
REGULATOR_WM831X DISABLE
REGULATOR_WM8350 DISABLE
REGULATOR_PALMAS DISABLE
REGULATOR_DA9055 DISABLE
REGULATOR_S5M8767 DISABLE
# These have further core regulator kernel dependencies
# we can't easily backport.
REGULATOR_AAT2870 3.6
REGULATOR_DA903X 3.5
REGULATOR_DA9052 3.5
REGULATOR_FAN53555 3.5
REGULATOR_ISL6271A 3.5
REGULATOR_LP3971 3.6
REGULATOR_LP3972 3.6
REGULATOR_LP8755 3.5
REGULATOR_MAX1586 3.6
REGULATOR_MAX8649 3.5
REGULATOR_MAX8660 3.5
REGULATOR_MAX8925 3.5
REGULATOR_MAX8998 3.5
REGULATOR_MC13783 3.6
REGULATOR_MC13892 3.6
REGULATOR_MC13XXX_CORE 3.6
REGULATOR_PCAP 3.6
REGULATOR_PCF50633 3.5
REGULATOR_TPS51632 3.6
REGULATOR_TPS6105X 3.6
REGULATOR_TPS65023 3.6
REGULATOR_TPS6507X 3.6
REGULATOR_TPS6524X 3.6
REGULATOR_WM8400 3.5
REGULATOR_WM8994 3.8

# Media
MEDIA_SUPPORT 3.2
# There's something wrong with backporting this/dma-buf to 3.2,
# so disable it for now until Luis figures it out
MEDIA_SUPPORT 3.3
# Some media drivers however depend on module deferral mechanism
# Lets not enable those unless that's available.
VIDEO_S3C_CAMIF 3.4
VIDEO_SAMSUNG_S5P_FIMC 3.4
IR_GPIO_CIR 3.4
# Some media drivers depend on the CONFIG_REGULATOR which
# we only support on >= 3.4 give that reguatory itself depends
# on -EPROBE_DEFER.
SOC_CAMERA 3.4
SOC_CAMERA_IMX074 3.4
SOC_CAMERA_MT9M001 3.4
SOC_CAMERA_MT9M111 3.4
SOC_CAMERA_MT9T031 3.4
SOC_CAMERA_MT9T112 3.4
SOC_CAMERA_MT9V022 3.4
SOC_CAMERA_OV2640 3.4
SOC_CAMERA_OV5642 3.4
SOC_CAMERA_OV6650 3.4
SOC_CAMERA_OV772X 3.4
SOC_CAMERA_OV9640 3.4
SOC_CAMERA_OV9740 3.4
SOC_CAMERA_RJ54N1 3.4
SOC_CAMERA_TW9910 3.4
# There are some odd comile errors here I don't want
# to bother with right now
VIDEO_MEM2MEM_DEINTERLACE DISABLE
# 49920bc6 and 1003cab8 and while it seems there is a
# one to one map DMA_FROM_DEVICE to DMA_DEV_TO_MEM
# I can't verify this fully yet.
VIDEO_TIMBERDALE 3.4
# Can't figure this out yet either
DVB_DDBRIDGE DISABLE
# These require I2C_CLIENT_SCCB which can't be backported
# since the core I2C code has to know about it
VIDEO_OV7640 3.6
VIDEO_EM28XX 3.6
# I give up on these guys for now
RADIO_MAXIRADIO DISABLE
RADIO_SHARK DISABLE
VIDEO_IVTV DISABLE
VIDEO_MEYE DISABLE
DVB_NGENE DISABLE
DVB_USB_PCTV452E DISABLE
USB_GSPCA DISABLE
VIDEO_MXB DISABLE

# This requires proc_create(), and that doesn't exist before 2.6.24
LIBIPW_DEBUG 2.6.25

# blink_set is used unconditionally and we don't carry a patch, so
# this option must depend on 2.6.25 which got blink_set()
RT2X00_LIB_LEDS 2.6.25

# struct gpio_chip only got the required members in 2.6.28
BCMA_DRIVER_GPIO 2.6.28
SSB_DRIVER_GPIO 2.6.28

# shash was only added in 2.6.29
BT 2.6.29

# GPIOF_OUT_INIT_HIGH definitions were only moved
# out of #ifdef in kernel 3.0. These are required
# by some users of BCMA_DRIVER_GPIO. We'd better
# just backport the definitions, but right now
# this is easier.
BCMA_DRIVER_GPIO 3.0

BCMA_DRIVER_MIPS 3.3
SSB_DRIVER_MIPS 3.3

# rfkill-regulator uses a kernel header file
# (rfkill-regulator.h) that we don't backport
# right now, so make it depend on 3.0
RFKILL_REGULATOR 3.0
# drivers/regulator/ab3100.c and drivers/mfd/ab3100-core.c
# both depend on include/linux/mfd/ab3100.h and we should
# only backport REGULATOR_AB3100 if the mfd driver is
# backported as well.
REGULATOR_AB3100 3.9

# This is a fun one ... the implementation of this
# uses subdir-ccflags-$(CONFIG_BRCMDBG) which was
# only introduced in kernel 2.6.30.
BRCMDBG 2.6.30

# HID_QUIRK_NO_INIT_REPORTS was only introduced in
# kernel 2.6.33, so depend on that. We could instead
# backport it, but I can't test that and this is a
# lot easier right now.
BT_HIDP 2.6.33

# NFC core needs PF_NFC defined in socket.h which was
# only introduced in kernel 3.1
NFC 3.1

INTEL_IPS 3.2

NFC_MEI_PHY 3.10
