config ARCH_MULTIPLATFORM
        bool "Allow multiple platforms to be selected"
        depends on MMU
-       select ARCH_WANT_OPTIONAL_GPIOLIB
        select ARM_HAS_SG_CHAIN
        select ARM_PATCH_PHYS_VIRT
        select AUTO_ZRELADDR
 config ARM_SINGLE_ARMV7M
        bool "ARMv7-M based platforms (Cortex-M0/M3/M4)"
        depends on !MMU
-       select ARCH_WANT_OPTIONAL_GPIOLIB
        select ARM_NVIC
        select AUTO_ZRELADDR
        select CLKSRC_OF
 
 config ARCH_CLPS711X
        bool "Cirrus Logic CLPS711x/EP721x/EP731x-based"
-       select ARCH_REQUIRE_GPIOLIB
        select AUTO_ZRELADDR
        select CLKSRC_MMIO
        select COMMON_CLK
        select CPU_ARM720T
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        select MFD_SYSCON
        select SOC_BUS
        help
 
 config ARCH_GEMINI
        bool "Cortina Systems Gemini"
-       select ARCH_REQUIRE_GPIOLIB
        select CLKSRC_MMIO
        select CPU_FA526
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        help
          Support for the Cortina Systems Gemini family SoCs
 
 config ARCH_EP93XX
        bool "EP93xx-based"
        select ARCH_HAS_HOLES_MEMORYMODEL
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select ARM_PATCH_PHYS_VIRT
        select ARM_VIC
        select CLKSRC_MMIO
        select CPU_ARM920T
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        help
          This enables support for the Cirrus EP93xx series of CPUs.
 
 config ARCH_IOP32X
        bool "IOP32x-based"
        depends on MMU
-       select ARCH_REQUIRE_GPIOLIB
        select CPU_XSCALE
        select GPIO_IOP
+       select GPIOLIB
        select NEED_RET_TO_USER
        select PCI
        select PLAT_IOP
 config ARCH_IOP33X
        bool "IOP33x-based"
        depends on MMU
-       select ARCH_REQUIRE_GPIOLIB
        select CPU_XSCALE
        select GPIO_IOP
+       select GPIOLIB
        select NEED_RET_TO_USER
        select PCI
        select PLAT_IOP
        bool "IXP4xx-based"
        depends on MMU
        select ARCH_HAS_DMA_SET_COHERENT_MASK
-       select ARCH_REQUIRE_GPIOLIB
        select ARCH_SUPPORTS_BIG_ENDIAN
        select CLKSRC_MMIO
        select CPU_XSCALE
        select DMABOUNCE if PCI
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        select MIGHT_HAVE_PCI
        select NEED_MACH_IO_H
        select USB_EHCI_BIG_ENDIAN_DESC
 
 config ARCH_DOVE
        bool "Marvell Dove"
-       select ARCH_REQUIRE_GPIOLIB
        select CPU_PJ4
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        select MIGHT_HAVE_PCI
        select MULTI_IRQ_HANDLER
        select MVEBU_MBUS
 
 config ARCH_KS8695
        bool "Micrel/Kendin KS8695"
-       select ARCH_REQUIRE_GPIOLIB
        select CLKSRC_MMIO
        select CPU_ARM922T
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        select NEED_MACH_MEMORY_H
        help
          Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based
 
 config ARCH_W90X900
        bool "Nuvoton W90X900 CPU"
-       select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
        select CLKSRC_MMIO
        select CPU_ARM926T
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        help
          Support for Nuvoton (Winbond logic dept.) ARM9 processor,
          At present, the w90x900 has been renamed nuc900, regarding
 
 config ARCH_LPC32XX
        bool "NXP LPC32XX"
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select CLKDEV_LOOKUP
        select CLKSRC_LPC32XX
        select COMMON_CLK
        select CPU_ARM926T
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        select MULTI_IRQ_HANDLER
        select SPARSE_IRQ
        select USE_OF
        bool "PXA2xx/PXA3xx-based"
        depends on MMU
        select ARCH_MTD_XIP
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_CPU_SUSPEND if PM
        select AUTO_ZRELADDR
        select COMMON_CLK
        select CPU_XSCALE if !CPU_XSC3
        select GENERIC_CLOCKEVENTS
        select GPIO_PXA
+       select GPIOLIB
        select HAVE_IDE
        select IRQ_DOMAIN
        select MULTI_IRQ_HANDLER
 config ARCH_SA1100
        bool "SA1100-based"
        select ARCH_MTD_XIP
