# 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
ATH10K 2.6.30

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

WL1251_SDIO 2.6.37
WLCORE_SDIO 2.6.38

CW1200_WLAN_SDIO 2.6.32
CW1200_WLAN_SPI 2.6.35

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
# As of 3.11 DRM depends on the new ww_mutex which is
# backported via BACKPORT_BUILD_WW_MUTEX. This backported
# feature however has does not yet have support for
# DEBUG_MUTEXES and DEBUG_LOCK_ALLOC.
DRM kconfig: !BACKPORT_KERNEL_3_11 || !DEBUG_MUTEXES
DRM kconfig: !BACKPORT_KERNEL_3_11 || !DEBUG_LOCK_ALLOC
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_88PM800 3.12
REGULATOR_AAT2870 3.6
REGULATOR_AD5398 3.5
REGULATOR_ARIZONA 3.8
REGULATOR_AS3711 3.12
REGULATOR_DA903X 3.12
REGULATOR_DA9052 3.9
REGULATOR_DA9055 3.8
REGULATOR_FAN53555 3.5
REGULATOR_FIXED_VOLTAGE 3.6
REGULATOR_GPIO 3.6
REGULATOR_ISL6271A 3.5
REGULATOR_LP3971 3.6
REGULATOR_LP3972 3.6
REGULATOR_LP8755 3.6
REGULATOR_MAX1586 3.6
REGULATOR_MAX77686 3.7
REGULATOR_MAX77693 3.11
REGULATOR_MAX8649 3.10
REGULATOR_MAX8660 3.5
REGULATOR_MAX8925 3.5
REGULATOR_MAX8952 3.6
REGULATOR_MAX8973 3.6
REGULATOR_MAX8997 3.8
REGULATOR_MAX8998 3.11
REGULATOR_MC13783 3.6
REGULATOR_MC13892 3.6
REGULATOR_MC13XXX_CORE 3.6
REGULATOR_PALMAS 3.11
REGULATOR_PCAP 3.6
REGULATOR_PCF50633 3.8
REGULATOR_PFUZE100 3.6
REGULATOR_RC5T583 3.6
REGULATOR_S2MPS11 3.12
REGULATOR_S5M8767 3.9
REGULATOR_TPS51632 3.8
REGULATOR_TPS6105X 3.6
REGULATOR_TPS62360 3.6
REGULATOR_TPS62360 3.6
REGULATOR_TPS65023 3.9
REGULATOR_TPS6507X 3.6
REGULATOR_TPS65090 3.9
REGULATOR_TPS65217 3.6
REGULATOR_TPS6524X 3.6
REGULATOR_TPS6586X 3.9
REGULATOR_TPS65910 3.6
REGULATOR_TPS65912 3.12
REGULATOR_WM831X 3.12
REGULATOR_WM8350 3.12
REGULATOR_WM8400 3.12
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
# someone has to backport "firewire: introduce fw_driver.probe and .remove methods"
DVB_FIREDTV 3.11
# 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

# 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

IEEE802154_MRF24J40 3.5
IEEE802154 2.6.38
