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

ATL1C 3.5

# depends on -EPROBE_DEFER and others now
WL1251_SPI 3.5

WL1251_SDIO 3.15
WLCORE_SDIO 3.15

# 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_88PM8607 3.10
REGULATOR_AAT2870 3.6
REGULATOR_ACT8865 3.12
REGULATOR_AD5398 3.5
REGULATOR_ARIZONA 3.12
REGULATOR_AS3711 3.12
REGULATOR_DA903X 3.12
REGULATOR_DA9052 3.9
REGULATOR_DA9055 3.8
REGULATOR_DA9210 3.5
REGULATOR_FAN53555 3.5
REGULATOR_FIXED_VOLTAGE 3.13
REGULATOR_GPIO 3.6
REGULATOR_ISL6271A 3.5
REGULATOR_LP3971 3.6
REGULATOR_LP3972 3.6
REGULATOR_LP872X 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.12
REGULATOR_PCAP 3.6
REGULATOR_PCF50633 3.8
REGULATOR_PFUZE100 3.6
REGULATOR_RC5T583 3.6

# These depend on include/linux/mfd/samsung/s2mps14.h which
# other mfd drivers / platform code can depend on, skip
# unless we backport all the dependencies which we don't
# right now.
REGULATOR_S2MPS11 3.15
REGULATOR_S2MPA01 3.15

REGULATOR_S5M8767 3.15
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
# depnds on include/linux/mfd/samsung/s2mps14.h which
# other mfd drivers / platform code can depend on, skip
REGULATOR_TPS65217 3.15
REGULATOR_TPS6524X 3.6
REGULATOR_TPS6586X 3.14
REGULATOR_TPS65910 3.14
REGULATOR_TPS65912 3.12
REGULATOR_TWL4030 3.11
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
VIDEO_RENESAS_VSP1 3.6

# Drivers that depend on I2C bus segments behind multiplexers to
# have a clas, see eee543e8. This requires quite a bit of collateral,
# folks involved in this and who want it can backport if it they wish.
# This was added as of 3.7. Although we should be able to only enable
# this for 3.7 DVB_USB_RTL28XXU ends up selecting DVB_RTL2832 and
# that seems to currently require pegging both.
#
# DVB_USB_RTL28XXU has a nasty ccflag usage thoug that includes staging
# headers introduced via commit bcf43393:
# ccflags-y += -I$(srctree)/drivers/staging/media/rtl2832u_sdr
# Let's not support this nastiness.
DVB_RTL2832 DISABLE
DVB_USB_RTL28XXU DISABLE

BCMA_DRIVER_MIPS 3.3
SSB_DRIVER_MIPS 3.3

# the irq handler in the gpio driver uses 
# irq_set_chip_and_handler_name() which gets exported starting with 
# kernel 3.7. This code is only compiled if BCMA_DRIVER_GPIO and
# BCMA_HOST_SOC are set.
BCMA_HOST_SOC 3.7

# 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

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

# requires devm_gpio_request_one() added but since
# gpio infrastructure has been strongly shuffled around
# we require drivers to use the in-kernel gptio infrastructure
NFC_TRF7970A 3.5

INTEL_IPS 3.2

NFC_MEI_PHY 3.10

IEEE802154_MRF24J40 3.5
IEEE802154 3.1
IEEE802154_6LOWPAN 3.5
IEEE802154_AT86RF230 3.3

IR_IMG 3.5