-       select ARCH_REQUIRE_GPIOLIB
        select ARCH_SPARSEMEM_ENABLE
        select CLKDEV_LOOKUP
        select CLKSRC_MMIO
        select CPU_FREQ
        select CPU_SA1100
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        select HAVE_IDE
        select IRQ_DOMAIN
        select ISA
 
 config ARCH_S3C24XX
        bool "Samsung S3C24XX SoCs"
-       select ARCH_REQUIRE_GPIOLIB
        select ATAGS
        select CLKDEV_LOOKUP
        select CLKSRC_SAMSUNG_PWM
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
+       select GPIOLIB
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
 config ARCH_DAVINCI
        bool "TI DaVinci"
        select ARCH_HAS_HOLES_MEMORYMODEL
-       select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
        select CPU_ARM926T
        select GENERIC_ALLOCATOR
        select GENERIC_CLOCKEVENTS
        select GENERIC_IRQ_CHIP
+       select GPIOLIB
        select HAVE_IDE
        select USE_OF
        select ZONE_DMA
        depends on MMU
        select ARCH_HAS_HOLES_MEMORYMODEL
        select ARCH_OMAP
-       select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
        select CLKSRC_MMIO
        select GENERIC_CLOCKEVENTS
        select GENERIC_IRQ_CHIP
+       select GPIOLIB
        select HAVE_IDE
        select IRQ_DOMAIN
        select MULTI_IRQ_HANDLER
 config ARCH_EFM32
        bool "Energy Micro efm32"
        depends on ARM_SINGLE_ARMV7M
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        help
          Support for Energy Micro's (now Silicon Labs) efm32 Giant Gecko
          processors.
 
 menuconfig ARCH_AT91
        bool "Atmel SoCs"
        depends on ARCH_MULTI_V4T || ARCH_MULTI_V5 || ARCH_MULTI_V7
-       select ARCH_REQUIRE_GPIOLIB
        select COMMON_CLK_AT91
+       select GPIOLIB
        select PINCTRL
        select SOC_BUS
 
 
        select ARM_GLOBAL_TIMER
        select COMMON_CLK_IPROC
        select CLKSRC_MMIO
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select ARM_AMBA
        select PINCTRL
        help
 
 config ARCH_BCM_MOBILE
        bool
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select ARM_ERRATA_754322
        select ARM_ERRATA_775420
        select ARM_GIC
 config ARCH_BCM2835
        bool "Broadcom BCM2835 family"
        depends on ARCH_MULTI_V6 || ARCH_MULTI_V7
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select ARM_AMBA
        select ARM_ERRATA_411920 if ARCH_MULTI_V6
        select ARM_TIMER_SP804
        select BRCMSTB_L2_IRQ
        select BCM7120_L2_IRQ
        select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE
-       select ARCH_WANT_OPTIONAL_GPIOLIB
        select SOC_BRCMSTB
        select SOC_BUS
        help
 
        bool "Marvell Berlin SoCs"
        depends on ARCH_MULTI_V7
        select ARCH_HAS_RESET_CONTROLLER
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_GIC
        select DW_APB_ICTL
        select DW_APB_TIMER_OF
        select GENERIC_IRQ_CHIP
+       select GPIOLIB
        select MFD_SYSCON
        select PINCTRL
 
 
 config ARCH_DIGICOLOR
        bool "Conexant Digicolor SoC Support"
        depends on ARCH_MULTI_V7
-       select ARCH_REQUIRE_GPIOLIB
        select CLKSRC_MMIO
        select DIGICOLOR_TIMER
        select GENERIC_IRQ_CHIP
+       select GPIOLIB
        select MFD_SYSCON
        select PINCTRL
        select PINCTRL_DIGICOLOR
 
        depends on ARCH_MULTI_V7
        select ARCH_HAS_BANDGAP
        select ARCH_HAS_HOLES_MEMORYMODEL
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select ARM_GIC
        select COMMON_CLK_SAMSUNG
        select EXYNOS_THERMAL
        select EXYNOS_PMU
        select EXYNOS_SROM
+       select GPIOLIB
        select HAVE_ARM_SCU if SMP
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
 
 menuconfig ARCH_MXC
        bool "Freescale i.MX family"
        depends on ARCH_MULTI_V4_V5 || ARCH_MULTI_V6_V7 || ARM_SINGLE_ARMV7M
-       select ARCH_REQUIRE_GPIOLIB
        select ARCH_SUPPORTS_BIG_ENDIAN
        select CLKSRC_IMX_GPT
        select GENERIC_IRQ_CHIP
