|
@@ -13,6 +13,8 @@
|
|
|
#include <linux/platform_device.h>
|
|
|
#include <linux/amba/bus.h>
|
|
|
|
|
|
+#include <plat/gpio.h>
|
|
|
+
|
|
|
#include <mach/hardware.h>
|
|
|
|
|
|
#include "devices-common.h"
|
|
@@ -105,3 +107,39 @@ dbx500_add_platform_device_4k1irq(const char *name, int id,
|
|
|
return dbx500_add_platform_device(name, id, pdata, resources,
|
|
|
ARRAY_SIZE(resources));
|
|
|
}
|
|
|
+
|
|
|
+static struct platform_device *
|
|
|
+dbx500_add_gpio(int id, resource_size_t addr, int irq,
|
|
|
+ struct nmk_gpio_platform_data *pdata)
|
|
|
+{
|
|
|
+ struct resource resources[] = {
|
|
|
+ {
|
|
|
+ .start = addr,
|
|
|
+ .end = addr + 127,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .start = irq,
|
|
|
+ .end = irq,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ return platform_device_register_resndata(NULL, "gpio", id,
|
|
|
+ resources, ARRAY_SIZE(resources),
|
|
|
+ pdata, sizeof(*pdata));
|
|
|
+}
|
|
|
+
|
|
|
+void dbx500_add_gpios(resource_size_t *base, int num, int irq,
|
|
|
+ struct nmk_gpio_platform_data *pdata)
|
|
|
+{
|
|
|
+ int first = 0;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < num; i++, first += 32, irq++) {
|
|
|
+ pdata->first_gpio = first;
|
|
|
+ pdata->first_irq = NOMADIK_GPIO_TO_IRQ(first);
|
|
|
+
|
|
|
+ dbx500_add_gpio(i, base[i], irq, pdata);
|
|
|
+ }
|
|
|
+}
|