These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / mips / ath79 / dev-common.c
index 516225d..9d0172a 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/platform_device.h>
+#include <linux/platform_data/gpio-ath79.h>
 #include <linux/serial_8250.h>
 #include <linux/clk.h>
 #include <linux/err.h>
@@ -106,3 +107,53 @@ void __init ath79_register_wdt(void)
 
        platform_device_register_simple("ath79-wdt", -1, &res, 1);
 }
+
+static struct ath79_gpio_platform_data ath79_gpio_pdata;
+
+static struct resource ath79_gpio_resources[] = {
+       {
+               .flags = IORESOURCE_MEM,
+               .start = AR71XX_GPIO_BASE,
+               .end = AR71XX_GPIO_BASE + AR71XX_GPIO_SIZE - 1,
+       },
+       {
+               .start  = ATH79_MISC_IRQ(2),
+               .end    = ATH79_MISC_IRQ(2),
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device ath79_gpio_device = {
+       .name           = "ath79-gpio",
+       .id             = -1,
+       .resource       = ath79_gpio_resources,
+       .num_resources  = ARRAY_SIZE(ath79_gpio_resources),
+       .dev = {
+               .platform_data  = &ath79_gpio_pdata
+       },
+};
+
+void __init ath79_gpio_init(void)
+{
+       if (soc_is_ar71xx()) {
+               ath79_gpio_pdata.ngpios = AR71XX_GPIO_COUNT;
+       } else if (soc_is_ar7240()) {
+               ath79_gpio_pdata.ngpios = AR7240_GPIO_COUNT;
+       } else if (soc_is_ar7241() || soc_is_ar7242()) {
+               ath79_gpio_pdata.ngpios = AR7241_GPIO_COUNT;
+       } else if (soc_is_ar913x()) {
+               ath79_gpio_pdata.ngpios = AR913X_GPIO_COUNT;
+       } else if (soc_is_ar933x()) {
+               ath79_gpio_pdata.ngpios = AR933X_GPIO_COUNT;
+       } else if (soc_is_ar934x()) {
+               ath79_gpio_pdata.ngpios = AR934X_GPIO_COUNT;
+               ath79_gpio_pdata.oe_inverted = 1;
+       } else if (soc_is_qca955x()) {
+               ath79_gpio_pdata.ngpios = QCA955X_GPIO_COUNT;
+               ath79_gpio_pdata.oe_inverted = 1;
+       } else {
+               BUG();
+       }
+
+       platform_device_register(&ath79_gpio_device);
+}