+       select GPIOLIB
        select PINCTRL
        select PM_OPP if PM
        select SOC_BUS
 
 config INTEGRATOR_IMPD1
        bool "Include support for Integrator/IM-PD1"
        depends on ARCH_INTEGRATOR_AP
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_VIC
-       select GPIO_PL061 if GPIOLIB
+       select GPIO_PL061
+       select GPIOLIB
        help
          The IM-PD1 is an add-on logic module for the Integrator which
          allows ARM(R) Ltd PrimeCells to be developed and evaluated.
 
 menuconfig ARCH_MESON
        bool "Amlogic Meson SoCs"
        depends on ARCH_MULTI_V7
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select GENERIC_IRQ_CHIP
        select ARM_GIC
        select CACHE_L2X0
 
 menuconfig ARCH_MMP
        bool "Marvell PXA168/910/MMP2"
        depends on ARCH_MULTI_V5 || ARCH_MULTI_V7
-       select ARCH_REQUIRE_GPIOLIB
        select GPIO_PXA
+       select GPIOLIB
        select PINCTRL
        select PLAT_PXA
        help
 
        select ARM_DMA_MEM_BUFFERABLE
        select CLKSRC_MMIO
        select GENERIC_IRQ_CHIP
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select PHYLIB if NETDEVICES
        help
          Say Y here if you want to run your kernel on hardware with a
 
 menuconfig ARCH_MV78XX0
        bool "Marvell MV78xx0"
        depends on ARCH_MULTI_V5
-       select ARCH_REQUIRE_GPIOLIB
        select CPU_FEROCEON
+       select GPIOLIB
        select MVEBU_MBUS
        select PCI
        select PLAT_ORION_LEGACY
 
        select SOC_BUS
        select MVEBU_MBUS
        select ZONE_DMA if ARM_LPAE
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select PCI_QUIRKS if PCI
        select OF_ADDRESS_PCI
 
 config MACH_KIRKWOOD
        bool "Marvell Kirkwood boards"
        depends on ARCH_MULTI_V5
-       select ARCH_REQUIRE_GPIOLIB
        select CPU_FEROCEON
+       select GPIOLIB
        select KIRKWOOD_CLK
        select MACH_MVEBU_ANY
        select ORION_IRQCHIP
 
 config ARCH_MXS
        bool "Freescale MXS (i.MX23, i.MX28) support"
        depends on ARCH_MULTI_V5
-       select ARCH_REQUIRE_GPIOLIB
        select CLKSRC_MMIO
+       select GPIOLIB
        select PINCTRL
        select SOC_BUS
        select SOC_IMX23
 
 menuconfig ARCH_NOMADIK
        bool "ST-Ericsson Nomadik"
        depends on ARCH_MULTI_V5
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select ARM_VIC
        select CLKSRC_NOMADIK_MTU
        select CLKSRC_NOMADIK_MTU_SCHED_CLOCK
        select CPU_ARM926T
+       select GPIOLIB
        select MIGHT_HAVE_CACHE_L2X0
        select PINCTRL
        select PINCTRL_NOMADIK
 
        select ARCH_HAS_BANDGAP
        select ARCH_HAS_HOLES_MEMORYMODEL
        select ARCH_OMAP
-       select ARCH_REQUIRE_GPIOLIB
        select CLKSRC_MMIO
        select GENERIC_IRQ_CHIP
+       select GPIOLIB
        select MACH_OMAP_GENERIC
        select MEMORY
        select MFD_SYSCON
 
 menuconfig ARCH_ORION5X
        bool "Marvell Orion"
        depends on MMU && ARCH_MULTI_V5
-       select ARCH_REQUIRE_GPIOLIB
        select CPU_FEROCEON
        select GENERIC_CLOCKEVENTS
+       select GPIOLIB
        select MVEBU_MBUS
        select PCI
        select PLAT_ORION_LEGACY
 
 menuconfig ARCH_OXNAS
        bool "Oxford Semiconductor OXNAS Family SoCs"
-       select ARCH_REQUIRE_GPIOLIB
        select ARCH_HAS_RESET_CONTROLLER
+       select GPIOLIB
        select PINCTRL
        depends on ARCH_MULTI_V5
        help
 
 config ARCH_PICOXCELL
        bool "Picochip PicoXcell"
        depends on ARCH_MULTI_V6
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_VIC
        select DW_APB_TIMER_OF
+       select GPIOLIB
        select HAVE_TCM
        select NO_IOPORT_MAP
 
        depends on ARCH_MULTI_V7
        select ARCH_HAS_RESET_CONTROLLER
        select RESET_CONTROLLER
-       select ARCH_REQUIRE_GPIOLIB
        select GENERIC_IRQ_CHIP
