From: Christopher Hill <ch6574@gmail.com>
Subject: [PATCH] ath79: add Mikrotik rb4xx series drivers

This adds 3 Mikrotik rb4xx series drivers as follows:

rb4xx-cpld: This is in the mfd subsystem, and is the parent CPLD device
that interfaces between the SoC SPI bus and its two children below.
rb4xx-gpio: This is the GPIO expander.
rb4xx-nand: This is the NAND driver.

The history of this code comes in three phases.

1. The first is a May 2015 attempt to push the equivalient ar71xx rb4xx
drivers upstream. See https://lore.kernel.org/patchwork/patch/940880/.

Module-author: Gabor Juhos <juhosg@openwrt.org>
Module-author: Imre Kaloz <kaloz@openwrt.org>
Module-author: Bert Vermeulen <bert@biot.com>

2. Next several ar71xx patches were applied bringing the code current.

commit 7bbf4117c6fe4b764d9d7c62fb2bcf6dd93bff2c
Submitted-by: Hauke Mehrtens <hauke@hauke-m.de>

commit af79fdbe4af32a287798b579141204bda056b8aa
commit 889272d92db689fd9c910243635e44c9d8323095
commit e21cb649a235180563363b8af5ba8296b9ac0baa
commit 7c09fa4a7492ca436f2c94bd9a465b7c5bbeed6f
Submitted-by: Felix Fietkau <nbd@nbd.name>

3. Finally a heavy refactor to split the driver into the three new
subsystems, and updated to work with the device tree configuration, plus
updates and review feedback incorporated

Reviewed-by: Thibaut VARÈNE <hacks@slashdirt.org>
Submitted-by: Christopher Hill <ch6574@gmail.com>
---
 drivers/mfd/Kconfig                           | 8 ++++++++
 drivers/mfd/Makefile                          | 1 +
 drivers/gpio/Kconfig                          | 6 ++++++
 drivers/gpio/Makefile                         | 1 +
 drivers/mtd/nand/raw/Kconfig                  | 7 +++++++
 drivers/mtd/nand/raw/Makefile                 | 1 +
 6 files changed, 24 insertions(+)

--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -2330,6 +2330,14 @@ config RAVE_SP_CORE
 	  Select this to get support for the Supervisory Processor
 	  device found on several devices in RAVE line of hardware.
 
+config MFD_RB4XX_CPLD
+	tristate "CPLD driver for Mikrotik RB4xx series boards"
+	select MFD_CORE
+	depends on ATH79 || COMPILE_TEST
+	help
+	  Enables support for the CPLD chip (NAND & GPIO) on Mikrotik
+	  Routerboard RB4xx series.
+
 config SGI_MFD_IOC3
 	bool "SGI IOC3 core driver"
 	depends on PCI && MIPS && 64BIT
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -276,6 +276,7 @@ obj-$(CONFIG_MFD_KHADAS_MCU) 	+= khadas-
 obj-$(CONFIG_MFD_ACER_A500_EC)	+= acer-ec-a500.o
 obj-$(CONFIG_MFD_QCOM_PM8008)	+= qcom-pm8008.o
 
+obj-$(CONFIG_MFD_RB4XX_CPLD)	+= rb4xx-cpld.o
 obj-$(CONFIG_SGI_MFD_IOC3)	+= ioc3.o
 obj-$(CONFIG_MFD_SIMPLE_MFD_I2C)	+= simple-mfd-i2c.o
 obj-$(CONFIG_MFD_SMPRO)		+= smpro-core.o
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -1772,6 +1772,12 @@ config GPIO_SODAVILLE
 	help
 	  Say Y here to support Intel Sodaville GPIO.
 
+config GPIO_RB4XX
+	tristate "GPIO expander for Mikrotik RB4xx series boards"
+	depends on MFD_RB4XX_CPLD
+	help
+	  GPIO driver for Mikrotik Routerboard RB4xx series.
+
 endmenu
 
 menu "SPI GPIO expanders"
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -137,6 +137,7 @@ obj-$(CONFIG_GPIO_PL061)		+= gpio-pl061.
 obj-$(CONFIG_GPIO_PMIC_EIC_SPRD)	+= gpio-pmic-eic-sprd.o
 obj-$(CONFIG_GPIO_PXA)			+= gpio-pxa.o
 obj-$(CONFIG_GPIO_RASPBERRYPI_EXP)	+= gpio-raspberrypi-exp.o
+obj-$(CONFIG_GPIO_RB4XX)		+= gpio-rb4xx.o
 obj-$(CONFIG_GPIO_RC5T583)		+= gpio-rc5t583.o
 obj-$(CONFIG_GPIO_RCAR)			+= gpio-rcar.o
 obj-$(CONFIG_GPIO_RDA)			+= gpio-rda.o
--- a/drivers/mtd/nand/raw/Kconfig
+++ b/drivers/mtd/nand/raw/Kconfig
@@ -556,4 +556,11 @@ config MTD_NAND_AR934X
 	  Enables support for NAND controller on Qualcomm Atheros SoCs.
 	  This controller is found on AR934x and QCA955x SoCs.
 
+config MTD_NAND_RB4XX
+	tristate "Support for NAND driver for Mikrotik RB4xx series boards"
+	depends on MFD_RB4XX_CPLD
+	help
+	  Enables support for the NAND flash chip on Mikrotik Routerboard
+	  RB4xx series.
+
 endif # MTD_RAW_NAND
--- a/drivers/mtd/nand/raw/Makefile
+++ b/drivers/mtd/nand/raw/Makefile
@@ -59,6 +59,7 @@ obj-$(CONFIG_MTD_NAND_ROCKCHIP)		+= rock
 obj-$(CONFIG_MTD_NAND_PL35X)		+= pl35x-nand-controller.o
 obj-$(CONFIG_MTD_NAND_RENESAS)		+= renesas-nand-controller.o
 obj-$(CONFIG_MTD_NAND_AR934X)		+= ar934x_nand.o
+obj-$(CONFIG_MTD_NAND_RB4XX)		+= nand_rb4xx.o
 
 nand-objs := nand_base.o nand_legacy.o nand_bbt.o nand_timings.o nand_ids.o
 nand-objs += nand_onfi.o