+       select GPIOLIB
        select NO_IOPORT_MAP
        select REGMAP
        select PINCTRL
 
        select PINCTRL
        select PINCTRL_ROCKCHIP
        select ARCH_HAS_RESET_CONTROLLER
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select ARM_GIC
        select CACHE_L2X0
+       select GPIOLIB
        select HAVE_ARM_ARCH_TIMER
        select HAVE_ARM_SCU if SMP
        select HAVE_ARM_TWD if SMP
 
 
 config PLAT_S3C24XX
        def_bool y
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select NO_IOPORT_MAP
        select S3C_DEV_NAND
        select IRQ_DOMAIN
 
 menuconfig ARCH_S3C64XX
        bool "Samsung S3C64XX"
        depends on ARCH_MULTI_V6
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select ARM_VIC
        select CLKSRC_SAMSUNG_PWM
        select COMMON_CLK_SAMSUNG
        select GPIO_SAMSUNG if ATAGS
+       select GPIOLIB
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_TCM
 
        bool "Samsung S5PV210/S5PC110"
        depends on ARCH_MULTI_V7
        select ARCH_HAS_HOLES_MEMORYMODEL
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_VIC
        select CLKSRC_SAMSUNG_PWM
        select COMMON_CLK_SAMSUNG
+       select GPIOLIB
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
 
        select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE
        select NO_IOPORT_MAP
        select PINCTRL
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select ZONE_DMA if ARM_LPAE
 
 if ARCH_RENESAS
 
 menuconfig PLAT_SPEAR
        bool "ST SPEAr Family"
        depends on ARCH_MULTI_V7 || ARCH_MULTI_V5
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select CLKSRC_MMIO
+       select GPIOLIB
 
 if PLAT_SPEAR
 
 
        select MFD_SYSCON
        select ARCH_HAS_RESET_CONTROLLER
        select HAVE_ARM_SCU if SMP
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select ARM_ERRATA_754322
        select ARM_ERRATA_764369 if SMP
        select ARM_ERRATA_775420
 
 menuconfig ARCH_SUNXI
        bool "Allwinner SoCs"
        depends on ARCH_MULTI_V7
-       select ARCH_REQUIRE_GPIOLIB
        select ARCH_HAS_RESET_CONTROLLER
        select CLKSRC_MMIO
        select GENERIC_IRQ_CHIP
+       select GPIOLIB
        select PINCTRL
        select SUN4I_TIMER
        select RESET_CONTROLLER
 
 menuconfig ARCH_TEGRA
        bool "NVIDIA Tegra"
        depends on ARCH_MULTI_V7
-       select ARCH_REQUIRE_GPIOLIB
        select ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
        select ARM_AMBA
        select ARM_GIC
        select CLKSRC_MMIO
+       select GPIOLIB
        select HAVE_ARM_SCU if SMP
        select HAVE_ARM_TWD if SMP
        select PINCTRL
 
 menuconfig ARCH_U300
        bool "ST-Ericsson U300 Series"
        depends on ARCH_MULTI_V5 && MMU
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select ARM_VIC
        select CLKSRC_MMIO
        select CPU_ARM926T
+       select GPIOLIB
        select HAVE_TCM
        select PINCTRL
        select PINCTRL_COH901
 
        depends on ARCH_MULTI_V7 && MMU
        select AB8500_CORE
        select ABX500_CORE
-       select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select ARM_ERRATA_754322
        select ARM_ERRATA_764369 if SMP
        select ARM_GIC
        select CACHE_L2X0
        select CLKSRC_NOMADIK_MTU
+       select GPIOLIB
        select HAVE_ARM_SCU if SMP
        select HAVE_ARM_TWD if SMP
        select PINCTRL
 
 menuconfig ARCH_VEXPRESS
        bool "ARM Ltd. Versatile Express family"
        depends on ARCH_MULTI_V7
-       select ARCH_REQUIRE_GPIOLIB
        select ARCH_SUPPORTS_BIG_ENDIAN
        select ARM_AMBA
        select ARM_GIC
        select ARM_GLOBAL_TIMER
        select ARM_TIMER_SP804
        select COMMON_CLK_VERSATILE
+       select GPIOLIB
        select HAVE_ARM_SCU if SMP
        select HAVE_ARM_TWD if SMP
        select HAVE_PATA_PLATFORM
 
 config ARCH_VT8500
        bool
-       select ARCH_REQUIRE_GPIOLIB
+       select GPIOLIB
        select CLKDEV_LOOKUP
        select VT8500_TIMER
        select PINCTRL